Prctica N2: Calculadora matricial. Sandra Chacha Quille Patricio Parra Abad Manuel Sagbay Asitimbay Universidad Politcnica Salesiana Cuenca - Ecuador schachaa@est.ups.edu.ec pparra@est.ups.edu.ec msagbaya@est.ups.edu.ec AbstractIn this paper we datailed the operation and man- agement of a 4x4 matrix keyboard by interrupting the highest bits of port B with a matrix calculator which will be presented in a 4x20 LCD will be performed. En este documento se detallar el funcionamiento y manejo de un teclado matricial 4x4 mediante la interrupcin de los bits ms altos del puerto B con la cual se realizar una calculadora matricial que se presentar en una LCD 4x20. Index TermsINTCON, INTCON2, RCON. I. OBJETIVOS. A. Objetivo General. Manejar interrupciones por cambio de estado. B. Objetivos Especcos. Resolver operaciones matriciales (suma, resta multipli- cacin, divisin). Hacer un interfaz usuario/mquina para ingresar y visu- alizar datos mens y submens. Programar usando funciones. II. INTRODUCCIN. La necesidad de sumar y hacer clculos apareci muy temprano entre los humanos, para nes como el comercio, o la observacin de la naturaleza y de las estrellas, es as que nuestro primer instrumento de clculo elemental fueron los dedos de nuestra mano luego se utilizaron los elementos de la naturaleza, tiempo despus surge el baco que es un invento que revoluciona el mundo de las matemticas , tiempo despus en 1642 el matemtico francs Blaise Pascal inventa la primera sumadora, ms tarde en 1693 Gotfried Whilelm Leibniz ide una mquina calculadora en 1693, que superaba a la de Pascal. Pero con desarrollo tecnolgico el estadounidense Herman Hollerith (1860-1929) inventa la primera calculadora electromecnica con el tiempo Hollerith fundo una compaa dedicada a construir este tipo de mquinas, esa empresa sera International Business Machines Corporation, conocida en estos das como I.B.M. Con este precedente en el ao 1967, Jack Kilby, Jerry Merryman y James Van Tassel de Texas Instruments, desarrollaron la primera calculadora fcilmente transportable, llamada Datamath. . Con esto, se puede decir que el clculo desde un principio ha podido satisfacer las necesidades bsicas del ser humano, luego, con la invencin de la calculadora, el hombre ha podido facilitar mucho su trabajo, ya que puede resolver desde difciles operaciones matemticas a simples clculos de la vida cotidiana rpidamente. Entonces, conscientes de la utilidad de las calculadoras para facilitarnos nuestra vida diaria la practica realizada est orientada al desarrollo de un programa para el manejo una calculadora capaz de resolver las operaciones de suma, resta, multiplicacin y divisin de dos matrices, para lo cual se utiliz el principio bsico de las interrupciones, destacando el uso de las interrupciones externas para el manejo del teclado matricial adems de la correcta visualizacin de datos en la LCD. [1], [3], [5] III. MARCO TERICO. A. Historia. En 1961 apareci ya la primera calculadora 100% elec- trnica llamada Sumlock Comptometer ANITA, hecha por los britnicos de Bell Punch. Esta calculadora utilizaba tubos de vaco, tubos de ctodos fros y decatrones en sus circuitos, adems de 12 tubos Nixie como pantalla. Para 1970, gracias al estudio de los semiconductores, se crearon las calculadoras porttiles que usaban bateras recar- gables. Las primeras calculadoras porttiles aparecieron en Japn ese ao, y fueron rpidamente vendidas alrededor del mundo. Algunos de estos equipos eran la Sanyo ICC-0081, la Canon Pocketronic y la Sharp QT.8B. El esfuerzo en el desarrollo de un circuito integrado, en tanto, culminara tan solo 1 ao despus, con la primera "calculadora en un chip", la MK6010 de Mostek, seguida por un modelo de Texas Instruments ese mismo ao. De ah en adelante este se convirti en el modelo para las calculadoras alrededor del mundo. En 1973, Texas Instruments lanz la primera calculadora cientca, la SR-10, que costaba US$150 e inclua un botn para "" (pi). En los siguientes aos se sumaron funciones logartmicas, trigonometra y otros. B. En la actualidad Hoy en da gracias a la tecnologa como la de un CMOS y de paneles solares, permitieron luego la creacin de calculadoras ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 2 programables y calculadoras sin necesidad de pilas. A medida tambin que avanzaba la programacin y el conocimiento matemtico tambin se fueron implementando ms funciones, como derivadas, integrales y ecuaciones diferenciales. En la dcada de 1980 aparecieron las calculadoras nancieras, y desde entonces han seguido su desarrollo para estar emuladas en casi todas partes, permitindonos hoy en da aprovechar de este invento en casi cualquier dispositivo electrnico, desde un reloj a un telfono. C. Caractersticas microntrolador 16F877A. Pertenece a la familia de microcontroaldores de la gama de 8bits sus caractersticas de memoria de programa, memoria RAM, nmero de entradas/ salidas, nmero de canales analgi- cos y tipos de puertos de comunicacin, han hecho de este PIC uno de los utilizados para el desarrollo de las diversas aplicaciones.[2] Figure 1. Distribucin de Pines PIC 18f4550 Entre sus principales caractersticas tenemos: Arquitectura RISC avanzada Harvard: 1bits con 8 bits de datos D. Arquitectura del microntrolador 1) Organizacin de memoria:: Memoria de Programa: Memoria ash interna de 32.768 bytes. -Almacena Instrucciones y constantes/datos -Puede ser escrita/leida mediante un programador externo Memoria RAM de datos: memoria SRAM interna de 2048 bytes en las que estn incluidos los registros de funcin especial. -Almacena datos de forma temporal durante la ejecucin del programa. -Puede ser leida/escrita en tiempo de ejecucion mediante diversas instrucciones. Memoria EEPROM de datos: memoria no voltil de 256 bytes. -Almacena datos que se deben conservar aun en ausencia de tensin de alimentacin. -Puede ser escrita/leda en tiempo de ejecucin a traves de registros. Pila: bloque de 31 palabras de 21 bits. Almacena la direccin de la instruccin que debe ser ejecutada despus de una interrupcin o subrutina. Memoria de conguracin: memoria en la que se incluyen los bits de conguracin (12 bytes de memoria ash) y los registros de identicacin (2 bytes de memoria de solo lectura). Este bloque situado a partir de la posicin 30000H de memoria de programa. -Bits de conguracin.- contenidos en 12 bytes de memo- ria ash: Opciones de oscilador, opciones de reset, opciones de watchdog,opciones de la circuiteria de depuracin y programacin,opciones de proteccion contra escritura de memoria de programa y memoria EEPROM de datos. -Registros de identicacin.- dos registros situados en las direcciones 3FFFFEH y 3FFFFFH que contienen informacin del modelo y revisin del dispositivo.[6] 2) Arquitectura de Harvard: Buses diferentes para el acceso a memoria de programa y memoria de datos.[6] -Bus de la memoria de programa: 21 lineas de direccin, 16/8 lineas de datos (16 lineas para instrucciones / 8 lineas para datos). -Bus de la memoria de datos:12 lineas de direccin, 8 lineas de datos. -Acceso simultaneo a la memoria de programa y a la memoria de datos. E. Interrupciones. El microcontrolador PIC18F4550 tiene dos fuente princi- pales de interrupcin: del Ncleo y de los perifricos.[5] Las principales fuentes de interrupcin del ncleo son: Exteriores disparado por el interrupcin en los pines : INT0, INT1 e INT2. Pines PORTB interrumpe cuando cambia el estado de uno de los pines RB4 a RB7 . Temporizador 0. Entre las fuentes de interrupcin perifrica tenemos: Conversin A / D completa. USART interrupcin de recepcin. USART interrupcin de transmisin. Deteccin de bajo voltaje. 1) Prioridad de las interrupciones: Las interrupciones en la familia PIC18F se puede dividir en dos grupos: de alta prioridad y baja prioridad. Si en la aplicacin no es necesario establecer prioridades para las interrupciones, el usuario puede optar por desactivar el esquema de prioridades para que todas las interrupciones se encuentran en la misma nivel de prioridad. El PIC18F4550 utiliza varios registros para el control de la interrupcin. Estos son: RCON, INTCON, INTCON2, INTCON3, PIR1, PIR2 PIE1, PIE2 IPR1, IPR2.[5] 2) Interrupcin por cambio de estado.: Cuatro pines del PORTB (RB7:RB4) son capaces de disparar una interrupcin por cambio de estado. Este tipo de interrupciones son comn- mente usadas para el manejo de teclados matriciales, de ah ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 3 que estos pines tambin los denominen KBI0:KBI3. De estos 4 pines, solo producirn interrupcin aquellos congurados como entradas, si alguno est congurado como salida, queda excluido de la interrupcin por cambio de estado. Cualquiera de estos 4 pines dispara la misma interrupcin, es decir la misma bandera de interrupcin se activa, la bandera RBIF (INTCON<0>).[5] F. LCD 4x20 Un LCD es: una pantalla de cristal lquido que visualiza unos ciertos caracteres. Para poder hacer funcionar un LCD, debe de estar conectado a un circuito impreso en el que estn integrados los controladores del display y los pines para la conexin del display. Sobre el circuito impreso se encuentra el LCD en si, rodeado por una estructura metlica que lo protege. Un LCD 4X20 posee 4 las y 20 columnas que permiten visiualizar caracteres alfanumricos en su pantalla, como se muestra en la siguiente imagen.[7] Figure 2. Display 4 x 16 G. Teclado matricial Es un simple arreglo de botones conectados en las y columnas, de modo que se pueden leer varios botones con el mnimo nmero de pines requeridos. Un teclado matricial 44 solamente ocupa 4 lneas de un puerto para las las y otras 4 lneas para las columnas, de este modo se pueden leer 16 teclas utilizando solamente 8 lneas de un microcontrolador. Si asumimos que todas las columnas y las inicialmente estn en alto (1 lgico), la pulsacin de un botn se puede detectar al poner cada la a en bajo (0 lgico) y checar cada columna en busca de un cero, si ninguna columna est en bajo entonces el 0 de las las se recorre hacia la siguiente y as secuencialmente.[6] Figure 3. Teclado matricial 1) Tipos de teclado: En el mercado es habitual encontrar teclados matriciales pasivos de 3 x 4 y de 4 x 4 teclas. Esencialmente estn constituidos por las y columnas conduc- toras en cuyo cruce se encuentra un pulsador mecnico o de membrana que, al ser pulsado, establece el contacto elctrico entre la la y la columna correspondiente. As tenemos estos dos tipos de teclados:[6] Teclado de membrana: que es un teclado exible, ma- tricial de membrana, con 16 teclas, mayor resistencia al agua y al polvo, auto adhesivo en la parte de atrs. Figure 4. Teclado de membrana Teclado mecnico, sus teclas y cuerpo es elaborado en plstico, ideal para montaje en tableros de control, tiene una alta duracin. Figure 5. Teclado mecnico H. Registro RCON. R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 IPEN SBOREN R1 TO PD POR BOR bit 7 bit 0 bit 7: IPEN: Bit de habilitacin de prioridades en las interrupciones: 1= Sistema de prioridades habilitado. 0= Sistema de prioridades deshabilitado. ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 4 bit 6: RBOREN: Habilitacin del circuito BOR (Brown Out Reset): Si BOREN1:BOREN0=01: 1= BOR habilitado. 0= BOR deshabilitado. Si BOREN1:BOREN0=00, 10, o 11: El bit es deshabilitado y se lee como 0. bit 5: No implementado: bit 4: RI: Flag de instruccin de RESET.: 1= La instruccin de RESET fu ejecutada. 0= La instruccin de RESET no ha sido ejecutada. bit 3: TO: Flag del watchdog Time-Out: 1= Denido por el encendido, la instruccin CLRWDT o instruccin SLEEP. 0= A WDT tiempo de espera se ha producido. bit 2: PD: Power-Up Flag Deteccin de bit: 1= Denido por el encendido o por la instruccin CLR- WDT . 0= Se establece por la ejecucin de la instruccin SLEEP. bit 1: POR: Power-on Reset Status bit(2): 1= Power-on Reset no se ha producido. 0= Power-on Reset se produjo. bit 0: BOR: Brown-out Reset Status bit: 1= No ha ocurrido el Brown-out reset. 0= Se produjo el Brown-out reset. I. Registro INTCON. R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 GIE/GIEH PEIE/GIEL T0IE INTE RBIE T0IF INTF RBIF bit 7 bit 0 bit 7: GIE: Habilitacin global de interrupciones, depende de IPEN: IPEN=0; 1= Interrupciones habilitadas a nivel global. 0= Interrupciones habilitadas a nivel global. si IPEN=1; 1= Interrupciones de alta prioridad habilitadas a nivel global. 1= Interrupciones de alta prioridad deshabilitadas a nivel global. bit 6: PEIE: Habilita interrupciones de los perifricos que no se controla con el registro INTCON, depende de IPEN.: IPEN=0: 1= Habilita interrupciones de los perifricos a nivel global. 0= Deshabilita interrupciones de los perifricos a nivel global. IPEN=1: 1= Interrupciones de baja prioridad habilitadas a nivel global. 0= Interrupciones de baja prioridad deshabilitadas a nivel global. bit 5: T0IE: bit de habilitacin de la interrupcin por desbordamiento del TMR0: 1= Habilita la interrupcin. 0= Inhabilita la interrupcin. bit 4: INTE: bit de habilitacin de la interrupcin externa por el pin RB0/INT: 1= Habilita la interrupcin. 0= Inhabilita la interrupcin. bit 3: RBIE: bit de habilitacin de interrupcin por cambio de nivel en el PORTB: 1= Habilita la interrupcin. 0= Inhabilita la interrupcin. bit 2: T0IF: Flag de indicacin de desbordamiento de TMR0: 1= El TMR0 se ha desbordado. Se borra por software. 0= El TMR0 no se ha desbordado. bit 1: INTF: Flag de estado de la interrupcin externa INT: 1= La interrupcin externa se ha producido. Se borra por software. 0= La interrupcin externa no se ha producido. bit 0: RBIF: Flag de indicacin de interrupcin por cambio de nivel en PORTB: 1= Se ha producido un cambio de nivel en los pines RB7:RB4. Se borra por software. 0= No se ha producido un cambio de nivel en los pines RB7:RB4. J. REGISTRO INTCON2. U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x RBPU INTEDG0 INTEDG1 INTEDG2 TMR0IP RBIP bit 7 bit 0 bit 7: RBPU: Bit de habilitacin de las resistencias de pull- up del puerto B: 1= Resistencias de pull-up activadas. 0= Resistencias de pull-up desactivadas. bit 6: INTEDG0: Bit de anco de la interrupcin externa 0: 1= Interrupcin por anco de subida. 0= Interrupcin por anco de bajada. bit 5: INTEDG0: Bit de anco de la interrupcin externa 1: 1= Interrupcin por anco de subida. 0= Interrupcin por anco de bajada. bit 4: INTEDG0: Bit de anco de la interrupcin externa 2: 1= Interrupcin por anco de subida. 0= Interrupcin por anco de bajada. bit 3: No implementados: Se lee como 0.: bit 2: TMR0IP: Bit de seleccin de prioridad de la inter- rupcin del temporizador 0: 1= Prioridad alta. 0= Prioridad baja. bit 1: No implementados: Se lee como 0.: bit 0: RBPI: Bit de seleccin de prioridad de la interrupcin por el cambio del puerto B.: 1= Prioridad alta. 0= Prioridad baja. ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 5 IV. MATERIALES UTILIZADOS: TABLA 5 MATERIALES UTILIZADOS Descripcin. Cantidad Circuitos integrados PIC 18F4550 1 Capacitores. 22pF 2 1u 1 Varios. LCD 4X20 1 Teclado matricial mecnico 1 Cristal de cuarzo de 20Mhz 1 V. DESARROLLO. A. Consideraciones de diseo generales. Para sta prctica se ha establecido los siguientes parmet- ros: Los nicos cambio en la conguracin inicial del PIC18F4550 se enumeran a continuacin, los demas parmetros quedan los que estn por defecto. 1) Oscillator Selection: HS (20MHz) 2) MCLR pin: Disable. Clculos Bsicos: Fosc = 20MHz Tosc = 1 20MHz = 50ns Tcy = 4 Tosc = 4 50ns = 200ns B. Consideraciones y diseo para el manejo del teclado El teclado se lo conecta en el puerto B para hacer uso de la interrupcin por el cambio de estado del puerto, y se la realiz de la siguiente manera. 1 2 3 6 5 4 8 9 = 7 ++ C ON 0 A B C D 124 3 RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF-/CVREF 4 RA3/AN3/VREF+ 5 RA4/T0CKI/C1OUT/RCV 6 RA5/AN4/SS/LVDIN/C2OUT 7 RA6/OSC2/CLKO 14 OSC1/CLKI 13 RB0/AN12/INT0/FLT0/SDI/SDA 33 RB1/AN10/INT1/SCK/SCL 34 RB2/AN8/INT2/VMO 35 RB3/AN9/CCP2/VPO 36 RB4/AN11/KBI0/CSSPP 37 RB5/KBI1/PGM 38 RB6/KBI2/PGC 39 RB7/KBI3/PGD 40 RC0/T1OSO/T1CKI 15 RC1/T1OSI/CCP2/UOE 16 RC2/CCP1/P1A 17 VUSB 18 RC4/D-/VM 23 RC5/D+/VP 24 RC6/TX/CK 25 RC7/RX/DT/SDO 26 RD0/SPP0 19 RD1/SPP1 20 RD2/SPP2 21 RD3/SPP3 22 RD4/SPP4 27 RD5/SPP5/P1B 28 RD6/SPP6/P1C 29 RD7/SPP7/P1D 30 RE0/AN5/CK1SPP 8 RE1/AN6/CK2SPP 9 RE2/AN7/OESPP 10 RE3/MCLR/VPP 1 U2 PIC18F4550 A B C D 1234 A B C D 1 2 3 4 Figure 6. Diseo del circuito para el telcado. 1) Conguracin inicial de registro/s:: intcon2_rbip=1: Prioridad alta para la interrupcin por el cambio de estado del puerto B. intcon2_rbpu=0: Resistencias de pull-up habilitadas. rcon_ipen=1: Habilitacin de los niveles de prioridad de interrupciones. intcon_rbie=1: Habilitacin de la interrupcin por el cambio de estado del puerto B. intcon_rbif=0: No se ha dado la interrupcin por el cambio de estado del puerto B. intcon2_rbip=1: Prioridad alta para la interrupcin por el cambio de estado del puerto B intcon_gie=1: (Con ipen=1), Habilitacin de prioridades altas. 2) Conguracin de los pines para manejar el teclado matricial en el programa.: #dene A PORTB.B0 #dene B PORTB.B1 #dene C PORTB.B2 #dene D PORTB.B3 #dene UNO PORTB.B4 #dene DOS PORTB.B5 #dene TRES PORTB.B6 #dene CUATRO PORTB.B7 C. Consideraciones y diseo para la LCD. La LCD se la ha conectado en el puerto D de la siguiente forma. D 7 1 4 D 6 1 3 D 5 1 2 D 4 1 1 D 3 1 0 D 2 9 D 1 8 D 0 7 E 6 R W 5 R S 4 V S S 1 V D D 2 V E E 3 LCD1 LM044L RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF-/CVREF 4 RA3/AN3/VREF+ 5 RA4/T0CKI/C1OUT/RCV 6 RA5/AN4/SS/LVDIN/C2OUT 7 RA6/OSC2/CLKO 14 OSC1/CLKI 13 RB0/AN12/INT0/FLT0/SDI/SDA 33 RB1/AN10/INT1/SCK/SCL 34 RB2/AN8/INT2/VMO 35 RB3/AN9/CCP2/VPO 36 RB4/AN11/KBI0/CSSPP 37 RB5/KBI1/PGM 38 RB6/KBI2/PGC 39 RB7/KBI3/PGD 40 RC0/T1OSO/T1CKI 15 RC1/T1OSI/CCP2/UOE 16 RC2/CCP1/P1A 17 VUSB 18 RC4/D-/VM 23 RC5/D+/VP 24 RC6/TX/CK 25 RC7/RX/DT/SDO 26 RD0/SPP0 19 RD1/SPP1 20 RD2/SPP2 21 RD3/SPP3 22 RD4/SPP4 27 RD5/SPP5/P1B 28 RD6/SPP6/P1C 29 RD7/SPP7/P1D 30 RE0/AN5/CK1SPP 8 RE1/AN6/CK2SPP 9 RE2/AN7/OESPP 10 RE3/MCLR/VPP 1 U2 PIC18F4550 d 7 d 6 d 5 d 4 e rs d7 d6 d5 d4 e rs 5 4 % RV1 1k Figure 7. Diseo del circuito para la LCD. 1) Conguracin de los pines para la LCD: sbit LCD_D4 at LATD4_bit; sbit LCD_D5 at LATD5_bit; sbit LCD_D6 at LATD6_bit; sbit LCD_D7 at LATD7_bit; sbit LCD_RS at LATD2_bit; sbit LCD_EN at LATD3_bit; 2) Asignacin de la direccin de los pines para la LCD: sbit LCD_D7_Direction at TRISD7_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_RS_Direction at TRISD2_bit; ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 6 VI. FUNCIONAMIENTO DEL PROGRAMA. A. Descripcin de las variables globales del programa. 1) signed char posf=0;: Guarda la posicion y permite el desplazamiento de las las para la visualizacin de las matrices en la LCD. 2) signed char posc=0;: Guarda la posicion y permite el desplazamiento de las columnas para la visualizacin de las matrices en la LCD. 3) unsigned char cant;: Almacena el nmero de dgitos del nmero en cada posicin en la matriz. 4) unsigned char operacion;: Contiene la opcin de clculo que se va a realizar: 17 para suma algebraica, 18 para multiplicacin y 19 para hallar la inversa de la matriz. 5) unsigned char l_a; unsigned char col_a; unsigned char l_b; unsigned char col_b;: Almacenan el tamao de la matriz A y B respectivamente (las y columnas) 6) unsigned char decimales;: Almacena la cantidad de decimales que se van a visualizar. 7) unsigned char fteclado=0;: Bandera que sirve para comprobar la interrupcin por el cambio de estado del puerto B. 8) unsigned char numclcd=1;: Almacena el nmero de las columnas para hacer el barrido de la impresin en la LCD. 9) unsigned char numcd;: Almacena el nmero de la la para hacer el barrido de la impresin en la LCD. 10) unsigned char cantidad_de_digitos[9];: Almacena la cantidad de nmero exactos para la impresin, adems alma- cena espacios vacios para realizar la tabulacin de los nmeros en caso de que unos contengan ms cifras que otros. 11) long double ma[9][18];: Almacena los datos de la matriz a para realizar las operaciones matemticas, en las columnas a partir de la 9 se almacena la matriz diagonal para realizar el clculo de la inversa. 12) long double mb[9][9];: Almacena los datos de la matriz a para realizar las operaciones matemticas. 13) long double respuesta[9][9];: Almacena los resultados de las operaciones matemticas, es la matriz que se imprime. 14) int nr[8];: Almacena los dgitos del nmero de cada espacio de la matriz respuesta. 15) long double dato;: Almacena el valor de las teclas del teclado. B. Descripcin de las funciones del programa. 1) void cong(void): Aqu se encuentra la conguracin inicial de los puertos, y de las interrupciones que se utilizan en la prctica. 2) void interrupt_high(void): Aqu se encuentra el control y ejecucin de interrupcin por el cambio de estado del puerto B, que consiste en la lectura del teclado. 3) void subteclado(void): Aqu se encuentra el cdigo para realizar la lectura de la tecla presionada. 4) void inicio(void): Dentro de esta funcin se muestran las opciones de la operacin que desea hacer, y se determina el tamao de las matrices para realizar el correspondiente clculo. 5) void setcursor(const unsigned char la,const unsigned char col): Dentro de esta funcin recibe las variables la y col para realizar el posicionamiento del cursor de la LCD. 6) void recepcion(const unsigned char n_c): Dentro de esta funcin se recibe las variables n_c sirven para recibir un nmero o un caracter e imprimirlo en la LCD. 7) void llenado(void): Dentro de esta funcin se encuentra el cdigo para realizar el llenado de las matrices para realizar el clculo. 8) void salto_de_linea(unsigned char m): Dentro de esta funcin se recibe la matriz m que se encuentra llenando en la funcin de llenado y se procede a realizar el salto de lnea en caso de que los caracteres sobrepasen la columna 20 de la LCD, adems reimprime en la la 1 la matriz que se encuentra llenando cuando se pase de la la 4. 9) void rebote(void): Dentro de esta funcin se controla el rebote que se da al presionar una tecla para evitar malas lecturas del teclado. 10) void sumar(void): Esta funcin se encarga de realizar la suma algebraica entre las dos matrices, A+B, y guarda su resultado en la matriz respuesta. 11) void multiplicar(void): Esta funcin se encarga de realizar la multiplicacin entre la matriz A y la matriz B y guarda su resultado en la matriz respuesta. 12) void inversa(void): Esta funcin se encarga de calcular la inversa de la matriz A y guarda su resultado en la matriz respuesta. 13) void calculo(void): Esta funcin descompone a cada nmero de la matriz respuesta y lo guarda dgito a dgito en el vector nr[]. 14) void imprimir(): Esta funcin se encarga de imprimir en la LCD la matriz resultado. 15) void LCDOUT(const unsigned char la, unsigned char col, const char *dat): Sirve para imprimir una cadena de caracteres en la LCD, recibe la la, columna y el string para imprimir. 16) void LCDOUTCHRCP(const int dat): Sirve para im- primir un caracter en cdigo ascii en la LCD, solo recibe el caracter e imprime en la ltima posicin que se encuentra el cursor en la LCD. 17) void LCDOUTCHR(const unsigned char la, const unsigned char col, const int dat): Sirve para imprimir un caracter en cdigo ascii en la LCD, recibe la la, columna y el string para imprimir. 18) void LCDOUTCP(const char *dat): Sirve para im- primir una cadena de caracteres en la LCD, solo recibe el caracter, e imprime en la ltima posicin que se encuentra el cursor en la LCD 19) Desplazamiento: El desplazamiento para la visual- izacin de las matrices en la LCD se lo realiza dentro de la funcin main. VII. CONCLUSIONES Y RECOMENDACIONES. El uso de la interrupcin por el cambio de estado del puerto B para realizar la lectura del teclado es la mas efectiva, ya que no hace falta leer los datos del teclado contnuamente. Para evitar que la capacidad de la memoria se llene con las funciones de impresin de la LCD de MikroC, realizamos nuestras propias funciones que reciben el caracter ascii o la cadena de caracteres como una variable ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 7 constante con puntero, de sta manera las variables para imprimir no usan casi nada de espacio en la RAM. Para el clculo de la inversa de la matriz se procedi a crear una matriz del doble de tamao de las columnas que la que pidi el docente, en las columnas a partir de la 9 se procede a llenar la inversa de la matriz de tal manera que todos los clculos se realicen sobre la misma matriz, haciendo ms eciente el programa y evitando que la capacidad de RAM no se llene. Se debe tener muy en cuenta la conguracin de los reg- istros para cada microcontrolador ya que la funcionalidad de los pines depende de cada modelo. En cuanto a la prioridad de las interrupciones no tuvimos ningn inconveniente puesto que solo usamos la inter- rupcin del cambio de estado del puerto B, sin embargo se debe tener muy en cuenta esta funcin que tiene el microcontrolador, ya que permite un mejor manejo de las interrupciones y la ejecucin del programa. REFERENCES [1] El origen de la calculadora, Wen Fong Kwong, 16 de Diciembre del 2012, en lnea, <http://www.fayerwayer.com/2011/12/el-origen-de-la- calculadora/> [2] J. Medina, Introduccin al microcontrolador PIC18F4550 [En linea], Disponible en : <http://www.uv.mx/personal/jemedina/les/2010/07/Manual-del-Taller- Introduccion-al-Microcontrolador-PIC18F4550.pdf> [3] Universidad Politcnica de Valencia, Microcon- trolador PIC18F4550[En linea], Disponile en : <http://www.joseapicon.com.ve/descargas/pic/Manual%20PIC%2018F4550.pdf> [4] A. Ruiz, Microcontroladores[En linea], disponble en: < http://es.slideshare.net/geovannaruiz/presentacion-pic-16f887-y-18f4550> [5] J. Terven, Interrupciones [En linea], Disponible en: <http://www.tervenet.com/itmaz/micros2012/05%20Teclado%20Matricial.pdf> [6] MicroPIC[En linea], Disponible en: <http://micropic.wordpress.com/2007/06/13/teclado- matricial-4x4/> [7] J. Pascual, Conexin de una pantalla :LCD a un microcontrolador[En linea], Disponible en: <http://server-die.alc.upv.es/asignaturas/lsed/2002- 03/Pantallas_LCD/LCD.pdf>