You are on page 1of 32

Entrada en paralelo y salida En este captulo se describe la entrada y salida en paralelo (I / O) en los recursos Microcontroladores PIC.

Comunicacin en paralelo es un tipo de comunicacin cin en la que todos los bits de datos se transmiten de forma simultnea. Entrada serie y los resultados se describen en el captulo 8, y entradas y salidas analgicas son se describe en el Captulo 9. Este captulo comienza explicando la base conconceptos y tcnicas asociadas con la transferencia de datos, seguido por paralelo puertos de los microcontroladores PIC de gama media. Por ltimo, este captulo muestra la conexin de varios perifricos ampliamente utilizado en el sistema de microcontroladores TEMS, tales como interruptores, diodos emisores de luz (LEDs), y teclados, as como pantallas de siete segmentos y pantallas de cristal lquido (LCD). 5.1 Conceptos bsicos Un perifrico es un dispositivo externo conectado al microcontrolador. La perifricos ms utilizados en sistemas de microcontroladores son los interruptores, LEDs, rels, teclados, pantallas de siete segmentos y LCD, A / D y D / A convertidores, impresores, y motores. Todos estos perifricos deben incluir la interfaz necesaria por lo que se puede conectar a un puerto del microcontrolador. Un puerto en un microcontrolador es un circuito, interno al microcontrolador, utilizado para conectar con los perifricos o los dispositivos externos. La figura 5.1 muestra la conexin general entre un microcontrolador y un perifrico utilizando un puerto de E / S. En general, esta conexin tiene n lneas (tpicamente n = 8) a transfer de datos y lneas adicionales m para el control de la transferencia de datos. Estas lneas de control puede no ser necesario. Por ejemplo, simple E / S asncrona, se describe en el mayor detalle en la Seccin 5.1.1, no requiere de lneas de control. Es importante notar que aunque el puerto se muestra en la figura 5.1 puede transferir datos en dos direcciones, es habitual! nd puertos de entrada-slo o de slo salida. Desde el punto de vista de la programacin, los puertos se identifican! Ed por su direcciones que suelen ser parte de la memoria de datos. Por lo tanto, al menos Se necesita una direccin para representar los datos que entran o salen del puerto. Las lneas de control requerirn algunos bits adicionales en otras direcciones. En PIC microcontroladores, se tiene acceso a los puertos a travs de la funcin especial registra situado en la memoria de datos.

El elemento bsico de cualquier puerto I / O es un cerrojo D, un dispositivo que puede

almacenar 1 poco. Un puerto paralelo de 8 bits tiene ocho D pestillos. Un pestillo tiene una entrada de datos (D), una lnea de control (G), y una lnea de salida de datos (Q). Cuando G = 0 el pestillo es bloqueado, sosteniendo el valor anterior. Cuando G = 1, el pestillo de salida en Q el valor que estaba en la entrada D. Cuando G vuelve a 0, el pestillo se mantiene en Q el valor que estaba en la entrada D. En algunos casos puede ser necesario para los datos que est disponible en un dispositivo de tres estados como se muestra en la Figura 5.2. lo es entonces necesario aadir una lnea de control adicional OE # (salida de habilitacin) para permitir que el (DO) de la lnea de los tres estados de salida digital. Cuando OE # = 1, DO se mantiene en alta impedancia. Cuando OE # = 0, entonces = Q. En un puerto de entrada, las entradas D proceden de la perifrica y la trisalidas de estado estn conectadas al bus de datos interno en el microcontrolador. Para un puerto de salida, las conexiones estn invertidas. En la siguiente seccin describe las tcnicas para la transferencia de datos entre el puerto paralelo y el microcontrolador. 5.1.1 Tcnicas de Transferencia de Datos La transferencia de datos entre un perifrico y un puerto se puede clasificar como ed:

FIGURA 5.2 El elemento bsico en un puerto de I / O es el seguro D se utiliza para almacenar un bit. Este gure! Muestra la D prenderse con una salida de datos tri-estatal. DI es la entrada de datos. El pestillo captura los datos en DI con el STB seal. La seal OE # se utiliza para permitir la salida de tres estados DO.

simple de entrada / salida controlado de entrada / salida Simple I / O se basa en la transferencia de los bits de datos entre el puerto y perifrica sin el uso de ninguna seal de control, como se muestra en! gura 5.3a. La conexin de los interruptores de las lneas de entrada o LED en las lneas de salida en un puerto paralelo son aplicaciones tpicas de sencillo I / O. A veces, un sin-

zacin de la seal (STB, estroboscpico) se transmite adems de los datos seales para indicar cuando los datos estn disponibles. Esta indicacin puede ser por niveles de tensin o por el borde de la seal STB. Por ejemplo, cuando se utiliza niveles de tensin, cuando el perifrico mantiene la seal STB activa (STB = 1) esto significa que los datos estn disponibles en el puerto o pines de datos perifricos. la dispositivo receptor (ya sea el puerto o el perifrico) debe capturar los datos en sintona con STB. La figura 5.3b muestra esta variacin de la E / S simples-tech nique. Si la indicacin se realiza por el borde de la seal, los datos deben ser capestructurados en sincrona con el borde correspondiente del STB seal. En el control de E / S, hay una conversacin, llamado apretn de manos, entre el puerto y el perifrico. Controlado I / O requiere dos o ms conseales trol y un protocolo que el puerto y perifricas deben seguir para entendernos. La figura 5.4 muestra dos variantes de E / S controlada el uso de dos seales de control. La seal estroboscpica de control (STB) se genera por el dispositivo que transmite los datos y la seal de acuse de recibo de control (ACK) es generado por el receptor.

FIGURA 5.4 Controlado de E / S para los datos de 8 bits. (a) Control sencillo de E / S. (b) Haga doble control de E / S. En la primera variacin?, Que se muestra en la figura 5.4a, el dispositivo transmite la de datos enva el STB seal al receptor lo que indica que los datos estn disponibles poder en los pines de datos. En este caso, el transmisor al receptor dice "yo voy a enviar los datos en este momento. "El receptor capta los datos y la los informes de la accin mediante la activacin de la seal ACK (ACK = 1), diciendo al transmisor "He recibido los datos y estoy procesando." El transemisor no enva nuevos datos hasta que la seal ACK se ha establecido de nuevo a 0. Al hacer ACK = 0, el receptor dice al transmisor "Enviar la siguiente datos. "Por lo tanto, las obras ACK seal como una indicacin de que el receptor est procesando los datos que han sido recibidos. La segunda variacin controlada de E / S utiliza un poco ms complicado protocolo como se muestra en la figura 5.4b. En primer lugar, el transmisor permite que el receptor Sabe que va a enviar los datos a pesar de estos datos pueden no estar disponibles todava. El transmisor no esta activacin de la seal STB (STB = 1). Aqu, el transmisor le dice al receptor "Yo voy a enviar datos. Puedo hacer que? "Una vez que el receptor detecta la activacin de la seal STB y es capaz para aceptar los datos, a continuacin, el receptor activa la seal de ACK (ACK = 1). Ahora, dice el receptor al transmisor "Send it." El transmisor detecta ACK = 1, lo que indica que ahora puede transmitir los datos. Despus de la transmisinter almacena los datos en el pin de datos, que indica al receptor que los datos ya est disponible al hacer STB = 0. Con esto, el transmisor le dice a el receptor "Yo os envo los datos." El receptor capta los datos, lo procesa, y cuando es capaz de aceptar los nuevos datos se indican a este

el transmisor, haciendo ACK = 0, es decir, diciendo al receptor "Tengo recibido sus datos. Usted puede enviar nuevos datos ". Las seales de control y la lgica de la conversacin entre el puerto y perifrica puede ser manipulado por el hardware o por software. hardware manipulacin requiere el puerto tiene circuitos capaces de generar las seales STB y ACK sin la intervencin del microcontrolador. software manipulacin significa que un programa espec? camente creado para este fin genera las seales. Microcontroladores PIC tienen puertos paralelos de hasta 8 bits, todos ellos independientes. Ellos no tienen puertos especializados para implecin manipulacin de hardware de las seales de control, por esta razn, concontrolados I / O se debe implementar el uso de software. 5.1.2 Entrada / Salida Tcnicas Las dos tcnicas ms utilizadas para dar servicio a un perifrico conconectado a un microcontrolador son: entrada / salida programada interrupcin de entrada / salida Programado I / O es bsicamente una tcnica de software. Se necesita bits a indicar el estado de la perifrica (listo o no). El programa pregunta si la necesita atencin perifrica, y si la respuesta es af rmative, verdad? lleva a cabo la accin apropiada, que es normalmente la escritura o de lectura y cin de datos en el puerto conectado a la perifrica. Si la respuesta es negativo, el programa realiza otras tareas o simplemente espera hasta que el perifrica est listo. La Figura 5.5 muestra los algoritmos utilizados por las dos variantes principales del proprogramada I / O: sondeo de E / S y esperando I / O. En el sondeo de E / S, el microcontrolador controlador lleva a cabo otras tareas si el perifrico no est listo para transmitir o recibir datos. En la espera de E / S, el microcontrolador espera hasta que el perifrico est listo. Obviamente, el sondeo de E / S gestiona el tiempo para que el microcontrolador mejor. La principal caracterstica de la interrupcin de E / S tcnica es que la periferiaral indica la necesidad de atencin. Esto se realiza mediante el envo de una interrupcin solicitar al microcontrolador. Cuando el microcontrolador recibe esta sealnal, interrumpe la ejecucin del programa y se mueve hacia ejecin de la subrutina de interrupcin. Cuando el microcontrolador? Nishes con la solicitar a la perifrica, que contina con el programa que haba sido interrumpida. Interrupcin de E / S utiliza una combinacin de hardware y software. La parte de hardware se basa en los circuitos necesarios para solicitar y ejecutar la interrupcin que se estudiar con ms detalle en el Captulo 7. En ambas tcnicas de E / S, la velocidad de transmisin de datos entre el perifrico y el microcontrolador est limitada en ltima instancia por la velocidad en la ejecucin de instruccin nes, ya que esta ejecucin se basa en la lectura o escritura de datos mediante las instrucciones adecuadas. Por otra parte, los datos transferidos entre la memoria y los puertos de E / S normalmente tienen que moverse a travs de la CPU, por lo tanto que limita an ms la velocidad del proceso. Sistemas de microprocesadores utilizan una tercera tcnica de E / S para evitar estas limitaciones mediante el uso de la memoria directa

FIGURA 5.5 Variaciones de programada I / O. (a) Si perifrico no est listo, el programa contina trabajando en otras tareas. (b) Si perifrica no est listo, el programa espera hasta que est listo. acceso (DMA). DMA es un implementada en hardware de la tcnica de E / S sobre la base de la transferencia de datos directa entre el perifrico y la memoria sin tener para ejecutar un programa, permitiendo de este modo muy altas tasas de transferencia de datos. Este tcnica es, sin embargo, utilizarse en muy pocos microcontroladores. Ninguno de los PIC microcontroladores uso DMA para I / O. 5.2 Puertos paralelos en microcontroladores PIC de gama media Medium-end microcontroladores PIC pueden tener hasta siete puertos paralelos llamado PORTA, PORTB, PORTC, ..., PORTG, con cada uno de ellos con hasta a 8 bits. Las patillas de los puertos se identifican! Ed <x> como RA, RB <x>, ..., <x> RG en el que x es el nmero del bit (x = 0, 1, ..., 7). Generalmente, cada lnea de puerto puede ser programado como entrada o como salida. La mayora de los pines en los puertos de E / S pueden llevar a cabo varias funciones. Por ejemplo, el mismo pin puede funcionar como un entrada o salida digital, o pueden ser una entrada analgica al convertidor A / D, o se puede transportar seales hacia o desde los temporizadores. Algunos microcontroladores PIC tambin tener un puerto esclavo paralelo (PSP) que se comporta como un bus genrico de 8 bits con lneas para controlar la transferencia de datos entre el PIC y el perifrico. Cuando un Microcontrolador PIC tiene un PSP que comparte sus pines con los puertos D y E. Cada puerto paralelo tiene dos funciones especiales registros utilizados para manipular tarde al puerto. Estos registros se denominan PORT y TRIS (PORTA, TRISA, PORTB, TRISB, etc.) El puerto registra almacenar los datos de salida y los Registros TRIS se utilizan para programar cada lnea en el puerto como entrada o como una lnea de salida. Cada bit en el registro TRIS se programa como: TRIS <x> = 1Programs puerto <x> lnea como entrada. TRIS <x> = 0Programs puerto <x> lnea como salida. La Figura 5.6 muestra el esquema bsico para un pin de E / S. El circuito contiene dos pestillos D: uno de ellos se utiliza para almacenar los datos de salida, mientras que el otro se utiliza para almacenar el bit de control TRIS <x>. El pin de E / S es manipulado por el dos transistores MOS en ttem con! guracin. En este contexto! Guracin, transistor T1 (P transistor de canal) se enciende cuando el voltaje de la puerta es 0 y OFF cuando el voltaje de la puerta 1. Transistor T2 (N-canal del transistor) funciona de la manera opuesta. El ttem es accionado por un AND y una puerta OR a partir de los pestillos. Desde el circuito es posible darse cuenta de que si el control pestillo almacena un 1, ambos transistores estn apagados. Esto hace que el puerto de E / S para estar en un

estado de alta impedancia (tercer estado), por lo que acta como un pin de entrada de datos. Si el pestillo de control almacena un 0, el puerto de E / S se convierte en un pin de salida. El valor en el pasador es igual al valor almacenado en el cerrojo de datos. La Tabla 5.1 muestra el tabla de verdad para este circuito.

FIGURA 5.6 Esquema bsico para un pin de E / S en un microcontrolador PIC de gama media. Como se ve en la Figura 5.6, este circuito utiliza un pestillo adicional D que almacena el estado del pin de E / S cuando ha sido acondicionado? gurado como un pin de entrada. la entrada D a esta tercera pestillo es el voltaje en el pin de E / S conectado a travs de un puerta no inversora que puede ser un TTL (lgica transistor-transistor) o Schmitt gatillo. Escritura de datos en un puerto significa escribir en el seguro apropiado, mientras que la lectura del bit en un puerto es equivalente a leer el estado lgico (valor de la tensin) en el pin. Esto significa que si los datos se escriben en una salida puerto y este puerto se lee, el valor puede ser diferente. Esto puede suceder especialmente si se supera el valor mximo para corrientes de salida. CUADRO 5.1 Tabla de verdad para el circuito de la figura 5.6

Al conectar dispositivos a los pines del puerto, es necesario tener en teniendo en cuenta las limitaciones de potencia para el microcontrolador. Cada pin de E / S puede fuente o sumidero de un valor mximo de la corriente. Por otra parte, el total actual alquiler fuente o hundido por todos los pines del puerto no puede superar un determinado valor. Este valor es normalmente menor que la suma de todo el individuo permitido corrientes de cada pin en el puerto. Por ltimo, para mantener la tensin en la salida pin dentro de los lmites para los valores lgicos 0 y 1, que es necesario para mantener las corrientes de salida de alto nivel (I OH) y el bajo nivel (I ) OL dentro de los lmites especi! ed por el fabricante. Todos los dispositivos deben cumplir con estos ! especi caciones descritas en las hojas de datos del fabricante.

Ejemplo 5.1 Los siguientes valores de tensin y corriente para los PIC16F873 pines estn dadas por su fabricante. Cada diseo de E / S debe tenerlas en cuenta. 1. Mxima corriente hundido por cualquier pin: 25 mA. 2. Mximo origen actual por cualquier pin: -25 mA. 3. Con origen o actual hundido para el puerto C o por los puertos A y B juntos pueden no superar los 200 mA. Los valores tpicos para voltajes de entrada y de salida: 1. Valor lgico 0 en un pin de entrada: Voltaje de este pin es V IL <0,75 V (TTL de entrada) o V IL <1,0 V (entrada de disparador Schmitt) con V DD = 5,0 V. 2. Valor 1 lgico en un pin de entrada: Tensin en esta contactos es V IH> 2,0 V (TTL de entrada) o V IH> 4,0 V (entrada de disparador Schmitt) con V DD = 5,0 V. 3. Tensin de salida para el valor lgico 0: V OL <0,6 V cuando la corriente de salida hundido por pin es I OL <8,5 mA con V DD = 4,5 V. 4. Tensin de salida para el valor lgico 1: V OH> V DD - 0,7 V = 3,8 V, si la corriente de salida proceden de pin es I OH <-3,0 mA con V DD = 4,5 V. La manipulacin selectiva o individual de bits en un puerto requiere algn precaucin. En realidad, microcontroladores PIC no tienen la fuerza necesariamercancas en sus puertos para manipular exclusivamente un bit de salida. Por lo tanto, a modificar un solo bit, todos los bits en el puerto tienen que ser por escrito. Incluso el especificaciones! c instrucciones de manipulacin de bits, como millones de pies cbicos y bsf utilizan para establecer cualquier bit a 0 o 1, operar al leer el registro, modificar el bit especi! ed en la instruccin, y escribir la palabra resultante de nuevo en el registro. Es decir, la selectiva Modi! Catin de un bit en un registro es una operacin que implica leer, modi? cacin, y escribir el registro completo. Cundo la modificacin de un bit en el registro de datos, esta operacin es transparente para el programador. Sin embargo, cuando el bit de ser modi! Ed es un poco en el puerto registro de un puerto paralelo, la manera en que se lleva a esta operacin cabo puede producir resultados inesperados en los otros bits del puerto. Esto es porque cuando se lee un puerto, el valor que realmente se lee es el estado de sus pines

y no el valor almacenado en el puerto. Por lo tanto, el valor resultante puede ser diferente del valor real en el registro PORT. 5.2.1 Puerto A Puerto A puede tener hasta 8 bits, aunque la mayor parte del medio-fin PIC microcontroladores (como el PIC16F873) han puesto en marcha slo 6 bits. estos bits corresponden a los pines RA0 a RA5. Todos estos pines puede ser con! Gurado como terminales de salida o de entrada. RA4 es una entrada de disparador Schmitt y cuando proprogramada como salida se convierte en una salida de drenaje abierto. La funcin especial cin registros asociados con el puerto de A son PORTA y TRISA. Puerto pins A pueden ser compartidos con los insumos para el convertidor A / D si el microcontrolador tiene uno, tal como en el caso para el PIC16F873. En este caso, puerto pins A puede ser digital o analgica. Esto se programa con la espefuncin social registro ADCON1. El RA4 terminal es utilizado como la externa entrada de reloj para el Timer0 temporizador. En este caso, el pasador se llama RA4/T0CK1. La Tabla 5.2 muestra las funciones del puerto A alfileres en un PIC16F873. Ejemplo 5.2 Puerto pins A son tambin entradas analgicas para los PICs que incorporan un interno Un convertidor A / D. Este ejemplo muestra cmo programar el puerto A para microcontroladores sin un convertidor A / D interno, as como aquellos con ella. Inicializar el puerto A (PIC sin fronteras convertidor A / D):

5.2.2 Puerto B Puerto B tiene 8 bits con alfileres llamados RB0 a RB7. Todos estos pines puede ser con? Ggurado como pines de entrada o salida con la funcin especial de registro TRISB. la funcin especial de registro PORTB se utiliza para escribir datos en el puerto B. Cuadro 5.3 muestra la funcin de los pines del puerto B en un PIC16F873. Cada pin del puerto B tiene un circuito de pull-up interna que puede ser programado con el bit # en RBPU la funcin de registro especial OPCIN (OPCIONAL bit <7>). Este bit permite o desactiva el pull-up en el puerto B. CUADRO 5.3 Port B Pins en PIC16F873 Nombre Funcin RB0/INT Entrada / salida digital, entrada de interrupcin externa RB1 de entrada / salida digital RB2 entrada / salida digital RB3/PGM Entrada / salida digital; pin programacin in-circuit RB4 de entrada / salida. Como pin de entrada, las interrupciones pueden ser programadas por un cambio en el nivel lgico. RB5 de entrada / salida. Como pin de entrada, las interrupciones pueden ser programadas por un cambio en el nivel lgico. RB6/PGC de entrada / salida. Como pin de entrada, las interrupciones pueden ser programadas por un cambio en el nivel lgico. Pin de programacin en circuito. RB7/PGD de entrada / salida. Como pin de entrada, las interrupciones pueden ser programadas por un cambio en el nivel lgico. Pin de programacin en circuito. Nota: Todos los pines tienen un circuito de pull-up interno programable por software. RB0 se puede utilizar como una entrada de interrupcin externa. Un cambio de voltaje en las entradas RB4 a RB7 puede generar una solicitud de interrupcin. Pines RB3, RB6 y RB7 se utilizan para la programacin in-circuit. este permite la programacin del microcontrolador en la misma placa que se utiliza para ejecutar la aplicacin deseada. Un aspecto importante del puerto B es que puede generar una solicitud de interrupcin cambiando el nivel lgico en ninguna de las patas RB4 a RB7. Si estos pines son programado como entradas, un cambio en el nivel lgico de entrada de 0 a 1 o de 1 a 0 genera una interrupcin. Este cambio puede ser producido, por ejemplo, pulsando una tecla conectada a uno de los pines del puerto. Cuando este tipo de se produce interrupcin, RBIF bit en el registro INTCON (bit INTCON <0>) se fija en 1. El RBIE bit en el registro INTCON (bit INTCON <3>) se utiliza para habilitar o deshabilitar las interrupciones. Esta interrupcin se puede utilizar para activar el microcontrolador de un modo de bajo consumo. Pin RB0 tambin puede aceptar una solicitud de interrupcin externa disparado por flanco. En este caso, el pasador se llama RB0/INT. Esta interrupcin se inform en el bit INTF en el registro INTCON (INTCON poco <1>) y est activada o desactivada por INTE bit en el registro INTCON (INTCON poco <4>). El INTEDG poco en el registro OPCIN (OPCIONAL bit <6>) selecciona la interrupcin de la elevacin

o descendente. Pines RB3, RB6 y RB7 en el puerto B pueden utilizarse para Serial In-Circuit Programacin (ICSP). Este es un recurso en microcontroladores PIC que permiten la programacin del dispositivo en la misma placa que se utiliza para ejecutar la aplicacin prevista. El programa se enva a la OTP, EEPROM, o Memoria cenizas utilizando un formato de transmisin en serie a travs de estos pines. Ver la programacin del dispositivo espec? cacin antes de utilizar este recurso. 5.2.3 Puerto C El puerto C es un puerto paralelo de 8 bits con nombres de pin RC0 a RC7. Escribir en el puerto C se realiza mediante el uso de la funcin especial de registro PORTC. Todos los pines pueden ser con?? gurado como entradas de disparo Schmitt y salidas digitales utilizando el especial funcionar registro TRISC. Pins en funciones comparten puerto C con otra entrada y los dispositivos de salida: Timer1, la comparacin / Captura / PWM (CCP) del mdulo, y el puerto serie sncrono (SSP) o Master Synchronous Serial Port (MSSP), y Universal Synchronous Transmisor Receptor Asncrono (USART). Estas funciones se muestran en la tabla 5.4 para el PIC16F783. 5.2.4 Puertos D, E, F y G Puertos D, E, F y G son los puertos paralelos de hasta 8 bits. Todos los pines pueden ser proprogramado como entradas o salidas digitales. Cuando con?? Gurado como entradas, que son entradas de disparo Schmitt. Cuando existen estos puertos, sus funciones son compartido con las funciones de la PSP. Algunas de las clavijas en el puerto E puede tambin se puede utilizar como entradas analgicas, adems de los existentes en el puerto A. La funcin especial de registros asociados con los puertos D y E se PORTD y PORTE de datos y TRISD y TRISE de control. El PIC16F874 tiene puertos D y E, pero el PIC16F873 no tienen. Puertos F y G son los puertos paralelos de hasta 8 bits con el disparador de Schmitt entradas. Su funcin es compartida con las salidas de los conductores LCD. Puertos

F y G slo existe en los microcontroladores especi? Ticamente fabricado para conducir LCDs directamente. 5.2.5 Puerto Paralelo Esclavo (PSP) La PSP es un puerto direccional de 8 bits que transporta seales de control para leer y escribir datos desde un dispositivo externo. La PSP se puede utilizar para conectar el microcontrolador directamente a los datos y el bus de control de un microprocesador-

Sor-o sistema basado en microcontrolador. Esto hace que el PIC con el PSP convertido en un puerto de E / S de que el sistema como se muestra en la figura 5.7a. Para los microcontroladores que incorporan una PSP, tal como el PIC16F874, la PSP se implementa en los pines de los puertos D y E. PSP cuenta con ocho datos lneas (PSP <0:7>) y tres lneas de control para la lectura de datos (RD #), la escritura datos (WR #), y la seleccin (CS #). Las lneas de datos de PSP se implementan en los pines RD <0:7> y las lneas de control se implementan en los pines RE <0:2>. Cuando el sistema externo al PIC quiere escribir o leer datos desde el PIC con el PSP, debe seleccionar el dispositivo con CS # = 0 durante escritura de datos o la lectura. Si CS # = 1, las lneas de datos se mantienen en alta impemiento. Durante el proceso de la lectura, los pines de datos actan como salidas, durante el proceso de escritura de los pines de datos actan como entradas. La figura 5.7b muestra la PSP seales durante los ciclos de escritura y lectura. Tres bits en el microcontrolador informan del estado de la PSP. estos son fragmentos de la FIB y OVF en el registro TRISE y PSPIF bit en el registro PIR1. La memoria llena bit de entrada (FIB) se pone a 1 cuando el registro PORTD Contiene los datos escritos en el PSP desde fuera; FIB se ajusta automticamente en 0 cuando el programa lee los datos de entrada en PORTD. El bfer de salida

FIGURA 5.7 El puerto esclavo paralelo (PSP) es un bus bidireccional de 8 bits con las seales de control para transferir datos entre el PIC y un dispositivo externo. (a) El uso potencial de una PSP a Condirectamente conectar el PIC a un bus de datos en un sistema con un microprocesador o microcontrolador. El PIC se convierte en un puerto de este sistema de E / S. (b) Las seales que intervienen en la transferencia de datos de E / S utilizando la PSP. bit completo (OBF) se pone a 1 cuando el programa escribe datos en el PORTD registrarse. Estos datos deben abandonar el microcontrolador a travs de los pines de PSP. OBF se establece en 0 cuando el dispositivo externo ha ledo que los datos de salida en el Registro PORTD. La interrupcin de PSP? Ag (PSPIF) bit se pone a 1 cada vez que se lee los datos o escritos diez desde el exterior. Debe ponerse a 0 por software una vez que el programa de

ha mantenido la transferencia PSP. PSPIF = 1 genera una solicitud de interrupcin si el PSP ha permitido a sus interrupciones. Ajuste de la alarma de PSP habilitado (PSPIE) bit a 1 se activa estas interrupciones. La gestin de la entrada / salida de datos a travs de la PSP puede ser ya sea programado o ejecutado por las interrupciones. Programado I / O se lleva a cabo comprobando los bits PSPIF, IBF y OBF. En interrumpir de E / S, el programa que maneja la interrupcin PSP debe comprobar los bits de la FIB y OBF a?? nd fuera del tipo de transferencia que ocurri entre el PSP y el exterior.

5.3 Conexin de perifricos de uso comn 5.3.1 Switches y LEDs Interruptores y LEDs son dispositivos de E / S de uso general en los sistemas de microcontroladores. La Figura 5.8 muestra tres maneras posibles de conectar estos dispositivos a los pines del puerto B de un microcontrolador PIC. LED1 se enciende cuando el pin RB <i>, que debera haber sido acondicionado! Gurado como salida digital, es baja. En este contexto! Guracin del LED1 corriente I1 entra en el pin del puerto. Para mantener el nivel lgico 0 cuando LED1 est encendido, es necenecesario que I1 IOLmax (5.1) con IOLmax siendo la corriente de salida mxima para el pin de permanecer en una lgica bajo nivel. LED2 est encendido cuando la RB <j> pin es alto. En este contexto! Guracin del LED2 corriente sale del pin. Para el pin para mantener su alto nivel de lgica, es necesario que I2 IOHmax (5.2) con IOHmax siendo la corriente de salida mxima para el pin de permanecer en un de alto nivel. En general, IOLmax |> | IOHmax |, haciendo condicin 5.1 ms fcil de cumplir que condicin 5.2. Por esta razn, cuando la conexin de LEDs a los puertos paralelos se recomienda utilizar el aire! guracin como se muestra para LED1.

Ejemplo 5.3 El uso de un PIC16F873, conecte 2 LED y un interruptor como se muestra en la Figura 5.8. Calcular los valores de resistencias RL1, RL2 asumiendo la tensin de alimentacin es VDD = 5 V. Los LEDs ms utilizados como indicadores tienen remite la corriente SI = 10 mA y la tensin directa alrededor de 2,0 V. Estos valores cambian ligeramente dependiendo el color del LED.

Con IF <i> = VOL (VOL = 0,35 para la IOL = 10 mA, a partir de datos de PIC = 10 mA y VRB V hoja), el valor de RL1 un LED rojo (VF = 1,6 V), es

El valor de la resistencia en serie con el LED no es crtica. por lo tanto es posible utilizar valores estndar con tolerancias de 5% o incluso 10%. este ejemplo, podra usar RL1 = 300 y RL2 = 270 , con un 5% de tolerancia. Los interruptores estn conectados a las entradas digitales. Cambie K en la figura 5.8 es conconectado al <k> RB entrada. En este contexto! Guracin, cuando el interruptor est cerrado, el voltaje en el pin es de 0 V (nivel bajo). Cuando el interruptor est abierto, el tirnla resistencia R K garantiza un alto nivel en la entrada pin. El valor de la resistencia pull-up puede ser del orden de decenas de kiloohmios porque el actual para el microcontrolador de entrada es muy baja. Los contactos en el puerto B tienen un pull-up interna que puede ser conectado o desconectado mediante el bit RBPU en el registro OPTION. Si los interruptores estn conectados a los pines en el terminal B y el pull-ups internos estn conectados, no es necesario el uso de las resistencias externas de I K. Interruptores mecnicos son esencialmente dos piezas metlicas que entran en contacto uno con el otro. Estos interruptores mecnicos se ven afectados por una problema conocido como rebote. Cuando un interruptor est siendo abierto o cerrado, las piezas metlicas no llegan a su posicin nal inmediatamente;! lugar actan como una pelota que se cay en el "oor-que rebotan de un determinado perodo de tiempo. Esto origina cambios rpidos en la resistencia de contacto antes el interruptor alcanza su estado estable como se muestra en la Figura 5.9. Este rebote puede causar una accin de conmutacin, ya sea de apertura o de cierre, estando poco mantenido por el microcontrolador como una serie de sucesivas activaciones del interruptor y desactivaciones.

FIGURA 5.9 Rebotando en interruptores mecnicos. Cuando el interruptor se abre o se cierra, las piezas

mecnicas vibrar generar contactos rpidos antes de asentarse. Este transitoria normalmente dura menos de 20 ms. Bouncing pueden ser resueltos mediante el uso de hardware o mtodos de software. la solucin de hardware bsico es el uso de un interruptor no mecnica como de Hallinterruptores de efecto mojado o en contacto con los interruptores (mercurio), que no se ven afectados por el rebote. Sin embargo, el nmero de modelos disponibles para este tipo de switch es muy limitada en comparacin con los modelos mecnicos tradicionales. la mejor solucin de hardware es para conectar el interruptor mecnico a la entrada de un circuito monoestable que aumentar el tiempo para la? RST detectado pulso suficiente para enmascarar los impulsos producidos por el rebote. Esta solucin, sin embargo, aumenta el tamao y el coste del diseo. Las soluciones de software se basan en la lectura del estado del interruptor de un cierto cantidad de tiempo despus de que el interruptor fue? activado primera. Un retraso de alrededor de 20 ms es normalmente lo suficientemente largo para asegurar que el interruptor ha alcanzado un establo estado. Ejemplo 5.4 muestra cmo implementar esta solucin. Ejemplo 5.4 Este ejemplo muestra cmo leer el estado de un interruptor conectado a k bits en el puerto B, como se muestra en el circuito de la figura 5.8. El problema de rebote interruptor est resuelto por el software utilizando el algoritmo mostrado en la figura 5.10. En este algoritmo, el estado del interruptor se lee y se almacena en un registro primero (TEMP) en el microcontrolador. Despus de esperar 20 ms para asegurar que no hay rebotando efectos, el estado del interruptor se vuelve a leer. Si los valores obtenidos en ambos casos son el mismo, a continuacin, las lecturas se validan despus de haber asegurado el corregir la lectura del estado del interruptor. Sin embargo, si los valores son diferentes, que significa que todava estn rebotando efectos. En este caso, el microcontrolador contina leyendo el estado del interruptor en intervalos de 20 ms hasta que los dos valores son iguales. El READ_K subrutina se muestra a continuacin implementa el algoritmo se muestra en la Figura 5.10.

FIGURA 5.10 Algoritmo utiliza para leer un interruptor de la solucin de la problema del rebote. El interruptor est conectado para k bits en el puerto B, como se muestra en la Figura 5.8. TEMP es un registro de la memoria de datos y W es el trabajo registrarse.

5.3.2 Matriz teclados Teclados Matrix consisten de teclas interconectados en la forma de una matriz. Cada tecla es un interruptor mecnico sencillo situado en el cruce entre las filas de la matriz y las columnas. Cuando se pulsa una tecla, su fila y columna formar un contacto elctrico. Fila y columnas se pueden conectar a los pines de uno o ms puertos paralelos. La figura 5.11 muestra un teclado matricial de 16 teclas

dispuestos en cuatro filas y cuatro columnas. El estado de un teclado matricial se puede visitar en el envo de seales a travs de sus filas (lneas de exploracin) y la lectura de la informacin recibida a travs de sus columnas (lneas de retorno). Cuando ninguna de las teclas se presionan, todos las lneas de retorno tendrn el estado lgico 1. Las lneas de exploracin son entonces ajustado a 0 ya sea simultneamente o secuencialmente. Slo la lnea de retorno que vincula la tecla pulsada con su lnea de exploracin leer un valor lgico bajo. El resto de las lneas de retorno ser ledo como 1. La informacin enviada a y recibido de la matriz hace que un cdigo nico para cada tecla, conocido como un cdigo de exploracin. Para asegurarse de que las lneas de retorno se mantienen a 1 cuando no hay se pulsan las teclas, es necesario conectar resistencias entre cada vuelta la lnea y la tensin de alimentacin V DD como se muestra en! Gura 5.11. El procedimiento para teclados matriz de servicio es como sigue: Paso 1: Espere hasta que el teclado es clara (debido a una tecla pulsada antes). Paso 2: detectar que se ha pulsado una nueva clave. Paso 3: Explore el teclado matricial para determinar la clave que fue presionado. El cdigo de exploracin, que contiene la fila y la columna nmeros se genera en este paso. El cdigo de exploracin puede ser generado en dos formas:

FIGURE 5.11 A 16-key matrix keypad.

Exploracin secuencial de filas. Este mtodo establece la primera fila? a 0 y lee todas las columnas. Si ninguna de las columnas se lee a 0 significa que la tecla presionada no est en esa fila. A continuacin, la siguiente fila se establece en 0, y las columnas se leen de nuevo. Este proproceso se repite hasta que un 0 se encuentra en una columna. Esta determinas de la fila y la columna de la tecla pulsada, dando as la cdigo de exploracin para esa tecla. exploracin simultnea de filas y columnas. Este mtodo establece todas las filas en 0 y lee todas las columnas. Este detecta la columna que contiene la tecla pulsada, pero no su fila. Entonces el proceso se invierte: todas las columnas se establecen en 0 y el filas se leen. Este detecta la fila que contiene el prensado clave. Esto le da la fila y la columna de la tecla pulsada, y por lo tanto el cdigo de exploracin de la clave. El mtodo de exploracin simultnea permite explorar el teclado ms rpido, en slo dos pasos. Sin embargo, se requiere la exploracin y regreso lneas a ser bidireccional (aunque esto no es un problema en el microcontrolador PIC-

ladores, que pueden ser un problema en otros dispositivos). La exploracin secuencial cin mtodo es ms lento, pero permite que las lneas de exploracin y volver a ser unidireccional. La figura 5.12 se muestra el algoritmo para el mtodo de exploracin secuencial. Este algoritmo bsico se podra mejorar mediante la adicin de las medidas necesarias para comprobar la validez del cdigo de lectura, as como para determinar si hay ms de una llave haba sido presionado simultneamente. Cuando se utiliza un alfanumrica teclado, por ejemplo, el algoritmo podra mejorarse an ms por convertircin del cdigo de exploracin en el cdigo ASCII de la tecla pulsada. Ejemplo 5.5 Subprograma para el mantenimiento de un teclado matricial de 16 teclas conectado al puerto B de un medio-end microcontrolador PIC. Figura 5.13 muestra un posible mtodo para conectar el teclado a la matriz el puerto B. Al comparar este enfoque para el esquema mostrado en la figura 5.11, hay dos diferencias principales. En primer lugar, las lneas de retorno no tienen resistencias de pull-up porque las clavijas en el puerto B tienen flexiones internas que garantizan un 1 en el las lneas de retorno con que se pulse ninguna tecla. En segundo lugar, hay cuatro diodos (D) en la lneas de exploracin. Estos diodos se utilizan para limitar la corriente en los pines RB0 a RB3 si dos teclas en la misma columna se presionaron al mismo tiempo. Estos diodos podra ser sustituido por las resistencias entre 1 k? y 2,2 k?. El READKEY subrutina explora el teclado matriz siguiendo el algoritmo se muestra en la figura 5.12. Esta subrutina devuelve el cdigo de exploracin para el tecla pulsada. La Tabla 5.5 muestra los cdigos de exploracin. El cdigo para el subrutinas INITKEY y READKEY se muestran abajo. La subrutina INITKEY se utiliza para preparar el puerto B para dar servicio al teclado.

FIGURA 5.12 Algoritmo para leer una fila de N, teclado matricial M-columna utilizando exploracin secuencial. la algoritmo de espera hasta que se pulsa una tecla y devuelve su posicin (fila i, columna j).

FIGURA 5.13 Un teclado matricial de 16 teclas conectado al puerto B en un PIC. Diodos se utilizan para evitar cortocircuitos entre dos lneas de exploracin si no se pulsa dos o ms teclas en la misma columna simulneamente. Esto! Guraci on utiliza el pull-up interna (no mostrado) disponibles en el puerto B para mantener un 1 lgico en las lneas de retorno cuando se pulsa ninguna tecla.

TABLA 5.5 Cdigos de exploracin devuelto por el READKEY Subrutina Cuando Explorando el teclado se muestra en la Figura 5.13

list p = 16f873 #include <p16f873.inc> ; Declarations: TEMP equ 0x20 ; Temporary register used by ; subroutines. ROW equ 0x21 ; Temporary register used by ; subroutines. COLUMN equ 0x22 ; Temporary register used by ; subroutines. ; INITKEY: Subroutine to program port B. INITKEY: clrf STATUS ; Select bank 0. bcf INTCON,INTE ; Disable external interrupt by RB0. bcf INTCON, RBIE ; Disable interrupt by changes in RB<7:4>. movlw 0FFh ; Store value in PORTB. movwf PORTB ; Set all outputs in port B to 1. bsf STATUS, RP0 ; Select bank 1. movlw 0F0h ; Load this value in TRISB to program movwf TRISB ; RB<3:0> as outputs and RB<7:4> as inputs. bcf OPTION_REG, ; Enable internal pull-ups in port NOT_RBPU ; B. bcf STATUS, RP0 ; Select bank 0. return ; READKEY: Subroutine for exploring matrix keypad. ; This subroutine waits for a key being pressed. It returns its ; exploration code in W. ; Inputs: none ; Outputs: Exploration code in W. Bits W<3:2> contain the ; column for the pressed key. Bits W<1:0> contain the row. ; READKEY: movlw 0F0h movwf PORTB ; Set all rows to 0. nop KEY10: ; Waits for keypad being free: movf PORTB, W ; Read all columns simultaneously. ; Low part of W ; is 0. High part of W, if a key is ; already pressed the bit ; that corresponds to the return ; line for the key ; is 0. The other bits are 1. xorlw 0F0h ; Reverse situation. High part of W: ; Bit ; corresponding to returning line in ; pressed key ; is 1. Other bits are 0. Low part ; of W ; does not change. Z becomes active ; if no key is pressed. btfss STATUS, Z ; All keys open? Z = 1?

goto KEY10 ; No wait for keypad being free. KEY20: ; Yes continue. Wait for a key being pressed. movlw 0F0h movwf PORTB ; All rows to 0. nop movf PORTB, W ; Read all columns simultaneously. xorlw 0F0h ; Z = 0 if a key is pressed. btfsc STATUS, Z ; Any pressed key? Z = 0? goto KEY20 ; No Wait for pressed key. KEY30: ; Yes continue. call DELAY20 ; 20 ms delay for debouncing. KEY40: ; Explore keypad rows to find out movlw 0FFh ; what is the pressed key. movwf PORTB ; All rows to 1. nop ROW0: ; Explore row 0: movlw 0 movwf ROW bcf PORTB, 0 ; Set row 0 to 0 (RB0). nop movf PORTB, W ; Read all columns simultaneously. call IDENTIFY ; If a key is pressed, identify ; column ; for key. btfsc STATUS, C ; Pressed key? C = 1? goto KEY50 ; Yes Found pressed key. Finish ; exploration. bsf PORTB, 0 ; No Set explored row to 1 and ; move to next. nop ROW1: ; Explore row 1: movlw 1 movwf ROW bcf PORTB, 1 ; Set row 1 to 0(RB1). nop movf PORTB, W ; Read all columns simultaneously call IDENTIFY ; If a key is pressed, identify ; column ; for key. btfsc STATUS, C ; Pressed key? C = 1? goto KEY50 ; Yes Found pressed key. Finish ; exploration bsf PORTB, 1 ; No Set explored row to 1 and ; move to next. nop ROW2: ; Explore row 2: movlw 2 movwf ROW bcf PORTB, 2 ; Set row 2 to 0 (RB2). nop movf PORTB, W ; Read all columns simultaneously call IDENTIFY ; If a key is pressed, identify ; column ; for key. btfsc STATUS, C ; Pressed key? C = 1? goto KEY50 ; Yes Found pressed key. Finish ; exploration bsf PORTB, 2 ; No Set explored row to 1 and ; move to next. nop ROW3: ; Explore row 3: movwf ROW bcf PORTB, 3 ; Set row 3 to 0 (RB3). nop movf PORTB, W ; Read all columns simultaneously call IDENTIFY ; If a key is pressed, identify ; column ; for key. btfsc STATUS, C ; Pressed key? C = 1? goto KEY50 ; Yes Found pressed key. Finish ; exploration bsf PORTB, 3 ; No Set explored row to 1 and ; move to next. Nop ; If arriving here withoutfinding a ; pressed key ; means false key pressed. Wait for ; new key pressed goto KEY20 ; Go to wait for a key beingpressed. KEY50: ; Found a pressed key. Build ; exploration code with ; 4 bits: ROW: COLUMN. rlf ROW, f ; Row number in rlf ROW, W ; bits 2 and 3 andlw 0FCh ; in W register. iorwf COLUMN, W ; Column number in bits 0 and 1 in W. andlw 0Fh ; Set high part of W to 0. return ; Return exploration code in W<3:0>. ; IDENTIFY: Subroutine to identify the column with the pressed key. ; Inputs: In W, reading of port B ; Outputs: Bit C in STATUS set to 1 if there is a pressed key.

; Otherwise, C set to 0. ; Number of column for pressed key stored in ; register named COLUMN. ; IDENTIFY: movwf TEMP ; Input information stored in ; register TEMP. btfsc TEMP, 4 ; Is bit of column 0 equal to 0? goto COL1 ; No Move to examine next column. movlw 0 ; Yes There is a pressed key in ; that column. movwf COLUMN ; Store number of column in register ; COLUMN. goto IDENT_FIN ; Finish subroutine. COL1: btfsc TEMP, 5 ; Is bit of column 1 equal to 0? goto COL2 ; No Move to examine next column. movlw 1 ; Yes There is a pressed key in ; that column. movwf COLUMN ; Store number of column in register ; COLUMN. goto IDENT_FIN ; Finish subroutine. COL2: btfsc TEMP, 6 ; Is bit of column 2 equal to 0? goto COL3 ; No Move to examine next column. movlw 2 ; Yes There is a pressed key in ; that column. movwf COLUMN ; Store number of column in register ; COLUMN. goto IDENT_FIN ; Finish subroutine. COL3: btfsc TEMP, 7 ; Is bit of column 3 equal to 0?

goto COL4 ; No Move to examine next column. movlw 3 ; Yes There is a pressed key in ; that column. movwf COLUMN ; Store number of column in register ; COLUMN. goto IDENT_FIN ; Finish subroutine. COL4: bcf STATUS, C ; Indicates key not pressed with ; C = 0. return ; Return. IDENT_FIN: bsf STATUS, C ; Indicates key pressed with C = 1. return ; Return. ; DELAY20: Subroutine to introduce a 20 ms delay. DELAY20 ; ; Write here code for the subroutine that introduces a 20 ms delay ; return end

5.3.3 LED de siete segmentos LED de siete segmentos se utilizan principalmente para representar la informacin numrica. La figura 5.14 muestra la circuitera interna, as como sus smbolos. Sevenexhibiciones de LED del segmento puede ser con? gurado como nodo comn o como comlun ctodo. En conexin de nodo comn, con el fin de un segmento a enciende, su pasador de conexin debe ser conducido con una tensin baja (valor lgico 0 de lgica positiva), con el nodo comn se establece en un positivo alto tensin (V DD). En conexiones de ctodo comn esta situacin se invierte:

FIGURA 5.14 Pantallas de siete segmentos consisten en un conjunto de LEDs conectados con un nodo comn o una comlun ctodo. (a) El sistema de circuitos interno. (b) El smbolo del display de siete segmentos. cada segmento es activado por un alto voltaje que corresponde a la lgica nivel 1, mientras que el ctodo comn debe establecerse en 0 V (V SS). Cuando se utilizan varias unidades de siete segmentos hacer una pantalla, sus conexiones al microcontrolador puertos paralelos deben ser multiplexados. La figura 5.15 muestra un esquema de conexin para varios nodo comn displays de siete segmentos. Todos los segmentos similares han sido conectados a entre s y con los pasadores en el puerto B a travs de resistencias limitadoras de corriente R S. Cada segmento se activa cuando su pin en el microcontrolador tiene un valor lgico de 0. El nodo comn para cada dispositivo acta como una seleccin lnea que se controla desde el puerto A. Cada display de siete segmentos se activa secuencialmente con una frecuencia de actualizacin apropiada. En sintona con

FIGURA 5.15 (a) El circuito de cuatro nodo comn displays de siete segmentos conectados a los puertos A y B en un microcontrolador PIC. Resistencias R s limitar la corriente a travs de los segmentos, y resistencias R b garantizar la saturacin de los transistores utilizados para permitir que cada dispositivo. la diodos transistores aseguran estar de cuando los pines del puerto A se encuentran en el nivel lgico 1. (b) Formas de onda en cada pin de seleccin. La frecuencia de estas seales debe oscilar entre 40 Hz y 200 Hz para el ojo humano no para detectar parpadear. Cada dispositivo se selecciona onefourth del tiempo total. su activacin, la informacin correspondiente al dispositivo seleccionado se establece en cada pin. Uso de una frecuencia lo suficientemente alta refrescante (entre 40 y 200 Hz), una persona va a ver todos los siete segmentos visualiza iluminado por la mismo tiempo. En una muestra de multiplexado, cada dgito est en ON por slo una fraccin del total tiempo (por ejemplo, una cuarta parte del tiempo total en el ejemplo mostrado en la Figura 5.15). Por lo tanto, es necesario aumentar la corriente en cada segmento cin en aproximadamente la misma proporcin ( 4) para lograr una buena luminivel de mantenimiento. Si, por ejemplo, la corriente directa para una especificidad?? LED c es 10 mA, ser necesario para conducir con pulsos de 40 mA cuando se trabaja multiplexada. Este valor de la corriente se puede ajustar con la resistencia R s. La resistencia R b debe garantizar que los transistores se sature. los diodos colocado en las bases de los transistores garantizar que estos sern OFF cuando no accionado directamente. Es posible utilizar una interrupcin para manejar el circuito de la figura 5.15. La figura 5.16 muestra el diagrama de bloques para el algoritmo para el servicio de la interrumpir en ese circuito. Cuando multiplexar cuatro dispositivos es necesario para utilizar un oscilador con una frecuencia cuatro veces mayor que la deseada refrescante frecuencia para generar las seales de interrupcin al microcontrolador controlador. Cada interrupcin se utiliza para visualizar una pantalla. Es posible utilizar cuatro registros en la memoria de datos para almacenar la "imagen" de la inforcin que necesita ser mostrada. Esto se re! Ejada en la Tabla 1 en la Figura 5.16. Cada posicin en esta tabla almacena el cdigo de siete segmentos para la deseada mostrar. Cuatro registros adicionales (Tabla 2) se pueden almacenar la informacin de control macin necesaria para seleccionar los dispositivos adecuados. Estas son las palabras que se enviar al puerto A para seleccionar correctamente las pantallas secuencialmente. Finalmente, un ltimo registro se puede utilizar para almacenar un puntero dgitos que debe ser renovados por el programa de atencin a la interrupcin. Durante cada interrupcin,

Tabla 1 (RAM) El programa de usuario escribe aqu la informacin a ser representada. Tabla 2 (ROM) Contiene la informacin a seleccionar los dgitos requeridos en la pantalla. Puntero a dgitos para que sea renovado Programa de atencin de interrupcin enva a los puertos informacin dirigida por el puntero. FIGURA 5.16 Algoritmo de software para el circuito de pantalla de siete segmentos muestra en la Figura 5.15. este puntero se incrementa y la informacin almacenada en las Tablas 1 y 2 es enviado a los puertos A y B. Con este enfoque, la Tabla 1 se puede considerar como la imagen de la memoria RAM mostrar. Cada pieza de informacin que tiene que ser visualizado debe ser? Rst escrito en esta tabla. Antes de hacer esto, es necesario convertir el original Informacin que puede ser en BCD (decimal codificado en binario), ASCII, o un cdigo no estndar en el cdigo de siete dgitos utilizado por las pantallas. 5.3.4 alfanumricos pantallas de cristal lquido Pantallas de cristal lquido (LCD) son ampliamente utilizados para representar caracteres alfanumricos informacin. La mayora de ellos consisten en la propia pantalla LCD y un microcontrolador utiliza para controlar la informacin que muestra la pantalla a travs un fcil de usar interfaz de hardware y software. Estas pantallas normalmente tener una o dos lneas, cada una capaz de mostrar un cierto nmero de caracterespersonajes. Un dispositivo muy utilizado es HD44780 de Renesas (antes Hitachi). Este microcontrolador puede manejar directamente una pantalla LCD de una o dos lneas, cada uno con ocho personajes. Para hacer frente a pantallas ms grandes, es necesario el uso de circuitos auxiliares, tales como el controlador HD44100 que permite manejo de un adicional de ocho caracteres para cada lnea. La figura 5.17 muestra el diagrama de bloques para el LM016L LCD que utiliza un controlador HD44780 y un controlador HD44100. Este mdulo controla una pantalla LCD de dos lneas con 16 caracteres por lnea.

El microcontrolador HD44780 tiene una memoria interna (DDRAM) que puede almacenar los cdigos ASCII de hasta 80 caracteres alfanumricos. estos caracteres se pueden mostrar en una o dos lneas. Cada lnea funciona como un memoria circular, es decir, una vez que una lnea est llena el siguiente carcter est escrito en la posicin inicial de la memoria. Si la memoria RAM circular est organizada en una sola

FIGURA 5.17 Componentes del mdulo LCD ML016L con una interfaz de 8 bits.

FIGURA 5.18 La memoria RAM de datos (DDRAM) para el controlador HD44780 puede organizarse como una o dos lneas. Cuando se organiza de dos lneas (como se muestra en esto? Gura), cada lnea acta como un Memoria circular 40 bytes con las direcciones que se muestran. La lnea discontinua muestra la parte de DDRAM visible en el mdulo LM016L (dos lneas de 16 caracteres por lnea). Lo visible parte se puede mover a lo largo de la DDRAM utilizando las rdenes apropiadas que se muestran en la Tabla 5.6. line, que funciona como una memoria circular de 80 bytes con direcciones que son secuencial de 00h a 4Fh. Si se organiza en dos lneas, tiene dos indememorias circulares independientes, cada uno de ellos capaz de almacenar 40 caracteres. En este caso, las direcciones de memoria no son secuenciales; las direcciones para los la lnea? rst son de 00h a 27h y de las direcciones de la segunda lnea son de 40h a 67h, como se muestra en la Figura 5.18. El HD44780 tambin tiene un generador de caracteres en la memoria ROM y otra en la memoria RAM. El generador de ROM almacena la matriz de puntos necesarios para generar cada personaje. El generador de memoria RAM (CGRAM) permite al usuario de? Ne

caracteres no estndar que no se almacenan en el generador de caracteres ROM. Este microcontrolador tambin tiene un conjunto de instrucciones para manipular la pantalla. ? Los principales especi caciones para LCD que utilizan el controlador HD44780 son: Posibilidad de conectar hasta 4 bits u 8 bits puertos paralelos Posibilidad de almacenar hasta 80 caracteres en una interna de 80 bytes RAM (DRAM) generador caracteres en la ROM interna con: 160 caracteres con 5 x 7 puntos 32 caracteres con 5 10 puntos usuarios de generador de caracteres ned en la RAM interna con: 8 caracteres con 5 x 7 puntos 4 personajes con 5 10 puntos tecnologa CMOS, produciendo el consumo y muy bajo consumo de energa por lo tanto, capaz de ser alimentado por batera interna de encendido circuito de rearme gran conjunto de instrucciones: pantalla en blanco, el cursor y el carcter intermitente, movimiento del cursor y la pantalla, control on / off de cursor y mostrar, etc

Estos mdulos LCD tienen una interfaz digital para la transferencia de datos y las seales de control entre el mdulo y el microcontrolador o microprocesador. Esta interfaz se compone de tres lneas de control y cuatro u ocho de datos lneas, dependiendo de si la interfaz es 4 u 8 bits. La conexin entre un microcontrolador PIC medio extremo y un LCD mdulo se puede hacer mediante el uso de los puertos A y B. La Figura 5.19 muestra la conexin entre estos mdulos por medio de una interfaz de 8 bits. Las lneas y seales involucrados en este sentido se describen en la siguiente lista. Registro seleccionar (RS). Esta seal le dice al mdulo LCD si el seal que se enva a travs de DB0-DB7 es una seal de control (RS = 0) o una seal de datos (RS = 1). lectura / escritura (R / W). Esta seal indica que la lectura (OR = 1) o escribiendo (RW = 0). Enable (E). E = 1 activa el dispositivo. El mdulo LCD captura datos o seales de control con el flanco de bajada de E. bus de datos (DB0-DB7). Lneas bidireccionales que transmiten datos y seales de control. Figura 5.20 ilustra el proceso de enviar un control o una seal de datos a el mdulo LCD. La Tabla 5.6 muestra el orden que aceptan mdulos LCD que utilizan el controlador HD44780. El controlador HD44780 tiene un registro interno llamado la direccin contador (AC). Este registro contiene la direccin de la DDRAM o CGRAM que se utilizar para escribir o leer datos. Una vez que un tipo de memoria ha sido seleccionado, los datos se pueden leer o escribir en la memoria hasta que la seleccin

se cambia. Las instrucciones de control "Clear visualizacin" y "Mover a la posicin inicial", seleccione la DDRAM y establecer la AC a 0. La instruccin "Select DDRAM" permite establecimiento de la CA a cualquier valor. Cuando los datos se escriben (o leer) el registro de CA aumentar o disminuir dependiendo del modo de entrada seleccionado.

FIGURA 5.20 Las seales utilizadas para escribir datos u rdenes en el mdulo LCD. Escrito Orden (RS = 0) o los datos escritos cin (RS = 1) se hace efectiva de forma sincronizada con el flanco de bajada de la seal E. En general, la ejecucin de rdenes para la visualizacin de datos se lleva a relarelativamente mucho tiempo, del orden de varios microsegundos. Durante este tiempo el controlador no puede recibir un nuevo pedido o datos. Por esta razn, antes el envo de nuevos datos u rdenes es necesario? a cabo si el controlador puede recibirlos. ?? El ocupado AG (BF) bits se utiliza por esta razn; BF = 1 cuando el controlador est ocupado y BF = 0 cuando el controlador est listo para aceptar la nueva datos o nuevos pedidos. Este bit se puede leer en cualquier momento por lectura (R / W # = 1) una orden (RS = 0). Bit 7 en la palabra devuelta (DB0 a DB7) de la concontrolador es el indicador de BF. Ejemplo 5.6 ilustra este proceso. Ejemplo 5.6 Este ejemplo muestra el cdigo ensamblador para algunas rutinas bsicas para operar una LCD que incorpora el controlador HD44780. En este ejemplo, el mdulo LCD est conectado al microcontrolador PIC a travs de los puertos A y B como se muestra en la figura 5.19 Este ejemplo tiene cuatro rutinas: INIT_LCD para la inicializacin de la pantalla, WR_ CMD y WR_DATA escribir rdenes y los datos en la pantalla, y LCD_BUSY utilizar el bit BF para comprobar si el controlador est ocupado antes de enviar un nuevo orden o los datos.
list p = 16f873 #include <p16f873.inc> ; Hardware description: P_DATA equ PORTB ; Port for display data lines. P_TRIS equ TRISB P_CTRL equ PORTA ; Port for display control lines. RS equ 0 ; Control bit for signal RS. RW equ 1 ; Control bit for signal RW. E equ 2 ; Control bit for signal E. ; Other Declarations: TEMP equ 0x020 ; Temporary register used by subroutines. ; INIT_LCD: Display initialization subroutine. INIT_LCD: ; BF flag not ready yet. clrf P_CTRL ; Control line to 0. call DELAY15 ; Wait 15 ms. ; BF flag ready from here. movlw 38h ; 2-lines display. 5 7 characters.

call WR_CMD movlw 08h ; Turn off display and cursor. call WR_CMD movlw 01h ; Clear display and set AC = 0. call WR_CMD movlw 0Ch ; Turn on display with cursor off. call WR_CMD movlw 06h ; Select input mode: Cursor moves towards ; right. call WR_CMD return ; WR_CMD: Subroutine to write an order in the display. ; Input: Order must be stored in W. WR_CMD: movwf TEMP ; Store order in TEMP. call LCD_BUSY ; Wait for display ready. bcf P_CTRL, RW ; Prepare writing (RW = 0) bcf P_CTRL, RS ; an order (RS = 0). bsf P_CTRL, E ; Enable display (E = 1). movf TEMP, W ; Store order W. movwf P_DATA ; Send order to display. bcf P_CTRL, E ; Disable display (E = 0). return ;WR_DATA:Subroutine to write data in the display. ; Input: Order must be stored in W. WR_DATA: movwf TEMP ; Store order in TEMP. call LCD_BUSY ; Wait for display ready. bcf P_CTRL, RW ; Prepare writing (RW = 0) bsf P_CTRL, RS ; data (RS = 1). bsf P_CTRL, E ; Enable display (E = 1). movf TEMP, W ; Store data in W. movwf P_DATA ; Send data to display. bcf P_CTRL, E ; Disable display (E = 0). return ;LCD_BUSY: Subroutine for waiting if display is busy. ; This subroutine checks bit BF. Wait while BF = 1 ; and returns when BF = 0. LCD_BUSY: bsf STATUS,RP0 ; Select register bank 1. movlw 0FFh ; Store data port in input movwf P_TRIS ; by writing FFh in the appropriate TRIS ; register bcf STATUS, RP0; Select bank 0. bsf P_CTRL, RW ; Prepare reading (RW = 1). bcf P_CTRL, RS ; of an order (RS = 0). BUSY10: bsf P_CTRL, E ; Enable display (E = 1). nop movf P_DATA, W ; Read display. BF is bit 7. bcf P_CTRL, E ; Disable display (E = 0). andlw 80h ; Retrieve BF bit. btfss STATUS, Z ; Is BF 0? goto BUSY10 ; No - display busy. Check again. bcf P_CTRL, RW ; Yes - display not busy. End of reading ; (RW = 1). bsf STATUS, RP0; Select bank 1. movlw 0 ; Store data port in output. movwf P_TRIS ; by writing 00h in the ; appropriate TRIS register. bcf STATUS, RP0; Select bank 0. return ; Return. ; DELAY15: Subroutine for 15 ms delay. DELAY15: ; ; Write here code for this subroutine. ; return end

3.2 Microcontroladores PIC Input-Output Puerto de programacin Dependiendo del tipo de microcontrolador utilizado, PIC puertos de entrada y salida del microcontrolador se nombran como PORTA, PORTB, PORTC, y as sucesivamente. Pines del puerto pueden ser en formato analgico o digital modo. En el modo analgico, puertos de entrada solamente y un conversor analgico-digital y se utilizan circuitos de multiplexor. En el modo digital, un pin del puerto se puede configurar como sea de entrada o de salida. El TRIS registra controlar las direcciones de puerto, y hay TRIS registros para cada puerto, nombrado como TRISA, TRISB, TRISC, y as sucesivamente. Eliminacin de un TRIS bit de registro a 0 establece el bit de puerto correspondiente al modo de salida. Del mismo modo, el establecimiento de un TRIS bit de registro a 1 activa el bit de puerto correspondiente al modo de entrada. Los puertos se puede acceder a un registro de 8 bits nica, o los bits individuales de un puerto puede ser visitada. En el siguiente ejemplo, PORTB se configura como un puerto de salida y en toda su bits se establecen en un 1:
TRISB = 0; // Set PORTB as output PORTB = 0xFF; // Set PORTB bits to 1

Los bits de un puerto de entrada y salida se puede acceder mediante la especificacin del nmero de bits requerida. en el siguiente ejemplo, P2 variable se carga con el bit 2 de PORTB:
P2 = PORTB.2;

Todos los bits de un puerto se pueden complementar con la declaracin:


PORTB =!PORTB;

3.3 Ejemplos de programacin En esta seccin, algunos simples ejemplos de programacin se dan a familiarizar al lector con la programacin en C. Ejemplo 3.2 Escriba un programa para establecer los ocho pines del puerto PORTB de la lgica 1. Solution 3.2 PORTB se configura como un puerto de salida, y luego todos los pines del puerto se ajusta a 1 lgico por enviando 0xFF nmero hexadecimal:
void main() { TRISB = 0; // Configure PORTB as output

PORTB =0xFF; // Set all port pins to logic a }

Ejemplo 3.3 Escriba un programa para ajustar los pines PORTB impares (bits 1, 3, 5 y 7) a 1 lgico. Solution 3.3 Pines del puerto de nmero impar se pueden ajustar a la lgica 1 mediante el envo de la configuracin de bits 10101010 al puerto. Este patrn de bits es la 0xAA nmero hexadecimal y la necesaria programa es:
void main() { TRISB 0; // Configure PORTB as output PORTB 0xAA; // Turn on odd numbered port pins }

Ejemplo 3.4 Escriba un programa para contar continuamente en binario y enviar estos datos a PORTB. as PORTB requiere los datos binarios:
00000000 00000001 00000010 00000011 ............ ............ 11111110 11111111 00000000 ............

Solution 3.4 Un bucle se puede utilizar para crear un bucle sin fin, y dentro de este bucle el valor de un variable puede ser incrementado y se enva a PORTB:
void main() { unsigned char Cnt=0; for(;;) //bucle infinito { PORTB =Cnt; //enviar a cnt a portB Cnt++//incrementa cnt } }

Ejemplo 3.5 Escriba un programa para ajustar todos los bits de PORTB a 1 lgico y luego a 0 lgico, y repetir este proceso diez veces. 3.5 Solucin Una sentencia for se puede utilizar para crear un bucle para repetir la operacin requerida diez veces:
void main() { unsigned char j; for(j =0; j < 10; j++) // Repeat 10 times {

PORTB =0xFF; // Set PORTB pins to 1 PORTB = 0; // Clear PORTB pins } }

Ejemplo 3.6 El radio y la altura de un cilindro son 2,5 cm y 10 cm, respectivamente. Escriba un programa para calcular el volumen de este cilindro. Solution 3.6 El programa requerido es:
void main() { float Radius =2.5, Height = 10; float Volume; Volume = PI *Radius*Radius*Height; }

Ejemplo 3.7 Escriba un programa para encontrar el mayor elemento de una matriz de enteros con diez elementos. Solution 3.7 Al principio, variable de m se establece en el primer elemento de la matriz. Un bucle es a continuacin forma y el mayor elemento de la matriz se encuentra:
void main() { unsigned char j; int m, A[10]; m = A[0]; // First element of array for(j = 1; j < 10; j++) { if(A[j]> m)m = A[j]; } }

Ejemplo 3.8 Escribir un programa utilizando una sentencia while para borrar todos los diez elementos de un entero matriz M. Solution 3.8 Como se muestra en el programa que sigue, NUM se define como 10 la variable j se utiliza como el contador del bucle:
#define NUM 10 void main() { int M[NUM]; unsigned char j = 0; while (j < NUM) { M[j] =0; j++; } }

Ejemplo 3.9 Escriba un programa para convertir la temperatura de C # a # F a partir de 0 # C, en pasos

de 1 # C hasta e incluyendo 100 # C, y almacenar los resultados en una matriz llamada F. Solution 3.9 Teniendo en cuenta la temperatura en C #, el equivalente en # F se calcula usando la frmula: F =(C 32.0)/1.8 Un bucle se utiliza para calcular la temperatura en # F y tienda en matriz F:
void main() { float F[100]; unsigned char C; for(C =0; C <=100; C++) { F[C] = (C 32.0) / 1.8; } }

3.4 Resumen Hay muchas montaje y lenguajes de alto nivel para la serie PIC18 de microcontroladores. Este libro se centra en el compilador mikroC, ya que es fcil de aprender y una versin de demostracin gratuita que permite a los usuarios desarrollar programas tan grandes como 2K en tamao. En este captulo se presenta una introduccin a la lengua mikroC. Un programa en C puede contener un nmero de funciones y variables, adems de un programa principal. El comienzo de la programa principal se indica mediante la declaracin void main (). Una variable almacena un valor que se utiliza en el clculo. Todas las variables en C deben declararse antes de que se utilizan. Una variable puede ser un carcter de 8 bits, un entero de 16 bits, de 32 bits de largo, o un nmero de punto flotante. Las constantes se almacenan en la memoria flash de programa de PIC microcontroladores, por lo que su uso se evita el uso de la memoria RAM valioso y limitado. Varios de control de flujo y las declaraciones de iteracin como if, switch, mientras, hacer, romper, y as en se han descrito en el captulo, con ejemplos. Los punteros se utilizan para almacenar las direcciones de las variables. Como veremos en el prximo captulo, punteros se pueden utilizar para pasar informacin de ida y vuelta entre una funcin y su punto de llamada. Por ejemplo, los punteros se pueden usar para pasar variables entre un principal programa y una funcin.

You might also like