Beruflich Dokumente
Kultur Dokumente
Unidad 1
Curso de Microcontroladores I
Objetivos del Curso
q
Comenzar a familiarizarse con el entorno de los Microcontroladores Intel Realizar Primeras prcticas de control y prueba. Operaciones bsicas e intermedias.
q q
Tiempo aproximado
q
40 Horas
Nmero de prcticas
q q
Practicas
q q q q q q q q
In Out por los puertos. Mandar mensajes al LCD de modo manual. Lectura por un puerto y contenido de la lectura por el LCD. Lectura en LCD de un ADC 0804 Probador de voltajes. Probador de Timer Counter Medidor de RPM. Control de Interrupciones
Indice General
Capitulo 1. Introduccin a los Microprocesadores. 1.1. La Evolucion de los Microprocesadores. 1.2. Caractersticas de los Microcontroladores 1.3. Pinout de los Microcontroladores Intel Capitulo 2. Configuracin de la memoria en el Microcontrolador 2.1. Memoria de p rograma y datos. 2.2. Memoria de programa. 2.3. Memoria de datos. 2.4. Area de direccionamiento slo indirecto. 2.5. Area de direccionamiento directo e indirecto. 2.6. Area de registros o funciones especiales 2.7. Operacin Reset. Capitulo 3. Programacin de los Microcontroladores 3.1. Introduccin 3.2. Modos de direccionamiento 3.3. Ciclo de instruccin 3.4. Tipo de instrucciones 3.5. Instrucciones aritmticas. 3.6. Instrucciones lgicas. 3.7. Instrucciones de transferencia movimiento de datos. 3.7.1. Transferencia de datos sobre la RAM interna 3.7.2. Transferencia de datos sobre la RAM externa. 3.7.3. Memoria de programas para el tratamiento de tablas 3.8. Instrucciones Booleanas 3.9. Instrucciones de salto. 3.9.1. Instrucciones de salto incondicional. 3.9.2. Instrucciones de salto condicional. 3.10. <<SET>> de instrucciones de la familia MCS-51 Presentacin del software y equipo para el desarrollo de aplicaciones Introduccin El Macroensamblador: Operaciones del editor. Operaciones de ensamblado. Operaciones de Encadenado. Operaciones de Simulacin Ejecucin y estudio de programas en el Macroensamblador. Contro l de puertos de Entrada/Salida. Introduccin El Microcontrolador como Microprocesador. Operaciones de escritura en los puertos del Microcontrolador. El puerto P0 en modo salida. Operaciones de lectura en los puertos. Control de procesos Industriales bsicos . Control del LCD. Control del Teclado. Adquisicin de datos mediante ADC Interrupciones. Introduccin. Tipos de Interrupciones. Proceso de interrupcin en los Microcontroladores. Niveles de prioridad. Interrupciones externas. (INT0 ) e (INT1 ) Interrupciones internas producidas por Timer 0 y1. Temporizadores y Contadores. Introduccin Timer 0 (T0) y Timer 1 (T1). Temporizador/Contador de 13 y 16 bit, arranque por software. Programas.
Unidad 1
1.1 INTRODUCCIN A LOS MICROPROCESADORES
LA EVOLUCION DEL MICROPROCESADORES Antes de comenzar a analizar los microprocesadores modernos, se debe primero entender qu fue lo que paso con estos dispositivos en los primeros aos. La historia dice que se construyeron gigantescas mquinas computadoras en las dcadas de 1940 y 1950, construidas con relevadores y tubos de vaco (bulbos). La primera computadora digital electrnica fue construida por un equipo dirigido por los ingenieros John Mauchly y John Eckert, de la universidad de Pennsylvania, en 1946. Esta mquina electrnica fue llamada ENIAC (Electronic Numerical Integrator and Computer), tena ms de 18000 bulbos y consuma 200 Kw. Tiempo despus, cuando se integr a este equipo el Ing. y matemtico Hngaro, naturalizado norteamericano, John Von Neumann fue diseada una nueva computadora llamada EDVAC (Electronic Discrete Variable Automatic Computer). Las ideas de Von Neumann resultaron tan fundamentales para su desarrollo, que es considerado el padre de las computadoras.
Estas ideas consistieron en permitir que en la memoria coexistieran datos con instrucciones para que la computadora pudiera ser programada por medio de software y no por medio de hardware. Alrededor de este concepto gira toda la evolucin de la industria y la ciencia de la computacin. Ms adelante, se utilizaron los transistores y los componentes electrnicos de estado slido para construir las poderosas computadoras de la dcada de 1960. Con el advenimiento, de los circuitos integrados se lleg al perfeccionamiento del microprocesador.
El microprocesador de 4 bits En 1969, Intel Corporation y el talento creativo de Marcian E. Hoff lanzaron el primer microprocesador: el 4004, de 4 bits. Este microprocesador, programable en un solo encapsulado era insuficiente, segn las normas actuales, porque slo direccionaba 4096 localidades de 4 bits en la memoria. El 4004 contena un conjunto de instrucciones que ofrecan slo 45 instrucciones diferentes. Como consecuencia, el 4004 slo se poda emplear en aplicaciones limitadas, como en los primeros juegos de vdeo y en controladores pequeos basados en microprocesadores. Cuando surgieron aplicaciones ms complejas para el microprocesador, el 4004 result inadecuado. El microprocesador de 8 bits Ms tarde, en 1971, al percatarse que el microprocesador era un producto, viable para comercializacin, Intel Corporation produjo el 8008, el primer microprocesador de 8 bits. El tamao ampliado, de la memoria (16K * 8) y las instrucciones adicionales (un total de 48). Con este nuevo microprocesador se lograron aplicaciones ms avanzadas (1K es igual a 1024 y un byte es un nmero de 8 bits). Conforme los ingenieros desarrollaban usos ms demandantes para el
microprocesador, la memoria y el juego de instrucciones del 8008 pronto limitaron su utilidad. Por tanto, en 1973, Intel Corporation introdujo el 8080, el primero, de los microprocesadores modernos de 8 bits. Pronto, otras empresas empezaron a lanzar sus propias versiones de los
COMENTARIOS
Figura 1.8
Memory Ram
(A) Microprocesador (Unidad Central de Procesamiento (CPU)). Central Processing Unit. El CPU es el corazn de toda C , es el encargado de decodificar las instrucciones, hacer ms eficientes las operaciones aritmticas, y controlar algunas otras partes de la maquina. Cuenta con cuatro partes bsicas que hace los verdaderos cmputos.
Sin embargo, a veces el trmino es usado (aunque incorrectamente), para inclur todo lo que est dentro de la caja, incluyendo el disco duro, el CD ROM, la fuente y el motherboard. (1) Los Registros: Son localizaciones que sirven para almacenar temporalmente datos, pueden ser de 8 o de 16 bits. Los tres registros ms usados son, el acumulador para propsito general, el contador de programa y el registro de instrucciones que son de propsito especfico. El acumulador almacena temporalmente el resultado de las
operaciones aritmticas y lgicas. El registro de Instrucciones es usado para almacenar la instruccin que se est ejecutando en ese momento por el microprocesador. El contador de Programa contiene la direccin de la siguiente instruccin del programa.
(2)
La
unidad
aritmtico-lgica
(ALU,
Arithmetic-logic
unit):
es
una
red
combinacional. Acepta dos palabras de datos y una palabra de control que especifica el tipo de operacin que ha de ejecutarse con los datos. El bus de datos del sistema o cualquiera de los registros internos del procesador pueden proporcionar palabras de datos. La palabra de control se define por la unidad de control. La ALU realiza la operacin especificada y genera una palabra de salida que representa el resultado de la operacin aritmtica o lgica y un conjunto de seales de estado que indican, por ejemplo, si se produjo un acarreo o desbordamiento aritmtico. La palabra resultado se puede dirigir a cualquiera, de los registros internos o al bus de datos. El destino especfico se define por la unidad de control, dependiendo de la naturaleza de la Operacin que se esta realizando. Las seales de estado se dirigen a un registro interno especfico del procesador para almacenamiento, denominado registro de cdigos de condicin.
(3) El Circuito de temporizador y control: Es una red secuencial que acepta un cdigo que define la operacin que se va a ejecutar y luego prosigue a travs de una secuencia de estados, generando una correspondiente secuencia de seales de control. Estas seales de control incluyen el control de lectura - escritura y seales de direccin de memoria vlida en el bus de control del sistema. Otras seales g eneradas por el controlador se conectan a la unidad aritmtica - lgica y a los registros internos del procesador para regular el flujo de informacin en el procesador y a, y desde, los buses de direccin y de datos del sistema.
(4) El circuito de decodificacin: Involucra el proceso de trasladar un patrn binario en una operacin o secuencia de operaciones. Por ejemplo si el siguiente patrn binario
10111001 representa ADD, el circuito de decodificacin lo reconoce y manda seales a todas las otras partes del P para que ocurra la decodificacin.
(B) PUERTOS DE ENTRADA/SALIDA: Una microcomputadora tiene un camino para comunicarse con el mundo real, y este camino sirve para introducir el programa y obtener los resultados. Los puertos de entrada y salida son circuitos LSI que auxilian a la computadora a comunicarse con los humanos o a controlar un proceso. Son normalmente llamados Peripheral interface adaptdor (PIA) o Programable peripheral interface (PPI). Estos chips pueden ser programados como entradas o salidas de la microcomputadora. Si el C es usado en un proceso de control, los componentes de entrada son llamados transductores (Termistores, Termocolples etc.). Un transductor convierte una cantidad fsica analgica como temperatura o presin en una cantidad elctrica. Esta cantidad puede ser amplificada o procesada antes de convertirla en una seal digital. Por ejemplo en un sistema de control con retroalimentacin como el que se muestra a continuacin el transductor monitorea la presin dentro de un tubo y constantemente manda los datos al P. Un programa es usado para comparar el dato contra un valor de referencia almacenado en la memoria. Si la presin excede la referencia el P manda las seales de salida para cerrar la vlvula y hacer sonar la alarma.
Figura 1.2
Out Port.
Drive Circuit.
Memory Ram
(C) MEMORIA: La memoria es una porcin de la computadora que almacena el programa y los datos mientras estos son necesarios. En esencia la memoria es un grupo de celdas de almacenamiento. Cada celda puede almacenar un bit de informacin el cual puede ser 1 0. Por ejemplo la sig. Figura muestra un grupo de 8 celdas o bit almacenados como un patrn binario que representa la letra P. 0 1 0 1 0 0 0 0
1 celda. Otras letras otros tipos de informacin requieren otros tipos de combinacin. La mayora de los microprocesadores almacenan instrucciones y datos en grupos de 8 bits (1 Byte). Para almacenar ms de una letra es necesario ms de un byte. 0 0 0 1 1 1 0 0 0 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 =I =T =N Add. 105 106 107
Cada byte almacenado en memoria tiene una direccin. Por ejemplo ITN puede estar almacenado en las direcciones 105 a 107. Los P son capaces de direccionar 65,536 bytes.
1.2.1 Arquitectura del Microprocesadores a traves de diagrama a bloques con Arquitectura Von Neumann
El Acumulador: almacena datos para ser procesados por la ALU. Suelen tener el mismo nmero de bits que el bus de datos. El acumulador se utiliza con el bus de datos y la ALU en el proceso aritmertico y logico de los datos. Por ejemplo, dos palabras binarias se pueden sumar, cargando la primera en el acumulador A y sumandola a la segunda, cargando el resultado en el acumulador y despus transfiriendo los resultados desde el Acumulador, a la memoria. Durante la transferencia de los primeros datos, el bus de datos sirve como una entrada al Acumulador. Durante la segunda, la ALU realiza una suma en la que el bus de datos proporciona una entrada y el acumulador A la otra; la salida de la ALU se conecta a la entrada del acumulador A para almacenar el resultado. Durante la tercera operacin, la salida del Acumulador se conecta al bus de datos, de modo que los resultados se transfieren a memoria.
El contador de programa (PC): Es un registro de 16 bits que contiene la direccin de la palabra siguiente del programa. Su salida se conecta al bus de direcciones siempre que una palabra del programa se lea desde la memoria. Cada vez que el contador de programa proporciona una direccin, se modifica de modo que contiene siempre la direccin de la palabra siguiente del programa.
Figura 1.4 Pin Out del Microprocesador 8080 El puntero de pila (SP, stack pointer): El puntero de pila es, un registro de autoincrem entacin y autodecrementacin, que significa que cada vez que se proporciona un dato su contenido se incrementa o decrementa automticamente. En los microprocesadores, el puntero de pila contiene la direccin de la siguiente posicin de memoria vaca en la pila. A continuacin, proporciona esta direccin al bus de direcciones durante un ciclo del bus de lectura. La pila se utiliza de muchos modos; por ejemplo, se utiliza para almacenar la direccin de retorno cuando las transferencias de control a subrutinas o rutinas de interrupcin de servicios.
Fig. 1.5 El registro de cdigos de condicin: (PSW) (CCR) Almacena la informacin que describe los resultados de operaciones anteriores. Esta informacin se almacena asignando un bit en el registro. En algunos microprocesadores, el registro del cdigo de condicin. Contiene ocho bits, El bit menos significativo es el bit de acarreo, o bit C, que se pone a 1 cuando se produce un acarreo aritmtico. El bit de desbordamiento, o bit V, se pone a 1 si se produce un desbordamiento. El bit cero, o bit Z, el tercer bit en el registro de cdigos de condicin se pone a 1 cuando se produce el resultado cero. El bit negativo, o bit N, se pone a 1 cuando el resultado es negativo. El bit de semi acarreo, o bit H, se pone a 1 cuando se produce un acarreo desde el bit 3. El bit H se utiliza con clculos aritmticos con datos codificados en BCD. Los bits C, V, Z, N y H se ponen a 1, o a 0, automticamente por el procesador, dependiendo de la naturaleza de la operacin que se est ejecutando y el resultado de est operacin, adems, los bits C, V e I pueden ser puestos a 1, o a 0, por el programador utilizando instrucciones especiales para cada bit.
En estos momentos los MICROCONTROLADORES de 8 bits son el estndar para aplicaciones en controladores de mediana complejidad, por su facilidad de manejo y su alto nivel de prestaciones. Adems la arquitectura permite que el MICROCONTROLADOR sea utilizado como Microprocesador. Naturalmente esto trae como consecuencia una reduccin de su capacidad autnoma de controlar perifricos a travs de sus puertos.
ROM 1K 2K 4K 4K 4K 8K 4K
TIMER 1 1 1 2 2 3 2
Figura 1.9
Figura 1.10
Figura 1.11
Descripcin de los pines: Vcc: Voltaje de alimentacin positiva (+5 Volts.) Vss: Conexin a tierra (0 volts). PUERTOS: Los MICROCONTROLADORES 8051 tienen 4 puertos de 8 bits bidireccionales (P0, P1, P2 y P3). Esto quiere decir que pueden programarse y operar como entrada o salida. PUERTO 0(P0): Se encarga de multiplexar en el tiempo por sus 8 lneas la parte baja del Bus de direcciones durante el acceso a la memoria externa, y el Bus de datos. PUERTO 1(P1): Este puerto adems de ser de proposito general tambin recibe la parte baja de direcciones, durante la programacin y verificacin de la memoria EPROM interna. PUERTO 2 (P2): El puerto 2 emite la parte alta del Bus de direcciones en los accesos de memoria externa cuando utilizan 16 bits de direccin (MOVX @DPTR, A). Durante el acceso a la memoria de datos externa con direccionamiento de 8 bits (MOVX @R1,A), los pines del Puerto 2 emiten el contenido del registro P2 del SFR (Registro de funciones especiales). PUERTO 3 (P3): Este puerto puede usarse para propsito general cuando trabaja como microcontrolador pero tiene otras funciones especiales cuando trabaja como microprocesador o con acceso a memoria de datos externa, como se muestra en la sig. Tabla. Pin 10 11 12 13 14 15 16 17 Descrip P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Funciones RXD (Entrada puerto Serie) TXD (Salida puerto serie) INTO (Interrupcin 0. Externa) INT1 (Interrupcin 1. Externa) T0 (Entrada externa. Timer 0) T1 (Entrada externa. Timer 1) WR (Autorizacin escritura de datos) RD (Autorizacin escritura de datos)
TABLA 2.2
ALE/PROG: (Address Latch Enable) es un pulso que emite el MICROCONTROLADOR para amarrar el <<byte bajo>> del Bus de direcciones en el acceso a la memoria externa. ALE se emite con una frecuencia de 1/6 de la frecuencia de emisin del reloj. PROG: Es el pin de entrada de los pulsos de programacin de la memoria EPROM lo utiliza solamente el programador de micros. PSEN: Es la seal de strobe para leer en la memoria de <<programa externo>>. La memoria externa tiene dos modalidades, de programa y de datos. Para diferenciarlas, utiliza
la seal PSEN. PSEN no se activa cuando se est ejecutando el programa de la ROM o EPROM interna. EA/VPP: (External Access), cuando se mantiene un nivel alto, se ejecuta slo el programa de la EPROM interna, a menos que el contador de programa exceda de FFF (4K) para el 8751. Si EA se mantiene un nivel bajo, se ejecuta el programa de la memoria externa siempre, independientemente de la direccin del programa. Es decir cuando EA=1 acta como MICROCONTROLADOR. EA=0 acta como MICROPROCESADOR. VPP: Es la tensin de programacin de la EPROM. XTAL1 y XTAL2: Son la entrada y salida respectivamente, de un amp lificador inversor que puede ser configurado para su uso como un chip oscilador. Se puede utilizar indistintamente un cristal de cuarzo o un resonador cermico.
RESET: Seal de inicializacin del sistema. Un reset interno al sistema se produce cuando se pone el pin RST a un nivel alto durante un cierto tiempo, esto se logra de modo automtico conectando el pin RST a Vcc mediante un capacitor de 10 F y a tierra medinte una resistencia de 8.2 k .
Figura 1.12
La memoria de programa slo puede ser leda y tiene como mximo 64K byte externos. (Internamente el 8751 es de 4K byte). La seal de autorizacin de lectura en la memoria de programa externa es PSEN. El pin EA del MICROCONTROLADOR puesto a Vcc (+5V) indica que el puntero de programa busca direcciones desde la posicin de memoria 0000H hasta la 0FFFH de la memoria interna y de la 1000H a la FFFFH, en la memoria externa. Si el pin EA es puesto a Vss (0v), la bsqueda de direcciones del programa se dirige a la memoria externa en todo momento.
PSEN est a nivel bajo, siendo el resto de las lneas de direccin las que establecen la posicin de menoria exacta del byte de instruccin u operando que ha de ser ledo. Si el usuario escribe en el Puerto P0 durante el ciclo de bsqueda en la memoria externa, el byte de cdigo puede ser modificado. Se recomienda no escribir en el Puerto P0 si es utilizada para leer en la memoria de programa externa. A la memoria de programas externa se accede bajo dos condiciones: 1. Cuando el pin EA es activo (0), caso de la Figura 1.13 2. Cuando el contador de programa (PC) contiene un nmero ms grande que 0FFFH para el 8051 o para el 8052.
0023H...PUERTO SERIE 001BH...INT TIMER 1 0013H... INT EXTERIOR 1 000BH...INT TIMER 0 0003H...INT EXTERIOR 0 0000H... RESET
Una interrupcin puede ser provocada de manera externa o de manera interna, es decir puede ser producida por un perifrico externo o por software. La interrupcin con ms prioridad es RESET la cual no puede ser enmascarada. Cuando un RESET ocurre el programa comienza a partir de la direccin 0000H, del programa. Cuando una interrupcin es producida, el Contador de Programa (PC) almacena su contenido temporalmente dentro del SP (apuntador de apilamiento) y se carga con la direccin de la localidad donde se encuentra la rutina de servicio de la interrupcin correspondiente. Una vez posicionado en esa localidad deber de comenzar la ejecucin de la rutina de servicio, hasta que encuentre la instruccin RETI, que le permitir al PC recuperar nuevamente su valor original almacenado en el SP, y continuar con el programa anterior a la interrupcin.
Por ejemplo a la interrupcin 0, se le asigna la localidad 0003H, si la interrupcin no se utiliza, esta localidad puede utilizarse para propsitos generales del programa, si la interrupcin ha sido permitida, (estableciendo el bit correspondiente dentro del
registro de control IE), en el momento que exista una activacin de la interrupcin (estado bajo en la lnea INT0) el PC se cargar con 0003 y saltar a esa localidad para comenzar a ejecutar la rutina de servicio. Como se puede observar en la Tabla 1.4 Anterior el intervalo fsico entre dos interrupciones es de 8 bytes, espacio capaz de albergar una pequea rutina, pero si ste no fuera suficiente se desviara el contador del programa (PC) mediante una instruccin de salto (JMP) a una zona amplia de la memoria de programa capaz de contener dicha rutina. Como se ha dicho la memoria de programa puede ser interna (en el propio micro) externa (en otro chip). La seleccin se realiza por hardware, con la seal EA (External Access). Conectado a Vcc Vss respectivamente. El hardware de configuracin del Microcontrolador como Microprocesador utilizando memoria de programa externa se muestra en la Fig 1. 12 Se puede observar en al Figura 1.14 que las 16 lneas de direccin corresponden al Puerto 0 y al Puerto 2, que estn dedicadas como bus de direcciones; aun ms el Puerto 0 sirve como bus de direcciones y bus de datos multiplexado en el tiempo. Esta operacin caracterstica de la familia de Microprocesadores Intel, se realiza de la forma siguiente.
Figura 1.14
El Puerto P0 emite el <<byte bajo>> del contador del programa PC (PCL). Una vez estabilizada la seal sobre P0, la seal ALE (Address Latch Enable) introduce esta direccin dentro del circuito integrado latch 74LS373, que pasa a apuntar la direccin de la memoria externa de programas. Al mismo tiempo que el Microcontrolador emite el PCL por P0, la parte alta del contador del programa (PCH) se emite por P2. Entonces
PSEN autoriza la lectura al Microcontrolador del cdigo de instruccin a travs del Puerto P0. Para un mejor entendimiento y seguimiento de los diagramas de tiempos, en la figura 1.13 se dibuja un circuito esquematico en el que aparece el microcontrolador comandando una memoria RAM (6116) y una memoria EEPROM (2816).
Figura 1.13 En las siguiente Fig. Se muestra el funcionamiento y diagramas de tiempos de esta operacin.
Figura 1..15
CICLO MAQUINA: Un ciclo maquina, para esta familia de Microcontroladores, consiste en una secuencia de 6 <<estados>>, nombrados S1 a S6. Cada estado esta formado dos periodos de la seal de reloj que se denominan <<fases>> (fase 1 y fase 2). Teniendo en cuenta que cada ciclo maquina tiene 12 periodos (6 estados por 2 fases), si el oscilador genera una seal de reloj de una frecuencia de 12 Mhz, la duracin del ciclo maquina ser de 1 segundo.
La secuencia de bsqueda/ejecucin son las mismas, sea la memoria de programas interna o externa al Microcontrolador; es decir, los tiempos de ejecucin no dependen de que se utilice la memoria interna o externa. La figura 1.15 muestra el diagrama de tiempos de las seales implicadas en la secuencia de bsqueda, cuando la memoria de programa es externa. La seal PSEN se activa dos veces por ciclo de maquina, para autorizar la lectura en la memoria de programa. Si se produce un acceso a la memoria de datos, como se muestra en la figura 3.4, no se emiten los dos impulsos PSEN, puesto que el acceso a la memoria de datos no los necesita ni utiliza. Observe como el acceso a la memoria de datos toma dos ciclos ms de BUS que la memoria de programas. Las figuras 3.3 y 3.4 muestran los diagramas de tiempos relativos a ambas secuencias de acceso, destacando la emisin de direcciones por P0 y P2, y las seales ALE y PSEN. La seal ALE se utiliza para latchear el <<byte bajo>> de direcciones dentro del latch. Cuando el CPU esta ejecutando un programa en la memoria interna PSEN no se activa y las direcciones no se emiten por los puertos. Sin embargo ALE se sigue emitiendo dos veces por cada ciclo de maquina, pudiendo ser utilizada como seal de reloj externo. No obstante, como se puede ver en la figura 3.4, cuando se accesa a un operando utilizando la instruccin MOVX, la seal ALE desaparece.
Figura 3.4
En la figura anterior se pudo observar cmo se realiza un acceso a la memoria externa de programas para tomar una instruccin y en el segundo ciclo de accede a la memoria de datos externa para tomar datos.
FFFF FF 80 7F 00 0000
FIG. 3.5
RD
WR
En la memoria de datos interna se puede acceder a un total de 256 bytes para el 8751 incluido el rea de los registros especiales (SFR),
REA DE DIRECCIONAMIENTO DIRECTO E INDIRECTO de RAM. Los 128 bytes a los que puede acceder desde ambos direccionamientos, directo e indirecto, pueden ser divididos en tres segmentos. Banco de registros (banco 0, 1, 2 y 3). Registros R0 a R7 por banco. Los registros se localizan desde la direccin 00H a 1FH (32 bytes). Despus de un Reset, el banco operativo por default es el banco 0. La seleccin de otro banco de registros debe hacerse por software escribiendo en el registro de estado PSW.
Direccin Inicial 00H 08H 10H 18H Banco 0 Banco 1 Banco 2 Banco 3 Direccin Final 07H 0FH 17H 1FH
El reset inicializa el Stack Pointer (SP) en la posmem 07H y se incrementa inmediatamente a la posmem 08H, que es el primer registro R0 registros, el SP se puede inicializar en otra localizacin de memoria. del segundo banco de
SUBREA DIRECCIONABLE BIT A BIT: Esta rea tiene una longitud de 16 bytes (del segmento 20H a 2FH). Cada uno de los
128 bits de este segmento se puede direccionar directamente (00H a 7FH). Los bits se pueden direccionar por los bytes que contiene (20H a 2FH). Esto es, los bits 0 al 7 pueden ser referidos como los bits 20.0 a 20.7, etc.
20H 28H 27H 2FH
SUBREA SCRATCH PAD: La memoria scratch pad se entiende como la memoria comn es decir un block de
notas de rpido acceso, pero de escasa capacidad. Ocupa las posiciones de memoria 30H a 7FH 80 Bytes. Es la memoria de trabajo RAM del usuario.
30H 40H 50H 60H 70H 3FH 4FH 5FH 6FH 7FH
Tabla 3.2
B: Registro B es usado durante operaciones de multiplicacin y divisin, para otras instrucciones puede ser tratado como un registro comn.
SP: Stack Pointer: es un registro de 8 bits, este es incrementado antes de que el dato sea almacenado, con un Push o Call. El Stack puede recidir en cualquier lugar de la RAM. El Stack Pointer es inicializado a 07H despus de un reset, esto hace que el Stack empiece en la localidad 08H.
DPL y DPH: Data Pointer: Este registro puede ser manipulado como un registro de 16 bits o como dos registros de 8 bits.
PSW: Program Status Word: Contiene informacin del estado del CPU en cada ciclo de instruccin.
b7 CY BIT b0 b6 AC b5 F0 b4 RS1 b3 RS0 b2 OV b1 b0 P
NOMBRE Y COMENTARIO P: bandera de paridad del Acumulador (ACC). Si P=1 el nmero de unos en el ACC es impar. Si P=0 el nmero de unos en el ACC es par.
b1 b2 b3-b4
Bandera disponible por el usuario. OV: Bandera de Overflow. RS0-RS1: Seleccin del banco de registros. 0 1 - 0 Banco 0 (00-07H) - 0 Banco 1 (08-0FH)
0 - 1 Banco 2 (10-17H) 1 - 1 Banco 3 (18-1FH) b5 b6 b7 F0: Bandera 0. De propsito general. Definida por el usuario. AC: Bandera de acarreo Auxiliar. Para operaciones en BCD. C: Bandera de Acarreo.
Ciclo de lectura (RD) en la memoria externa de datos Para el acceso a la memoria externa de datos utiliza la seal de control RD (funcin alternativa de P3.7) y puede utilizar los 16 bits de direccin (M0VX A,@DPTR) o bien 8 bits (MOVX A,@Ri) (vase Figura 1.13).
En un ciclo de lectura el byte de entrada es aceptado en el Puerto P0 justo antes de que la seal de control RD que autoriza la lectura sea desactivada.
Ciclo de escritura (WR) en la memoria externa de datos Para la escritura en la memoria externa de datos utiliza la seal de control WR(funcin alternativa P3.6) y puede utilizar los 16 bits de direccin (MOVX @DPTR,A) o bien 8 bits (MOVX @Ri,A). En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto P0 antes y despus de que la seal de control de escritura WR sea desactivada. En general, tanto para la lectura como para la escritura, cuando una direccin de 16 bits es utilizada (MOVX @DPTR), el byte alto de direccin sale por el Puerto P2, donde permanecer mientras dura el ciclo de lectura o escritura. Si se utiliza una direccin de 8 bits (MOVX @Ri), el contenido del Puerto P2 en el SFR permanece sobre los pines de P2 durante todo el ciclo de acceso a la memoria externa. Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface, los puertos quedarn en esta situacin: P0: Bus de direcciones bajas (A0 a A7) y bus de datos (D0 a D7) multiplexados en el tiempo. P1: puerto de E/S. P2: Bus de direcciones altas (A8 a A15). P3: Bus de control.
INSTRUCCIONES EJECUTABLES:
Cada instruccin ejecutable en lenguaje ensamblador es una representacin simblica de una instruccin en lenguaje mquina. Por lo tanto, la instruccin en lenguaje ensamblador debe definir la operacin aritmtica - lgica; el modo de direccionamiento y el operando, direccin o desplazamiento de la direccin cuando sea necesario. Adems las instrucciones ejecutables en lenguaje ensamblador suelen contener una sentencia o comentario que indica la razn fundamental de la instruccin. Por ltimo, es frecuente asignar una etiqueta, o nombre a una funcin, para facilitar su referencia. Toda esta informacin se organiza en cuatro campos: Campo Etiqueta. : Campo Operacin Campo Operando ; Campo Comentario
Las instrucciones en los microprocesadores son actualmente una secuencia de 0 y 1s que representan la operacin que se ejecutara. La notacin hexadecimal es usada para abreviar la representacin de la instruccin. Una forma fcil de escribir y entender un programa es escribirlo en Lenguaje ensamblador. En lenguaje ensamblador, la combinacin de bits es representada por un nombre o un mnemnico al cual le corresponde la accin de la instruccin. Por ejemplo la instruccin del 8051 que suma el contenido del registro R7 con el Acumulador A es representada por:
00101111B 2FH.
En ensamblador ADD A, R7
Esta representacin es llamada Lenguaje Maquina debido a que esta representacin es la que utiliza el Microprocesador. Esta instruccin tiene dos campos distintos, estos campos son la operacin y el registro fuente, como se muestra en las tablas de instrucciones. A continuacin se estudiarn los modos de direccionamiento y el set de instrucciones agrupado por especialidades de la siguiente manera: Instrucciones aritmticas. Instrucciones lgicas. Instrucciones para la transferencia de datos en: a) RAM interna. b) RAM externa. Instrucciones para el tratamiento de tablas. Instrucciones Booleanas. Instrucciones de salto.
direccin de 8 bits. Slo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se pueden direccionar de esta forma. Ejemplo: ADD A, 4CH es decir, suma el contenido del acumulador con el contenido de la posicin de memoria (4CH): A<-- (A)+(4C) Nota: Un registro o nmero entre parntesis se refiere al contenido. As (A) es el contenido del acumulador. (4C) es el contenido de la posicin de memoria 4C. ADD A, 7FH ;El acumulador es sumado al dato que se encuentra en la direccin 7FH de la Ram interna y el resultado ser almacenado en el acumulador. MOV A, 2EH ; El Acumulador es cargado con el dato que se encuentra en la direccin 2EH de la memoria RAM interna.
MOV
3DH, 4EH
Direccionamiento Indirecto: La instruccin especfica un registro que contiene la direccin del operando. Tanto la
memoria RAM interna, como la externa se pueden direccionar indirectamente. Los registros para direccionar sobre el mapa de 8 bits son el R0 y R1 del banco de registros seleccionado, o el Stack Pointer. El registro para direccionar sobre 16 bits slo puede ser el DPTR. Ejemplo: ADD A, @R0 ; As, si (R0)=4CH la operacin ser: A<--(A)+(4C) (@) es el indicador del direccionamiento indirecto. MOV A, @R0 El Acumulador es cargado con el dato que se encuentra en la direccin apuntada por RO.
MOVX A, @DPTR; El Acumulador es cargado, con el dato que se encuentra en la direccin apuntada por el DPTR.
Direccionamiento por Registro Los Microcontroladores 8751, contienen cuatro bancos seleccionados por los bit 3 y 4
del PSW, y cada banco de registros tiene ocho registros del R0 al R7. El propio cdigo de operacin de la instruccin especifica con qu registro se opera; es decir, cuando la instruccin es ejecutada se accede a uno de los 8 registros del banco seleccionado y en la mayora de los casos son ms rpidas. Ejemplo: MOV Rn,A Cdigo: 1111 1 r r r
Operacin: (Rn) (A) Dependiendo del registro implicado el cdigo de instruccin tomar distintos valores. As
MOV Ro,A 1111 1000B = F8H MOV R1,A 1111 1001B = F9H MOV R2,A 1111 1010B = FAH MOV R7,A 1111 1111B = FFH Otro ejemplo: MOV Rn, #data Cdigo: 0111 1 r r r
Direccionamiento Implcito. En estas instrucciones se especifica, implcitamente, el registro sobre el que van a
operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando por que est implcito en el cdigo de operacin. Ejemplo: INC A; A (A) + 1 INC DPTR; Incrementa el contenido del acumulador: Incrementa puntero de datos;
DPTR (DPTR) + 1
Direccionamiento Inmediato Ejemplo: MOV A, #255 ; Carga en el acumulador el nmero decimal 255.
Generalmente se expresan en hexadecimal: MOV A, #0FFH o en binario: MOV A, #11111111B MOV A, #64H ADD A, #120 ;El acumulador es cargado con el dato 64H inmediatamente. ;El acumulador es sumado al nmero decimal 120 y el resultado ;se almacena en el acumulador. MOV DPTR, #1245H ;El DPTR es cargado con el dato 1245H en forma inmediata.
Direccionamiento Indexado Este direccionamiento slo es posible en la memoria de programas y slo permite la
lectura. Es utilizado para la lectura de tablas. Un registro base de 16 bits (el DPTR o el
Contador del Programa) apunta a la base de la tabla y el contenido del acumulador es el offset que permite acceder a la lectura de esa posicin de la tabla. MOVC A, @A+DPTR ;Mueve una constante que se encuentra en la, memoria del programa. El Acumulador es, cargado con el dato que se encuentra apuntado por la direccin formada por la suma del Acumulador A y el Apuntador de Datos. MOVC A,@A+PC; El Acumulador es cargado con dato que se encuentra, en la direccin formada por la suma del mismo Acumulador A y el Contador del Programa (PC).
Por ejemplo, la instruccin INC A (figura 3.1 A) tiene 1 de byte de instruccin y requiere 1 ciclo mquina, la instruccin INC DPTR, tambin, de 1 byte de instruccin requiere de 2 ciclos mquina (figura 3.1C) y la instruccin MUL AB requiere de 4 ciclos mquina para su total ejecucin y ocupa 1 byte en la memoria. b) El nmero de bytes Por ejemplo, la instruccin MOV A, # data tiene 2 bytes de instruccin y requiere de 1 ciclo mquina (figura 3.1B). En cambio la instruccin MOV direct, # data al constar de 3 bytes necesita de 2 ciclos mquina. Esto no ocurre siempre, es decir, a ms bytes ms ciclos mquina, como puede verse en la figura 3.1 B correspondiente a la instruccin, MOV A, # data y en la figura 3.1D MOVX A,@Ri. La primera instruccin tiene 2 bytes y la segunda slo 1, en cambio la primera requiere 1 ciclo mquina y la segunda 2. Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento del nmero de bytes y ciclo de instruccin se ha editado la tabla 4.5 con el set completo de instrucciones.
Cabe destacar tambin en la figura 3.1 que en cada ciclo mquina se producen 2 accesos a la memoria. El primero, si es comienzo de ciclo de instruccin, siempre leer el cdigo de operacin, el segundo que normalmente se descarta. Se utiliza para leer el segundo byte, operando de la instruccin, como ocurre en la figura 3.1B.
OPERACIN DE ESCRITURA EN LOS PUERTOS DE LOS Microcontrolador La operacin de escritura, utilizando los puertos del Micro, puede ser realizada por cualquiera de ellos; no obstante, el puerto P0 es el que presenta una mayor cargabilidad, permitiendo comandar ocho cargas TTL-LS, mientras que los otros tres permiten cuatro cargas TTL-LS. En la ejecucin de una instruccin que cambia el valor del latch del puerto, el nuevo valor llega al latch durante el estado 6, fase 2 del final del ciclo de instruccin, segn indica la Figura 1.8
Figura 1.14
Antes de comenzar con el estudio y comprobacin de los puertos de E/S, se muestra la interface para la conexin de los puertos a los dispositivos de salida, que en un principio pueden ser unos simples LED (Figura 1.15). Para controlar cargas de mayor consumo de energa, como rels, se recomienda utilizar, entre el puerto y la carga, drivers no inversores, como el ULN 2003, e inversores, como el ULN 2803, que tienen una cargabilidad de 500 mA y soportan hasta 50v.
Figura 1.15
Por esto la activacin de estas seales depende del formato de la instruccin. Para la operacin de ESCRITURA en el puerto, la instruccin ms habitual es la siguiente: MOV PX, <DATO> ; PX <DATO>X toma valores 0, 1, 2 y 3 segn el puerto.
En las tablas simplificadas tambin se indica el posible flag (C= C arry, OV= overflow, AC= Auxiliar Carry) afectado por la instruccin segn el siguiente cdigo:
No es afectado.................................... S es afectado...................................... Afectado ponindolo a ...................... Afectado ponindolo a........................ X 0 1
En algunas tablas no son afectados los flags, y esto se indica con un mensaje en la parte inferior de las mismas.
Los tiempos de ejecucin Se han tomado utilizando como referencia una frecuencia de reloj de 12 MHz. INSTRUCCIONES ARITMETICAS En la tabla 4.2. Se muestra el men de las instrucciones aritmticas. Se indican en la tabla los modos de direccionamiento que permite la instruccin y los flags afectados. Los tiempos de ejecucin que se indican en la tabla estn evaluados sobre una frecuencia de reloj de 12 MHz.
Tabla 4.2
=Si
=No
Al leer dicha tabla se observa que: Se puede incrementar o decrementar un byte en la memoria de datos interna sin la intervencin del acumulador. Una de las instrucciones INC opera sobre los 16 bits del puntero de datos (DPTR). La instruccin MUL AB multiplica el contenido del acumulador con el dato situado en el registro B y el producto, en formato 16 bits, aparece en los registros Acumulador y B (Sobreescribe a los operandos). La instruccin DIV AB divide el contenido del acumulador con el dato contenido en B, apareciendo el resultado, cociente, en el acumulador y el resto en el registro B. Ejemplo: A = 5FH
DIV AB
B = 0AH 1001 A
1010
La instruccin DA A justa el resultado en binario puro producido por las instrucciones ADD y ADDC a formato BCD. Esta instruccin no convierte el contenido del acumulador en BCD, sino que hace ajuste BCD de la suma (resultado), por lo tanto, esta instruccin debe ir inmediatamente despus de la instruccin ADD o ADDC.
Esta es, de forma simplificada, la operacin que realiza: Si Entonces Y si Entonces [ [(A3-0 )> 9] * OR * [(AC) = 1] ] (A3-0) (A3-0) + 6 [[(A7-4) > 9] * OR.* [(C)= 1]] (A7-4 ) (A7-4) + 6
INSTRUCCIONES LOGICAS
La tabla 4.3 muestra la lista de instrucciones lgicas y los modelos de direccionamiento que permiten as como los flags afectados. La duracin de ejecucin de 1 2 microsegundos considerando un cristal de 12 MHz. Las primeras instrucciones corresponden a las operaciones AND, OR, EXOR y NOT.
Ejemplo: ANL <byte> , # 3F Si <byte> = (3A) = 0011 1010 # 3F = 0000 1111 0000 1010 = 0AH (<byte> se refiere, en este caso, a una posicin de memoria.)
Nemnico Operacin Modos de direccionamiento Dir ANL A,<byte> ANL <byte>,A ANL <byte>,#data ORL A,<byte> ORL <byte>, A ORL <byte>. # data XRL A,<byte> A=A.AND.<byte> <byte>=<byte>.A <byte>=<byte>.And. A=A.OR. <byte> <byte>=<byte>.OR.A <byte>=<byte>.OR.# data A =A.XOR.<byte> X X X X X X X X X X X X X Ind X Reg X Imm X Tiempo de Ejecucin s 1 1 2 1 1 2 1 Flag afectados C OV AC
<byte>=<byte> .XOR. A <byte>=<byte> .XOR. #data A=00H A=.NOT.A Rotate ACC Left 1 bit Rotate left through Carry Rotate ACC Right 1 bit Rotate Right through Carry Swap Nibbles in A
X X Accumulator only Accumulator only Accumulator only Accumulator only Accumulator only Accumulator only Accumulator only Tabla 4.3
1 2 1 1 1 1 1 1 1 X X
RLC A RR A
=No
Continuando con el set de instrucciones, aparecen instrucciones de manipulacin de la informacin, como las instrucciones de Rotacin y de intercambio (SWAP). Las instrucciones de Rotacin RL y RR A desplazan el acumulador 1 bit a la izquierda y derecha, respectivamente, sin afectar al bit de acarreo.
b7
ACC
b0
Ejemplo: Rotacin a la izquierda (Left) (A) = 0C5H=1100 0101 B (antes de ejecutarla) RL A (A) = 8BH= 1000 1011B (despus)
Las instrucciones de Rotacin RLC A y RRC A desplazan el contenido del acumulador implicando al bit de acarreo.
B7
ACC
B0
La instruccin SWAP A intercambia los nibbles en el acumulador. Generalmente se utiliza en las manipulaciones de nmeros en BCD.
Ejemplo: (A) SWAP A A 0011 0000 (despus) = 3H = 0000 0011B (antes de la operacin)
DEFSEG BIT4, ABSOLUTE SEG BIT4 ORG 0H START: MOV SWAP MOV AJMP END En la lnea 1, se hace la lectura del Puerto P0 y su contenido pasa al acumulador, En la lnea 2, se intercambian los nibbles. En la lnea 3, el contenido del acumulador se carga en el puerto P0, con lo que la lectura del nibbles bajo pasar al nivel alto del puerto P0, y viceversa. La lnea 4 es un salto incondicional al comienzo del programa. A,P0 A P0,A START
INSTRUCCIONES DE TRANSFERENCIA DE DATOS Se consideran tres modalidades, segn la transferencia se realice sobre:
4.7.1. Movimiento de datos sobre la RAM interna En la tabla 4.4 se muestra la tabla de instrucciones disponibles para mover datos dentro de los espacios de memoria RAM interna, considerando los distintos direccionamiento para cada una de las instrucciones
Tabla 4.4
Modos de direc.
Nemnico MOV A,<src> MOV <dest>, A MOV <dest>, <src> MOV DPTR, #data 16 A=<src> <dest> = A <dest> = <src> DPTR= 16-bit immediate constant. INC SP : MOV @SP, <src> MOV <dest>, @SP :DEC SP ACC and <byte> exchange data ACC and @ Ri exachange low nibbles X X X X X X Operacin Dir X X X Ind Reg Imm X X X X X X X X X
1 1 2 2 2 2 1 1
XCHD A, @Ri
No son afectados los flags. X = S =No La instruccin MOV <dest>, <src> permite transferir datos entre alguna de las dos RAM interna o el espacio de localizacin del SRF (referencia Figura 2.8) Este tipo de instruccin permite la transferencia sin el concurso del acumulador. <dest> = <destino> <src> = <fuente>
Ejemplo: Antes de ejecutar la instruccin: (3A)= 35H : (3D) = 78H MOV 3AH, 3DH Despus de ejecutarla: (3A)= 78H : (3D) = 78H La instruccin MOV DPTR.# data 16 bits, permite transferir datos de 16 bits para inicializar el DPTR (Data pointer = puntero de datos) en el tratamiento de tablas en la memoria de programas o para acceder a los datos de la memoria externa.
La instruccin PUSH <src> acta incrementando el SP (stack pointer = puntero de la pila) y copiando el dato dentro de la pila. La instruccin POP <dest> acta decrementando el SP y reponiendo el dato en su registro. La pila est situada dentro de la RAM interna, por defecto en el banco de registros 1 (vase figura 2.11), pero puede posicionarse en el rea SCRATCH PAD, como se ha indicado en el captulo anterior.
En
resumen,
stas
son
las
operaciones
que
realiza
la
unidad
de
control
del
microcontrolador. PUSH <src> (SP) (SP) +1 ((SP)) <src> POP <dest> <dest> ((SP)) (SP) (SP) 1
La instruccin XCH A,<bite>, intercambia los datos del acumulador y del byte direccionando. La instruccin XCHD A,@Ri es similar a la anterior, pero slo implica en el intercambio el nibble bajo; es una instruccin especializada en la manipulacin de datos en el cdigo BCD.
Ejemplos: Antes de ejecutar la instruccin: (A)= 37H y (2D) = 23H XCH A, 2DH Despus de ejecutarla: (A) = 23H y (2D) = 37H Antes de ejecutar la instruccin: XCHD A, @R0 (R0) = 2DH = 37H y (A) = 23H Despus de ejecutarla: (A) = 27H y (2D) = 33H
INSTRUCCIONES BOOLEANAS
La familia de microcontroladores 51 y concretamente los microcontroladores
8052/8051 tienen un procesador booleano incluido en el chip. Estos microcontroladores poseen dos reas que permiten el direccionamiento <bit a bit>: Una corresponde al segmento de RAM interna de direccin comprendida entre la posmem 20 a 2FH, en total 128 bits (figura 2 .10), y la otra corresponde a los registros marcados con asterisco en el area de SFR.
El conjunto de instrucciones que permiten este tipo de procesos, tan interesante para las aplicaciones industriales, se encuentran relacionado en la siguiente tabla
Nemnico ANL C, Bit ANL C./bit ORL C.bit ORL C./bit MOV C.bit MOV bit.C CLR C CLR bit SETB C SETB bit CPL C CPL bit JC rel Operacin C = C . AND. Bit C= C. AND. NOT . BIT C=C .OR.bit C=C .OR..NOT.bit C = bit bit = C C=0 bit = 0 C=1 Bit = 1 C = .NOT.C Bit = .NOT. bit Jump jf C = 1 Jump if C =0 Jump if bit = 1 Jump if bit = 0 Jump if bit =1; CLR BIT = No Tabla 4.8 Tiempo de ejecucin (us) 2 2 2 2 1 2 1 1 1 1 1 1 2 2 2 2 2 X 1 C X X X X X X 0 OV AC
JNC rel JB bit. rel JNB bit. rel JBC bit. rel X =SI:
Las instrucciones que aparecen en las tablas son: MOVE, SET, CLEAR, NOT, OR y AND. Se observa cmo en casi todas las instrucciones se hace referencia al flag Carry (C). Se podra decir que cumple todas las caractersticas que tiene el acumulador en el procesamiento de palabras. El flag Carry se direcciona directamente dentro de la palabra de estado PSW, en la posicin <<bit7>>.
B7 C
b5 F0
b0
Todos los bits del PSW son direccionables bit a bit, como todos los registros sealados del SRF. Es importante resear la presencia del flag F0 (b5 del PSW) de propsito general, disponible como flag del usuario. Por qu no u tilizarlo como indicador, en las operaciones aritmticas de signo (flag N)? Comentario aparte exige el tratamiento de las instrucciones booleanas de salto. Hay instrucciones que producen el salto cuando el bit direccionado est en estado <<1>>, como son las instrucciones JC,JB y JBC; tambin estn las que producen el salto cuando el bit direccionado est puesto <<0>>, como son las instrucciones JNC, y JNB. JBC Produce el
salto si el bit direccionado es <<1>> y pone a <<0>>este bit, siendo la nica instruccin que detecta y pone a <<0>> el bit direccionado. Secuencias de operaciones: JC rel (PC) (PC) +2 Si (C) = 1 Entonces (PC) (PC) + rel JB bit, rel --------------------(PC) (PC) + 3 Si (bit) = 1 Entonces (PC) (PC) + rel Ejemplos: A) poner el Carry a set (1) si el bit0 del puerto 1 es <<1>> (P1,0 = 1), el bit7 del acumulador es <<1>> (A.7=1) y el flag OV = 0. Programa: ; Carga el Carry (c) con el bit0 del puerto 1. ; C (P1.0) ANL C, A . 7 ; Operacin AND con el Carry (C ) y el bit7 ; del acumulador, es decir: C ( C ). AND .(A.7) ANL C,/OV ; Operacin AND con el Carry ( C ) y el valor ; complementado del flag de overflow (OV) ; del registro PSW. C (C) .AND./NOT.OV B) Realizar la operacin EXOR bit a bit, entre el b0 del puerto 0 (P0.0) y el b1 del puerto 1 (p1.1). depositando el resultado en el b7 del puerto2. Para realizar la operacin EXOR, el usuario debe crear un algoritmo, puesto que la instruccin EXOR no la tienen implementada los microcontroladores de la familia 51. La operacin a realizarse es: P2.7 P0.0 .EXOR. P1.1 Programa: MOV C,P0.0 ;Carga el bit0 del puerto P0 en el flag Carry ; C (P0.0) JNC rel (PC) (PC) + 2 Si (C) = 0 entonces (PC) (PC) + rel JNB bit, rel ---------------------(PC) (PC) + 3; Si (bit) = 0 Entonces (PC) (PC) + rel JBC bit, rel ---------------------(PC) (PC) + 3; Si (bit) = 1 Entonces (bit) 0 (PC) (PC) + rel
MOV C, P1. 0
SALTA:
;Si p1.1 =0. C contiene el resultado ; correcto y entonces salta; pero si P1.1=1 ;el complemento de C es el resultado correcto. ; Complementa C. ;El contenido del Carry (C) lo almacena en ; el bit7 del puerto P2. ;P7.2 (C)
La direccin del destino del salto, en la memoria de programa, viene especificada, cuando el programa est escrito en Ensamblador, por una etiqueta. As, en el ejemplo anterior, la etiqueta (SALTA:) Indica el origen y el destino del salto. Una vez ensamblado el programa del usuario, la direccin del salto se convierte en un nmero (OFF-SET) del tamao de un byte, que representa una direccin relativa, representada en el sistema de numeracin binario en complemento a dos. El rango del salto (operando de la instruccin) puede estar comprendido entre 128 y127 bytes. Si l operando es positivo, el salto es adelante (direcciones crecientes de memoria); si en negativo, el salto es atrs (direcciones decrecientes de memoria).
DEFSEG ROTAR,ABSOLUTE SEG ROTA ORG 0 MOV A,#00H ;Limpia Acumulador SETB C RLC A MOV P0,A CALL RETARDO JNB ACC.7,SALTO1 RRC A MOV P0,A CALL RETARDO JNB ACC.0, SALTO2 JMP SALTO1 NOP MOV R1,#40H MOV R2,#0FFH DJNZ R2,$ DJNZ R1,SALTO3 RET
SALTO1:
SALTO2:
RETARDO: SALTO3:
La tabla 3.9 muestra la lista resumida de los saltos incondicionales. Aunque slo figure la instruccin <<JMP addr>>, de hecho hay tres tipos: SJMP. LMP, y AJMP, que difieren en el formato de la direccin de salto. Tabla 3.9 Nemnico JMP addr JMP @A + DPTR CALL addr RET RETI NOP No son afectados las banderas. Operacin Jump to addr Jump to A + DPTR Call subroutine at addr Return from subroutine Return from interrupt No operation Tiempo de ejecucin (us) 2 2 2 2 2 1
SJMP rel : (short jump). La direccin destino del salto viene dada por un <<offset relativo>>, igual que en las instrucciones de salto booleanas. La instruccin tiene dos bytes, correspondientes al cdigo de operacin y al byte de offset relativo. El rango del salto est limitado a 128 y + 127 byte relativos. al primer byte siguiente a la instruccin de salto. (PC) (PC) +2 CPC) (PC) + LJMP addr 16: ( Long jump). La direccin destino del salto viene dad por una constante de 16 bits. La instruccin est formada por 3 bytes, 1 byte para el cdigo de operacin y 2 para la direccin del salto. Por tanto, la direccin de destino est ubicada dentro del rea de los 64K de la memoria de programa. PC addr 16 AJMP addr 11: (Absolute jump). La direccin destino del salto viene dada por una constante de 11 bits. La instruccin tiene 2 bytes, uno para el cdigo de operacin que tambin contiene en s misma 3 de los 11 bits de direcciones, y otro byte que contiene los 8 bits bajos de la direccin de destino. El cdigo de la instruccin y el operando es : a10 a9 a8 0 0 0 0 1 A7 a6 a5 a4 A3 a2 a1 a0
CODIGO DE OPERACIN
OPERANDO
Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2 K bytes referenciado respecto a la siguiente instruccin a la del salto. PC (PC) + 2 (PC 10-0) direccin de la pgina
En cualquier caso, el programador especifica la direccin de destino, bien como una etiqueta o como una direccin constante de 16 bits, en el programa escrito en lenguaje ensamblador. Este se encarga de darle el destino. En el formato correcto, segn el cdigo de operacin. Si este formato no soporta la distancia del salto. Aparecer un mensaje como ste << Destination out of range>>. Que nos previene del error. JMP @A+DPTR: Se trata de una instruccin de salto indirecto, suma el byte contenido en el acumulador con los 16 bits del puntero de datos (DPTR) y carga el resultado de la suma en el contador de programa (PC). Esta ser la direccin para la subsiguiente bsqueda de la instruccin. Ejemplo: Se trata de establecer cinco caminos de ramificacin del programa, dependiendo de que el acumulador tome valores comprendidos entre 0 y 4. Programa: DPTR,# TABLA_ SALTO ;Se carga el DPTR con la direccin de la tabla de saltos. ; Se carga el acumulador con la variable ndice (INDI). ; 0 <INDI< 4. RL A ;El valor cargado sufre un desplazamiento de un bit ;a la izquierda (multiplica por 2 el contenido del acumulador). JMP @A +DPTR ;Se efecta la suma: PC (A) + (DPTR) ; y se produce el salto a otra instruccin ; de salto que a su vez saltar al ; subprograma a ejecutar. ---------------------------------INDI: AJMP SALTO0 AJMP SALTO1 AJMP SALTO2 AJMP SALTO3 AJMP SALTO4 La instruccin RL A convierte la variable INDI (valor comprendido entre 0 y 4) en un nmero par de rango entre 0 y 8 para salvar, en el salto, los datos bytes de longitud que tiene cada entrada de salto, AJMP SALTO0,AJMP SALTO 1... _ Siguiendo con las instrucciones incondicionales, de la tabla 4.3 sta muestra la instruccin CALL addr que tiene 2 formatos, LCALL y ACALL, que difiere en la forma en la que la CPU implementa la direccin donde se encuentra la subrutina. Nota: CALL es el nombre genrico con que el programador se refiere a estas instrucciones de salto, y que se traducen en una <<llamada>> (generalmente suelen producirse varias MOV
MOV A, INDI
llamadas desde el programa principal. De ah su inters por el ahorro de memoria para la mquina y de trabajo para el progamador) a un subprograma (subrutina). Que en s mismo tiene su identidad para realizar una tarea definida.
LCALL addr 16 : utiliza un formato de 16 bits para direccionar la subrutina y esa rea de direccionamiento es el mximo de 64 Kbytes de la memoria de programas. Secuencia de operaciones: (PC) (PC) + 3 (SP) (SP) + 1 ((SP)) (PC 7-0 ) (SP) (SP) + 1 ((SP)) (PC15-8 ) (PC) addr15-0
ACALL addr 11: utiliza un formato de direccionamiento de 11 bits, por lo que la subrutina debe estar dentro del rea de los 2 Kbytes, a partir de la siguiente instruccin. Secuencia de operaciones: (PC) (PC) +2 (SP) (SP) + 1 ((SP)) (PC7-0 ) (SP) (SP) + 1 ((SP)) (PC15-8) (PC10-0) direccin de la pgina Lo mismo que se indic en los saltos incondicionales, el programador cuando trabaja en ensamblador slo debe preocuparse de colocar l a etiqueta; el programador ensamblador determiner la longitud del salto y el formato que debe dar al cdigo de instruccin segn la longitud del salto.
RET: Las subrutinas terminan su ejecucin con la instruccin RET, que es la instruccin que indica la vuelta al programa principal, justo en la direccin de memoria de la instruccin siguiente a la instruccin CALL. Secuencia de operaciones: (PC15-8) ((SP)) (SP) (SP) 1 (PC7-0) ((SP)) (SP) (SP) 1
RETI: Utilizada para retornar de las rutinas del servicio de interrupciones. Las interrupciones se estudian de forma especial en el capitulo 10.
Secuencias de operaciones: (PC15-8) ((SP)) (SP) (SP) 1 (PC7-0) ((SP)) (SP) (SP) 1 4.2.2 INSTRUCCIONES DE SALTO CONDICIONAL La tabla 3.10 muestra la lista de las instrucciones de salto condicional. Estas instrucciones son las que van a permitir al microcontrolador tomar decisiones (siguiendo secuencialmente una parte del programa u otra) ante una propuesta binaria. Que en el lenguaje coloquial se contesta c on una afirmacin o negacin 1 propuesta de bifurcacin de la secuencia del programa se halla implcita dentro del cdigo de operacin y es el operando el que seala la direccin del salto en el formato de <<offset relativo>>, por lo que la distancia del salto est limitada a 128 y +127 bytes referida a la instruccin siguiente a la del salto condicional. Trabajando con el programa ensamblador es suficiente sealar con una etiqueta la direccin del salto o con una constante de 16 bits.
Nemnico Operacin Modos de direccionamiento Dir JZ rel JNZ rel DJNZ <byte>,rel CJNE A,<byte>,rel CJNE <byte>,#data,rel Jump if A=0 Jump if A<>0 Decrement and jump if not zero Jump if A<> <byte> Jump if <byte><.> #data X X X X Ind Reg Imm Tiempo de Ejecucin s 2 2 2 X 2 2 X X Flag afectados C OV AC
=Si
=No
Nota: en la tabla 3.10 se sealara como posible operando <byte>, pudiendo ser <byte>: a) El acumulador. b) Los registros R0 a R7 con direccionamiento directo. Los registros R0 y R1 con direccionamiento indirecto.
JZ y JNZ: Salta si es cero y salta si no es cero. Para determinar si cumple las condiciones de las instrucciones JZ, y JNZ, la CPU no pasa revista al registro de estado como ocurre en otros
micros, sino que directamente el registro acumulador, pues este microcontrolador no tiene << flag cero >> en el registro de estado. Secuencias de operaciones: JZ rel (PC) (PC) + 2 Si (A) = 0 JNZ rel (PC) (PC) + 2 Si (A)<> 0 entonces (PC) (PC) + rel
Decrementa y salta si no es cero. Esta instruccin est especializada en lazos de control. Para que ejecute un lazo n veces se carga un <<contador>> con n y, cada vez que se
ejecute el contenido del lazo, el contador decrementa una unidad, saliendo del lazo cuando el contenido del contador sea cero. (PC)(PC) + 2 (<byte>) (<byte>) 1 Si (<byte>)> 0 o (<byte>)< 0
Entonces (PC) (PC) + rel Ejemlpo: Ejecutar el lazo 10 veces. MOV CONTADOR, # 10 LAZO: (comienzo del lazo) ------------------------------------------------( fin del lazo) DJNZ CONTADOR , LAZO CJNE: Compara y salta, si el resultado de la comparacin no es igual. En este caso hay dos formatos, segn la comparacin se haga con el acumulador o con un operando tipo <byte>, que puede ser: Con direccionamiento indirecto ( registros R0 y R1). Con direccionamiento directo ( registros R0 y R7 ) Instruciones que se van a ejecutar mientras CONTADOR sea distinto de <<cero>>.
Entonces (PC) (PC) + rel Si (A) < (<byte>) Entonces (C) 1 sino (C) 0 Ejemplo: Ejecuta las instrucciones que hay dentro del lazo hasta que la lectura del perifrico a travs del puerto 0 (P0), se corresponda con el valor de la posmen 7FH. MOV A, P0 LAZO: ------------------------------------CJNE A,7F, LAZO CASO 2. MODELO CJNE <byte>, # dato, salto relativo Otra aplicacin de estas instrucciones es la comp aracin <<mayor que>> y <<menor que>>. Si de los dos bytes del campo de operandos el primero es menor que el segundo, entonces e <<flag CARRY>> del PSW se pone a <<uno>>. Si el primero byte es mayor o igual que el segundo, entonces el <<flag CARRY>> es <<c ero>>. Estos y otros aspectos estn aclarados en el Apndice A. Secuencia de operaciones: Segn se trate de direccionamiento indirecto (registros R0 y R1 (@Ri) o
CJNE @Ri,# data, rel (PC) (PC) + 3 Si ((Ri)) <>data Entonces (PC) (PC) + rel Si ((Ri)) < data Entonces (C) 1 Si no (C) 0
CJNE Rn, # data, del (PC) (PC) + 3 Si (Rn)<>data Entonces (PC) (PC) + rel Si (Rn) < data Entonces (C) 1 Si no (C) 0
Seguidamente, y como resumen, se muestra el set de instrucciones de la familia 51 (tabla 3.11). Al comienzo de estas tablas se sealan las instrucciones que afectan a los flags del PSW, asi como unas notas sobre los smbolos utilizados en estas tablas, y a continuacin todas las instrucciones con todos los tipos de direccionamientos que admiten: por esta razn la lista aparece muy dilatada. 4.7.2 transferencia de datos sobre la RAM externa La tabla 4.5 muestra la lista de instrucciones sobre transferencia de datos que acceden a la memoria de datos. Slo se puede utilizar el direccionamiento indirecto con este grupo de instrucciones. Direccin con 8 bits 8 bits 16 bits 16 bits Nemnico MOVX A, @Ri MOVX @Ri,A MOVX A, @ DPTR MOVX @DPTR,A Operacin Read external RAM @ Ri Write external RAM @Ri Read external RAM @DPTR Write external RAM @DPTR
Tabla 3.5
No son afectadas las banderas. Conviene observar que para este tipo de acceso siempre interviene el acumulador como registro fuente o destino. El usuario debe escoger entre el tipo de instruccin MOVX A, @Ri o MOVX @Ri,A (siendo Ri, bien el registro R0 o R1 del banco de registros seleccionado), direccionando con 8 bits o bien utilizando un direccionamiento de 16 bits, usando el registro DPTR (MOVX A,@DPTR o MOVX @DPTR,A) y tener que sacrificar el puerto 2, cuando slo se va a utilizar un pequeo espacio de memoria RAM. Existe una solucin intermedia que permite direccionar slo unos pocos kbytes de RAM externa, pero obteniendo algunas lneas hbiles del puerto 2 como entradas y salidas (E/S). Esta es la solucin que se mostr en la figura 2.7 del capitulo2. De todas formas la solucin adecuada debe ser funcin de las caractersticas que necesita la aplicacin. Suponiendo, en principio, que la implementacin de la misma sobre la eleccin de los microcontoladores 8052/8051 sea la correcta. Las lneas de control de lectura y escritura, RD y WR (pines 16 Y 17), slo son utilizadas cuando se ejecutan las instrucciones MOVX; si no se va a utilizar memoria RAM externa, es obvio que se ganarn una lneas extras de E/S (figura 4.7) Ejemplo: Estudiar la secuencia de instrucciones. MOVX A, @R1 MOVX @R0,A
Antes : (R1) = F3H F3H 3AH MOVX A,@R1 ejecucin: A (F3H) Despus: (A) = 3AH 85H ? Antes : (A) = 3AH y (R0) = 85H MOVX @R0,A ejecucin: (R0) (A) R1 R0 F3H 85H Despus: (85h) = 3AH
Qu sucedera si se tuviera que implementar estas instrucciones en al zona de memoria por encima de la direccin 2000H? Es decir: Sustituida 85H ------------------- 2085H F3H------------------- 20F3H Se llegara a la conclusin de que no se podra procesar estas instrucciones, contando que los registros R0 y R1 no pueden direccionar por encima de la posicin de memoria FFH. Pero aqu es donde entran en juego las instrucciones MOVX con el DPTR como operando. La sustitucin, en el caso de tener que operar en el espacio de memoria comprendiendo entre 0000H y FFFFH. Sera: Sustituida MOVX A, @Ri -------------------- MOVX A, @DPTR MOVX @ Ri, A -------------------- MOVX @DPTR,A Recurdese que en la tabla 3.4 hay una instruccin que es: MOV DPTR, # data 16 Con la que se podra acceder a todo el mapa de memoria. 4.7.3 Memoria de programas para el tratamiento de tablas. La tabla 4.6 muestra las dos instrucciones disponibles para la lectura de tablas en la memoria de programas (independientemente del algoritmo que pueda crear el usuario con otras instrucciones), obsrvese que las tablas slo pueden ser ledas y no actualizadas. El nemnico es MOVC (Mover constante). Si la tabla accede a la memoria de programa externa, recordar que esta lectura es autorizada por la seal de control PSEN (pin 29). Obsrvese la figura 2.5 del captulo anterior.
Tabla 4.6 Nemnico MOVC A, @ A + DPTR MOVC A, @ A + PC Operacin Read pgm memory at (A + DPTR) Read pgm memory at (A + PC) Tiempo de ejecucin (s) 2 2
No son afectados los flags. La primera instruccin de la tabla permite la lectura en tablas con accesos no superiores a 256. El acceso deseado es cargado en el acumulador, y el data pointer (DPTR) Establece el puntero de comienzo de la tabla. La lectura es cargada dentro del registro acumulador. MOVC A, @A+DPTR A ((A) + (DPTR))
La segunda instruccin es similar a la primera, salvo que el program counter (PC) el que acta como indicador de la direccin base de la tabla. PC (PC) + 1 MOVC A, @A+PC A ((A) + (PC)) Se presenta esta instruccin dentro de una subrutina, estando la tabla de informacin despus de la instruccin de retorno de la subrutina (RET). Ejemplo: Se trata de demostrar el funcionamiento sobre una tabla de 4 datos. A la izquierda aparece el mapa de memoria del programa
90H 91H 92H 93H MOV #01H CALL Dire, rutina
INC A MOVC A, @A+PC RET 20H 21H 22H 23H MOV A, #01H CALL TABLA
TABLA:
Se pretende acceder inicialmente al DATO1, por esta razn se carga al acumulador con 01H, se salta a la rutina de tratamiento de la tabla. Ya en al rutina, se incrementa el acumulador, con lo que su valor ser: (A) ------ (A) +1
02H ------01H + 1 En la instruccin MOVC A, @A+PC el valor del acumulador es 02 y el PC apunta a la instruccin RET, por lo que la suma A2H + A4H, luego: A(A4H) (A) = 21H
PROCESO Se trata de controla el nivel de lquido de un depsito, utilizando tres sensores detectores de niveles A,B y C, Y DOS BOMBAS B1 Y B2 (Figura 5.9)
He aqu una descripcin del proceso, desde el punto de vista de su relacin con el mundo exterior, segn los tres tipos de seales principales: Entrada de informacin: SENSORES. Actuacin sobre los elementos finales: ACTUADORES. Sealizacin del proceso: INDICADORES.
1. Sensores (entradas) El sensor A seala el nivel mnimo de agua. Por debajo de este nivel, se indicar <<VACIO>> en el cuadro de INDICADORES. El sensor B seala el nivel ptimo y cuando se alcance se indicar <<LLENO>>. El sensor C seala el nivel peligroso e indica <<REBOSE>>. Los sensores sern ledos por el microcontrolador a travs del Puerto P3 P3.0 A P3.1 B P3.2 C 2. ACTUADORES (salidas) Cuando ninguno de los sensores estn mojados, se entiende que el depsito est vaco y los actuadores activarn las dos bombas B1 y B2 (P1.0 y P1.1). Cuando el nivel del lquido toque la sonda B, se desactivar la bomba B2 (P1,00).quedando la bomba B1 activada en modo mantenimiento. Si el nivel de lquido moja la sonda C (rebose), se desactivar la bomba B1, quedando las dos bombas, de momento, fuera de servicio. 3. INDICADORES (salidas) La sealizacin utiliza el puerto P1. P1.2 VACIO P1.3 LLENO P1.4 REBOSE Y cuando se produce un fallo (mal funcionamiento) en las sondas de entrada. Por ejemplo, que el sensor B (P3.1) se active cuando el sensor A (P3.0) no lo est, se excita en el cuadro de indicadores de seal de ALARMA. P1.5 ALARMA La figura 5.10 muestra la disposicin de los actuadores, indicadores y sondas.
DEFSEG CONTROL, ABSOLUTE SEG CONTROL ORG 0H MOV DPTR,#0100H ;Inicializacin puntero de TABLA LEER: MOV A, P3 ;LEE puerto P 3 ANL A, #07H ;Enmascara MOVC A, @A+DPTR ; Direcciona y captura dato MOV P1, A ; Acta mandando los datos al P1 JMP LEER ORG 0100H DB 07H, 07H, 20H, 09H 20H, 20H, 20H, 10H END
Como se puede observar, el programa utiliza el direccionanmiento indexado para acceder a la informacin escrita previamente el la tabla de datos, situada en las posiciones de memoria comprendidas entre la 0100H y 0107H. El primer bloque del flujograma inicializa el puntero DPTR en la direccin de comienzo de la tabla de datos. El segundo bloque lee la informacin de las sondas a travs del Puerto P0. El tercer bloque enmascara la informacin del puerto P0, dejando solamente los tres primeros bits tiles de P0. El cuarto bloque direcciona a la posicin de memoria de la tabla relativa al contenido de las sondas (ACC) ms (suma aritmtica) el puerto DPTR. El contenido de esa posicin de memoria direccionada pasa al acumulador. Es decir, si el estado de las sondas seala A=1, B=1 y C=0 (03H), se realiza el siguiente acceso a la tabla de datos: A @A+DPTR, es decir, A (03H + 0100H) El contenido de la posmem 0103H para el acumulador. El quinto bloque escribe la informacin leda de la tabla en el Puerto P1. El contenido de la tabla, segn las directrices dictadas por el algoritmo de control de la planta, es el siguiente: 0100H 0101H 0102H 0103H 0104H 0105H 0106H 0107 ENTRADAS P3.2 P3.1 P3.0 C B A 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 07H 07H 20H 09H 20H 20H 20H 10H ; ; ; ; ; ; ; ; Activa B1-B2 y seala VACIO Activa B1-B2 y no seala VACIO Seala ALARMA Desactiva B2 y seala LLENO Seala ALARMA Seala ALARMA Seala ALARMA Seala y REBOSE SALIDAS P1.4 P1.3 RE LL 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0
P1.7 N.C 0 0 0 0 0 0 0 0
P1.6 N.C 0 0 0 0 0 0 0 0
P1.5 AL 0 0 1 0 1 1 1 0
P1.2 V 1 1 0 0 0 0 0 0
P1.1 B2 1 1 0 0 0 0 0 0
P1.0 B1 1 1 0 1 0 0 0 0
La funcin de este block de entradas es la de controlar internamente y externamente la transferencia de los datos y las palabras de control. Este block acepta entradas de control o direcciones desde el Microprocesador.
(CS)Chip Select: Una entrada baja en este pin habilita la comunicacin entre el 8255 y el Micro.
(RD)Read: Una entrada baja en este pin habilita el 8255 para leer datos del puerto especificado a la Computadora. (WR)Write: Una entrada baja en esta pin habilita al 8255 para escribir informacin del Micro a un puerto o al registro de control. (A0 y A1): Estas entradas de seal en unin con las seales (RD) y (WR) controlan la seleccin de uno de los tres puertos o del registro de control. Estas seales son normalmente conectadas a los bits menos significativos de del bus de direcciones (A0 y A1) del Microprocesador. RESET: Una entrada alta en este pin limpia el registro de control y todos los puertos son puestos en modo de entrada. OPERACIN BASICA DE LOS PINES A0, A1, RD y WR A1 0 0 1 0 0 1 1 X 1 X A0 0 1 0 0 1 0 1 X 1 X RD 0 0 0 1 1 1 1 X 0 1 WR 1 1 1 0 0 0 0 X 1 1 CS 0 0 0 0 0 0 0 1 0 0 OPERACIONES DE LECTURA Del Puerto A --> Al bus de Datos Del Puerto B --> Al bus de Datos Del Puerto C--> Al bus de Datos OPERACIONES DE ESCRITURA Del bus de Datos--> Al Puerto A Del bus de Datos--> Al puerto B Del bus de Datos--> Al puerto C Del bus de Datos-> Reg. de Control FUNCIONES DE 3 ESTADOS Bus de Datos--> 3 Estados. CONDICION ILEGAL. Bus de Datos --> 3 Estados TABLA 1. 6
PUERTO A, B Y C.
El 8255 contiene tres puertos de 8 bits, puerto (A, B y C). Todos cuentan con buffer en la entrada y salida y pueden ser configurados con variadas caractersticas de funcionamiento por medio de software pero cada uno tiene su propia personalidad por lo que el 8255 tiene mucha flexibilidad. PUERTO A: Cuenta con latch/buffer de 8 bit de salida y solamente latch de entrada. PUERTO B : Cuenta con un latch/buffer de 8 bit de entrada/salida. PUERTO C: Cuenta con un latch/buffer de salida y un buffer de entrada. Este puerto puede ser dividido en dos puertos de 4 bit.
MODO DE OPERACION 0
Esta forma de configuracin consta de operaciones de entrada y salida simples para cada uno de los tres puertos. No requiere seal de Handshaking por que los datos son simplemente escritos o ledos por el puerto especificado. DEFINICION FUNCIONAL DEL MODO 0 Dos puertos de 8-bit y dos puertos de 4 bit. Cualquier puerto puede ser configurado como entrada o salida. Todas las salidas cuentan con latch. Las entradas no tienen latch. 16 diferentes configuraciones de entrada/salida son posibles en este modo.
accin de lectura del puerto, lleva a IBF y a INTR a su estado inactivo hasta que haya un nuevo dato en el puerto.
El teclado es un excelente ejemplo de dispositivo de entrada mediante habilitacin. El decodificador del teclado elimina los rebotes de los interruptores de las teclas y produce una seal de habilitacin estroboscpica siempre que se oprima una tecla y su salida de datos contiene el cdigo ASCII.
EXHIBIDOR ALFANUMRICO
m 14
m 13
m 12
m 11
m 10
m 9
m 8
m 7
m 6
m 5
m 4
m 3
m 2
m 1
BD5 debe estar a 1, DB4 especifica el tamao del bus (4 8 bits), y el DB3 el numero de lneas del display. Se debe dar un retardo de 40S antes de enviar la siguiente instruccin. 2. Se limpia toda la memoria del display y se regresa el cursor a la posicin inicial. Cdigo RS R/W DB7 DB6 DB5 01H 0 0 0 0 0 Esta instruccin toma un tiempo de 1.64 mS. permanece fija con la entrada de los caracteres. Cdigo RS R/W DB7 DB6 DB5 06H 0 0 0 0 0 Esta instruccin toma un tiempo de 40 S. DB4 0 DB3 0 DB2 1 DB1 1 DB0 0 DB4 0 DB3 0 DB2 0 DB1 0 DB0 1
proximo carcter de entrada, se desactiva el parpadeo. Cdigo RS R/W DB7 DB6 DB5 0EH 0 0 0 0 0 Esta instruccin toma un tiempo de 40 S. DB4 0 DB3 1 DB2 1 DB1 1 DB0 0
5. A partir de aqu se puede comenzar a enviar los caracteres que se desean mostrar dejando un tiempo de 40S como mnimo y colocando RS=1. Por ejemplo se enviara la palabra TECNOLOGICO por lo tanto se escribir el siguiente cdigo ASCII. Primero el cdigo de la letra T CODIGO 54H RS 1 R/W 0 DB7 0 DB6 1 DB5 0 DB4 1 DB3 0 DB2 1 DB1 0 DB0 0
__
CODIGO 45H
RS 1
R/W 0
DB7 0
DB6 1
DB5 0
DB4 0
DB3 0
DB2 1
DB1 0
DB0 1
__
Y as las dems letras. CODIGO 43H RS 1 R/W 0 DB7 0 DB6 1 DB5 0 DB4 0 DB3 0 DB2 0 DB1 1 DB0 1
__
REGISTROS. El LCD tiene 2 registros de 8-bits, uno es el registro de instrucciones (IR) y otro el registro de datos (DR). Escribir en el registro IR. El IR almacena cdigo de instruccin para display clear y cursor shift, etc., y tambin para escribir una nueva direccin en el registro AC (Address Counter), que es el registro encargado de apuntar, tanto a la DD RAM (RAM de Datos del Display) como a la CG RAM (RAM Generador de Caracteres). Leer del IR. Permite la lectura del registro AC, del cual slo son vlidos los 7 bits de menos significativos DB0-DB6, el bit de mayor peso, DB7 informa del estado del Busy Flag o indicador del display Ocupado. Escritura en el DR.
Permite escribir en DD RAM o CG RAM donde se encuentre apuntando el registro AC. Leer del DR. RS 0 0 1 1 R/W 0 1 0 1 Operacin Escribir en IR:Borrar Display, etc., o modificar AC. Leer el IR: Leer el AC(DB0-6) y el Busy Flag (DB7). Escribir en DR: Escribir en DD RAM o CG RAM Leer el DR: Leer de DD RAM o CG RAM Tabla 1.2
Cuando se encuentra a 1 indica que el LCD est ocupado realizando operaciones internas y no puede aceptar nuevas instrucciones. Hay que esperar que el Busy Flag valga 0 para enviar la siguiente instruccin. Contador de Direccin (AC):
Indica la direccin donde sern ledos o escritos los datos sobre DD RAM o CG RAM. Este registro puede modificarse realizando una escritura en el IR. Adems, cuando se escriben o se leen datos en el DD RAM o CG RAM, el AC se incrementa o decrementa de manera automtica de acuerdo con el Modo de Entrada (Entry Mode Set). Ram de Datos del Display (DD RAM):
Tiene una capacidad de 80 bytes, 40 por cada lnea; lgicamente dependiendo del modelo slo 16,32,40 80 caracteres podrn ser visualizados a la vez, aunque desplazando (shift) el display podrn irse visualizando todos los caracteres escritos. Generador de caracteres en ROM (CG ROM):
Tiene definido 160 caracteres, en matrices de 5x7 puntos. Generador de caracteres en RAM (CG RAM):
Permite definir ocho caracteres, cuyos cdigos van desde el 00 al 08. TABLA DE COMANDOS DE CONTROL (INSTRUCCIONES) INSTRUCCION Clear display Return home Entry mode set Disp. on/off cont Cur o disp shift Funcion set Set CG ram addres Set DD ram addres Rd busy flag Wr dato to CG Rd dato from CG RS 0 0 0 0 0 0 0 0 0 1 1 R/ W 0 0 0 0 0 0 0 0 1 0 1 D7 0 0 0 0 0 0 0 1 BF D6 0 0 0 0 0 0 1 D5 0 0 0 0 0 1 D4 0 0 0 0 1 DL D3 D2 D1 D 0 1 * S B * * DESCRIPCIN
0 0 0 0 0 1 0 1 I/D 1 D C S/C R/L * N F * ACG ADD (Direccin del Cursor) AC (Address Counter) Escribir Datos Leer Datos Tabla 1.3
I/D=1: Increment (+1). D=1: Display ON C=1: Cursor ON. B=1: Blinking. S/C=1: Display shift. R/L=1: Shift to the rigth. DL =1: 8 bits. N = 1: 2 lneas.
I/D=0: Decrement (-1). D=0: Display OFF. C=0: Cursor OFF. S=1: Accomp anies display shift. S/C=0: Cursos move. R/L=0: Shift to the left. DL =0: 4 bits. N = 0: 1 lnea.
- Limpiar Display: Borra display, manda cursor al inicio, y pone el Modo de Entrada en Incrementar. DB7 0 DB6 0 DB5 0 DB4 0 DB3 0 DB2 0 DB1 0 DB0 1
- Cursor a posicin inicial. DB7 0 DB6 0 DB5 DB4 0 0 *No Importa. DB3 0 DB2 0 DB1 1 DB0 *
- MODO DE ENTRADA (ENTRY MODE SET) Establece las caractersticas de escritura de los datos. S=1. El display se desplaza al escribir un nuevo carcter. S=0. El disp. no se desplaza al escribir un nuevo carcter. I/D=1. Incremento automtico del registro AC al escribir. I/D=1. Decremento automtico del registro AC al escribir. DB7 0 DB6 0 DB5 0 DB4 0 DB3 0 DB2 0 DB1 I/D DB0 S
- CONTROL DEL DISPLAY. B=0. Blink OFF, no hay efecto de parpadeo del cursor. B=1. Blink ON, efecto de parpadeo del cursor rectangular. C=0. Cursor OFF, el cursor no se visualiza. C=1. Cursor ON, el cursor es visualizado. D=0. Display OFF, el display se apaga. D=1. Display ON, el display se enciende. DB7 0 DB6 0 DB5 0 DB4 0 DB3 1 DB2 D DB1 C DB0 B
S/C=0. El deslizamiento se aplica sobre el cursor. S/C=1. El deslizamiento se aplica sobre todo el display. DB7 0 DB6 0 DB5 0 DB4 1 DB3 S/C DB2 R/L DB1 * DB0 *
- Control para 4 o 8 bits. Cuando el LCD no se conecta al bus de datos de un microcontrolador o microprocesador de 8 bits, sino que lo hace a un micro de 4 bits, es posible indicarle al LCD que solamente vamos a utilizar los bits DB7, DB6, DB5 y DB4, para enviarle los datos, y que lo haremos enviando primero el nible alto, y a continuacin el nible bajo del dato. DL=0. Control con 4 bits. DL=1. Control con 8 bits. DB7 0 DB6 0 DB5 1 N=0. Una lnea. N=1. Dos lneas. DB4 DL DB3 N DB2 F DB1 * F=0. 5x7 dots. F=1. 5x10 dots. DB0 *
- Poner Direccin CG RAM El registro AC queda apuntando a la direccin indicada sobre la CG RAM. DB7 0 DB6 1 DB5 CG5 DB4 CG4 DB3 CG3 DB2 CG2 DB1 CG1 DB0 CG0
- Poner Direccin DD RAM. El registro AC queda apuntando a la direccin indicada sobre la DD RAM la cual corresponde a la direccin del cursor. DB7 1 DB6 DD6 DB5 DD5 DB4 DD4 DB3 DD3 DB2 DD2 DB1 DD1 DB0 DD0
Lectura del IR RS = 0 y R/W = 1. - Lectura de BF y AC. El dato recibido indica el contenido del registro AC, es decir, la direccin a donde est
apuntando, bien CG RAM o DD RAM, segn lo que hayamos seleccionado con anterioridad. Adems, en el bit de mayor peso se recibe el estado del Busy Flag, indicando si est ocupado o puede recibir un nuevo dato. DB7 BF DB6 AC6 DB5 AC5 DB4 AC4 DB3 AC3 DB2 AC2 DB1 AC1 DB0 AC0
- Escritura sobre CG RAM o DD RAM: DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
- Lectura desde CG RAM o DD RAM: DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
PROCEDIMIENTO PARA INICIALIZAR EL DISPLAY 1.- Primeramente se define el tipo de Microcontrolador al cual el display se va a conectar (8 4 Bits), y el nmero de lneas del display, por lo que primeramente se enva al display el numero 38H. CODIGO 38H RS 0 R/W 0 DB7 0 DB6 0 DB5 1 DB4 1 DB3 1 DB2 0 DB1 0 DB0 0
2.- Se prende la pantalla del display, se activa el cursor sealando la posicin del prximo caracter de entrada y se desactiva el parpadeo. CODIGO 0EH RS 0 R/W 0 DB7 0 DB6 0 DB5 0 DB4 0 DB3 1 DB2 1 DB1 1 DB0 0
3.- Se establece el movimiento del cursor hacia la derecha, la pantalla del display permanece fija con la entrada de los caracteres. CODIGO 06H RS 0 R/W 0 DB7 0 DB6 0 DB5 0 DB4 0 DB3 0 DB2 1 DB1 1 DB0 0
4.- A partir de aqu se pueden comenzar a enviar los caracteres que se desean exhibir dejando un tiempo entre cada uno de ellos de 40S. Mnimo, y con RS=1. Por ejemplo para enviar las letras T,E y C se escribe el siguiente cdigo ASCII. Primero el cdigo para la letra T CODIGO 54H RS 1 R/W 0 DB7 0 DB6 1 DB5 0 DB4 1 DB3 0 DB2 1 DB1 0 DB0 0
__
Ahora se enva el codigo de la letra E. CODIGO RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
45H
__
Y por ultimo el cdigo de la letra C. CODIGO 43H RS 1 R/W 0 DB7 0 DB6 1 DB5 0 DB4 0 DB3 0 DB2 0 DB1 1 DB0 1
__
T m m
E m
C m
N m
O m
L m
O m
G m
I m
C m
O m m m
BIBLIOGRAFIA
1. HITACHI DATABOOK.
Tabla 4.11. Instrucciones que afectan a las banderas. Notas sobre el significado de los operandos de las instrucciones que se describen a continuacin:
Rn..................... Registros R0-R7 del banco de registros seleccionado. Direct............... Direccin del dato de 8 bits de la memoria interna. Puede ser un dato de la RAM interna (0-127 para el 8051 o 0-225 para el 8052) o un registro del SFR (por ejemplo, puerto de E/S, registro de control, registro de estado (128-255). @Ri.................. Se refiere a los registros R0 y R1, que permiten el direccionamiento indirecto para acceder a los datos de 8 bits de la RAM interna (80-FFH) Solapada con el SFR para el 8052 y (000-7FH) para el 8052/8051. # data............... Operando constante de 8 bits # data 16.......... Operando constante de 16 bits. addr 16............. Direccin destino de 16 bits. Utilizada por las instrucciones de salto LCALL y LJMP para permitir el salto dentro del espacio de 64K bytes de la memoria de programas. addr 11........... Direccin destino 11 bits. Utilizada por las instrucciones de salto ACALL y AJMP para permitir el salto dentro de la pgina de 2Kbytes de la memoria de programas a partir del primer byte de la siguiente instruccin. Rel.................. Salto relativo en formato de 8 bits en complemento a 2. Utilizado por la instruccin SJMP y todos los saltos condicionales. El rango del salto (8 bits) est comprendido entre 128 a = 127 bytes a partir del primer byte de la siguiente instruccin. Bit................. Direccionamiento directo <<bit a bit>> dentro del rea de la memoria RAM interna y de los registros SFR que lo permiten. rrr................ En la columna de codificacin indirecta el registro implicado en las instruccin (Rn). As: R r r Registro 0 0 0 R0 0 0 1 R1 0 1 0 R2 1 1 1 R7 En la columna de codificacin indica el registro implica en la instruccin de direccionamiento indirecto (@Ri). As: i............ Registro 0 @R0 1 @R1
i.....................
Exclusive -OR indirect RAM to Accumulator Exclusive -OR immediate data to Accumulator Exclusive -OR Accumulator to direct byte Exclus ive -OR immediate data to direct byte Clear Acumulator Complement Accumulator Rotate Accumulator Left Rotate Accumulator Left through the Carry Rotate Accumulator Right Rotate Accumulator Right through the Carry Swap nibbles within the Accumulator
0110 0110 0110 0110 1111 1111 0010 0011 0000 0001 1100
011i 0110 0010 0011 0100 0111 0011 0011 0011 0011 0100 Immediate data Direct address Direct address Inmediate data
1 2 2 3 1 1 1 1 1 1 1
and jump if
Compare immediate to indirect and jump if Not Equale Decrement register and jump if Not Zero Dcrement direct byte and jump if Not Zero No operation
EL ENSAMBLADOR AVMAC51
El AVMAC51 es un programa, que acepta como entrada un archivo hecho en un editor de texto, con cdigo fuente en lenguaje ensamblador del 8751, el cual tiene una extensin .ASM
El AVMAC51 genera un archivo listado (FILE.PRN), y un archivo objeto (FILE.OBJ) en cdigo maquina. Opcionalmente puede generar un archivo con expansin de macros (.MXP) utilizando la operacin MACFILE (filename). Puede generarse un archivo CROSS- REFERENCE (FILE.XRF) usando la opcin XREF. EJEMPLOS: AVMAC51 file.asm AVMAC51 file.asm NOMACEVAL AVMAC51 file.asm NOPROCESS AVMAC51 file.asm ALLPUBLIC AVMAC51 file.asm XREF1 ; Lo procesa y lo ensambla. ; Lo ensambla nicamente. ; Lo preprocesa nicamente. ; Genera un .XRF
Donde one.obj, two.obj, tree.obj son archivos objeto previamente ensamblados y son incluidos en la librera llamada routines.lib.
EL ENCADNADOR AVLINK
El encadenador es un programa que acepta como entrada uno o varios mdulos objeto, y produce un solo modulo de salida, encadenado, con cdigo relocalizado y listo para ser cargado en memoria. El AVLINK entrega un archivo de salida en formato .HEX (INTEL), o
.MOT(MOTOROLA) .TEK(TEKT RONICS). As como un archivo .MAP el cual muestra las localidades de segmentos y smbolos. EJEMPLOS: AVLINK outfile=file.obj AVLINK outfile=one.obj, two.obj, rutinas.obj AVLINK outfile=file.obj OF=MOT ;genera un .SYM AVLINK outfile=infile.obj -SYMBOLS
El .XRF se genera ensamblando con la opcin XREF AVMAC51 file.asm XREF El .SYM se genera encadenando con la opcin SYMBOLS AVLINK fileout=file1.obj -SYMOLS El reporte se genera AVREF filename=fileout.sym,file1.xrf
*****
PSEUDO - OPS
*****
por el usuario), mientras "SEG" es colocado dentro de un segmento. Usted permanece en un segmento hasta que usted lo especifica (usando otro pseudo-op "SEG") que usted desea estar en un segmento diferente. DEFSEG nombre_del_segmento_1 SEG db nombre_del_segmento_1 1
permite el uso de la palabra "ORG" (origen del inicio de direccin absoluta) dentro del segmento. DEFSEG NOMBRE_SEGMENTO, ABSOLUTE SEG ORG db ORG db 4 3 200H NOMBRE_SEGMENTO 100H
El pseudo-op "ORG" puede ser ademas usado en un segmento relocalizado el cual tiene el atributo "START=", pero si el segmento reside completamente dentro de un
modulo. Si el "ORG" es usado en un segmento relocalizable, del tipo "START=" en mas de un modulo, entonces ese segmento debera ser OVERLAID". Note que usted puede usar opciones AVLINK en segmentos relocalizables, pero no en segemntos "ABSOLUTES" y eso lo deber advertir el encadenador (linker) si usted
sobreescribir segmentos relocalizables pero no si un segmento "ABSOLUTE" sobreescribe cualesquier otro segmento.
Desde que "SEG_RELOC" es relocalizable el DEFSEG segover, start=2F0H seg segover db 7 El atributo "OVERLAID" puede ser usado en mas de un modulo . . . DEFSEG segol, OVERLAID seg segol db 55H
Uso del atributo "CLASS=" . . . Usted puede asignar cualesquier atributo clase aplicable con la oracin "CLASS=" DEFSEG seg1code, CLASS=CODE SEG db seg1code 8
Usted pude asignar un segmento a la clase "DATA" . . . DEFSEG seg1data, CLASS=DATA SEG db seg1data 9
Algunos chips usan otras clases, por ocasiones la clase "PAGE0", con la cual coloca datos en pagina0 . . . ; ; ; DEFSEG segzero, CLASS=PAGE0 SEG db segzero 1
Note que cualquier CLASS aplicable a un chip tiene un nombre de segmento predefinido conocido para el ensamblador, por ejemplo: SEG db SEG db CODE 0AH DATA 0BH
Note que el campo de la direccin del file '.PRN' mostrara despus de la direccin: & -> Para un segmento definido por el usuario ' -> Para un segmento predefinido como CODE '' - > Para un segmento predefinido como DATA
@ -> (Si es aplicable) para un segmento predefinido PAGE0 * -> Para una etiqueta externa
Usted puede especificar la alineacin de un segmento, usando el atributo "ALIGN=", donde el valor deber ser una potencia de 2 -DEFSEG segalign, ALIGN=100H SEG db segalign 0DH
Usted puede adems especificar el tamao del bloc de un segmento, usando "BLOCK=" donde el valor deber ser una potencia de 2 -DEFSEG segblock, BLOCK=200H
SEG db
ops validos. Esos debern ser notados en las siguientes tres secciones.) USO DE LOS pseudo-ops DS DB, DW, ... DS es usado para reservar un cierto numero de espacio de BYTES sin inicializar . . . DS 8
DW define un numero de 16-bit, DW 123H DW puede definir mas de una palabra... DW DEFW DEFW 123H, 456H, 789H 5 100H, 256
FDB es como DW, excepto que adems permite dos o ms comas consecutivas previendo un valor cero entre cada dos comas . . . FDB 1,2,,3,,,4
DB es adems usado para textos (strings) de cdigo ASCII . . . DB ; "hola, Tecnolgico" DEFB y DEFM son sinnimos de DB... DEFB DEFM 1, 2, "hello" 'world', 3 que adems permite dos o ms comas
consecutivas, previendo valor de cero entre cada dos comas . . . FCB 5,,6,7 siguiente carcter
FCC es un pseudo para definir un texto con dos sintaxis validas. En el primero un numero decimal seguido por una coma, que indica que esta iniciando el
(diferente de espacio o tab), un texto del numero indicado de caracteres ser tomado. FCC 4,string
FCC
cuando sea menor y se le agregaran espacios (caracteres) cuando sea mayor; el numero mas alto permitido es 132. En la segunda sintaxis permitida del procesado. FCC FCC FCC FCC /monday/ zmondayz 7monday7 &monday& primer carcter despus del pseudo-op FCC es considerada el limite del texto; hasta que ese carcter sea visto, el texto continuara siendo
Uso de EQU y TEQ... Usted puede igualar un smbolo con un valor numrico usando las directivas EQU y TEQ. El psuedo-op EQU simplemente asigna un valor a una etiqueta, mientras que TEQ permite adems que la misma etiqueta sea redefinida tiempo despus. labelname labeltwo labeltwo labeltwo labeltwo labeltwo EQU TEQ TEQ SET ASET DEFL 4 5 5 6 2 3
Note que cualquier etiqueta "DEBERA" iniciar en la columna 1. Uso de PUBLIC y EXTERN... Usted puede usar usa smbolos atraves de mdulos (ej., programas en archivos fuentes separados) usando los pseudo-ops PUBLIC y EXTERN. El pseudo-op PUBLIC es usado para indicar un smbolo el cual es definido en el presente modulo para el cual ser tomado como referencia desde un modulo diferente PUBLIC otherlabel otherlabel DB 5
Note que usando la opcion ALLPUBLIC har que todas las etiquetas usadas en el presente modulo sean como PUBLIC.
Para tomar como referencia un smbolo que es definido en otro modulo, use el pseudo-op EXTERN ... EXTERN outlabel Usando la directiva EXTERN permite que la etiqueta sea usada en el presente modulo, aun cuando no esta definida all. Sinnimos de EXTERN incluyen EXT, EXTRN, EXTERNAL, y XREF. Uso de PROCedures... Usando PROC permite el uso local de smbolos, esto es, smbolos cual identidad es conocida solamente entre lo que precede a PROC y antes de ENDPROC. proclab L?local PROC db 5
ENDPROC Note que el smbolo 'L?local' no causa un que los smbolos locales debern iniciar con L? END... El pseudo-op END deber aparecer en un archivo (file) hasta el final del mismo ensamblador terminara su trabajo al reconocer END). END (el
programa correspondiente de atencin el la Rutina 1. El mismo procedimiento se establecera para el perifrico 2. La importancia de las interrupciones nace de la necesidad de ejecutar un subproceso en el instante preciso, y por tanto se considera su intervencin <<urgente>>. Cuando termina la ejecucin de este subproceso, el CPU vuelve al programa principal, continuando su tarea cclica justo donde la dej. Una interrupcin puede ser iniciada: Por un perifrico o circuito externo ajeno al microcontrolador. (Interrupcin Externa) Dentro del propio microcontrolador. (Interrupcin Interna) Toda interrupcin aceptada conduce a la ejecucin de un subprograma especfico cuya direccin de comienzo se indica en la tabla de vectorizacin.
Cada una de las fuentes de interrupciones pueden ser individualmente habilitadas o inhabilitadas poniendo a <<uno>> o a <<cero>. El bit correspondiente del registro IE (Interrupt Enable Register) perteneciente a SFR (Special function Register).
REGISTROS DE INTERRUPCIONES.
Las interrupciones son controladas mediante la escritura en los registros IE (Interruption Enable) e IP (Interruption Priority) los cuales fsicamente son representados en la Figura sig.
IE: Es un registro para habilitar las interrupciones, Permite que se atiendan todas las interrupciones por el microcontrolador o slo las que el usuario considere aceptables.
REGISTRO IE (Interrupt Enable Register.)
b7 EA BIT b0
b1 b2 b3 b4 b5 b6 b7
b3 b2 b1 b0 ET1 EX1 ET0 EX0 NOMBRE Y COMENTARIO EX0: Control de Interrupcin externa 0. (INT0). - Si EX0 = 0 inhabilita la interrupcin externa INT0 - Si EX0 = 1 Habilita la interrupcin externa INT0 ET0: - Si ET0 = 1 habilita interrupcin del Timer0. - Si ET0 = 0 inhabilita interrupcin del Timer0. EX1: - Si EX1 = 1 habilita Interrupcin externa 1 (INT1). - Si EX1 = 0 inhabilita Interrupcin externa 1 (INT1). ET1: - Si ET1 = 1 habilita interrupcin del Timer1. - Si ET1 = 0 inhabilita interrupcin del Timer1. ES: - Si ES = 1 habilita interrupcin del puerto serie. - Si ES = 0 inhabilita interrupcin del puerto serie. Reservada. Reservada. EA: - Si EA = 1 habilita individualmente a todas las interrupciones que en este registro estn a uno. - Si EA = 0 no reconoce ninguna interrupcin.
B6 X
b5 X
b4 ES
IP: Cada interrupcin puede programarse individualmente en el nivel 1 o 2 de prioridad, poniendo a 1 o a 0 los bits de este registro. Una interrupcin de bajo nivel de prioridad se puede interrumpir por otra de un nivel ms alto. Una interrupcin de alto nivel de prioridad no puede ser interrumpida por otra interrupcin de un nivel ms bajo.
b7 X BIT b0 b1 b2 b3 b4 b5 b6 b7
REGISTRO IP (Interrupt Priority Register.) b5 b4 b3 b2 b1 b0 PT2 PS PT1 PX1 PT0 PX0 NOMBRE Y COMENTARIO PX0 : Si PX0=1 define alta prioridad la interrupcin INT0. B6 X PT0: Si PT0=1 define alta prioridad la interrupcin Timer 0. PX1: Si PX1=1 define alta prioridad la interrupcin INT1. PT1: Si PT1=1 define alta prioridad la interrupcin Timer 1. PS: Si PS=1 define alta prioridad la interrupcin puerto serie. PT2 : - Si PS=1 define la prioridad a interrupcin Timer2. Reservada. Reservada.
Fuente de Interrupcin Externa 0 INT0 Timer 0 TIMER0 Externa 1 INT1 Timer 1... TIMER1 Puerto Serie... R1 Puerto Serie T1
TABLA DE VECTORIZACION DE LAS INTERRUPCIONES Fuente de Interrupcin Externa 0 INT0 Timer 0... TIMER0 Externa 1 INT1 Timer 1... TIMER1 Puerto Serie... R1 Puerto Serie T1 Direccin 0003H 000BH 0013H 001BH 0023H 0023H
En estas 8 direcciones se puede escribir el programa de atencin a la interrupcin o, como es habitual, mediante un JMP se desva a una zona de memoria de programa ms amplia.
EJEMPLO: Este programa pretende simular el funcionamiento de luces deslizantes. Un bit se desplaza de izquierda a derecha y de derecha a izquierda y excitara 8 leds situados a la salida del puerto 0 (P0). Cuando por el pin 12(INT0), se presente una transicin, el microcontrolador ejecutara una rutina, asociada a la interrupcin que consistir en hacer parpadear diez veces todos los leds del puerto 0 (P0), una vez concluida esta secuencia, continuar con el programa principal de bits deslizantes.
DEFSEG INTER,ABSOLUTE SEG INTER ORG 0H JMP START ORG 3H JMP Tek_INTO ORG 30H MOV TCON,#01H MOV IE,#081H MOV A,#00H SETB C RLC A MOV P0,A CALL RETARDO JNB ACC.7,SALTO1 RRC A MOV P0,A CALL RETARDO
START:
;Se programa la INT0 por transicin ;Habilita interrupcin INT0 ;Limpia Acumulador
SALTO1:
SALTO2:
JNB ACC.0, SALTO2 JMP SALTO1 NOP RETARDO: SALTO3: MOV R1,#40H MOV R2,#0FFH DJNZ R2,$ DJNZ R1,SALTO3 RET ORG 100H MOV IE,#0 PUSH ACC MOV A,PSW PUSH ACC MOV A,R0 PUSH ACC MOV R0,#0AH MOV P0,#0FFH CALL RETARDO MOV P0,#00H CALL RETARDO DJNZ R0, SALTO5 POP ACC MOV R0,A POP ACC MOV PSW,A POP ACC MOV IE,#081 RETI
Tek_INTO:
SALTO5:
END
y al (pin 15) para T1. La entrada externa es muestreada durante el estado 5 de la fase 2(s5p2) de cada ciclo de mquina. El contador se incrementa cuando la muestra seala un nivel alto de la seal de entrada en un ciclo y un nivel bajo en el siguiente ciclo. El nuevo valor de contaje aparece en el registro correspondiente durante el estado 3 de la fase 1(s3p1) del siguiente ciclo en que la transicin ha sido detectada. Puesto que necesita dos ciclos mquina (24 ciclos de reloj) para reconocer la transicin del flanco decendente, la mxima razn de contaje es 1/24 de la frecuenia del oscilador. Los Timer 0 y 1 tienen cuatro modos de operacin. En la sig. Figura se observan cuatro bloques fundamentales que de izquierda a derecha se van a exponer a continuacin: En la parte superior izquierda aparece un dispositivo conmutador que selecciona la forma de efectuar el <<contaje>>, mediante el oscilador del microcontrolador, o con un reloj externo. La primera opcin establece aplicaciones generales de tipo timer (temporizador) y la segunda de tipo counter (contador). En la parte inferior izquierda se encuentra un circuito lgico que accona el interruptor que permite el paso de los impulsos que incrementan los registros de contaje. Este circuito permite dos opciones: activar el interruptor por software, para ello GATE=0 y TR1=1, que son bit de imagen pertenecientes a los registros TMOD y TCON, o bien se acciona por hardware con las seales de nivel alto, aplicadas al pin INT 1, estando GATE=1 y TR1=1. En la parte central se encuentran los registros de contaje, que pueden ser de 8,13 16 bits. Segn el modo de trabajo (TL1,TH1). A la derecha de los contadores (TL y TH) se encuentra el bit de flag o bandera. TF1, que seala el overflow o desbordamiento de los contadores. Finalmente, si la interrupcin correspondiente est habilitada, se producira una interrupcin.
TH0-TL0 y TH1-TL1: Timer Register: son pares de registros de 16 bits, que pueden actuar como temporizadores o contadores.
La funcin como Timer como Counter es seleccionada por el bit de control C/T perteneciente al registro TMOD (Timer/Counter Mode Control Register). El registro TMOD no es direccionable <<bit a bit>>. Estos dos timer tienen cuatro modos de operacin y se seleccionan mediante los bit (M0,M1) en el registro TMOD.
TMOD: Timer/Counter Mode Register: Selecciona el Timer 0 1, el modo de operacin (Modo 0, 1, 2), si acta como temporizador o como contador, etc.
REGISTRO TMOD B4 B3 B2 M0 GATE C/T
B6 B5 C/T M1 Timer 1
B1 M1 Timer 0
B0 M0
NOMBRE Y COMENTARIO MODO 0 1 2 3 M1 0 0 1 1 M0 0 1 0 1 MODO DE OPERACIN Temporizador de 13 bits. Temporizador/Contador de 16 bits. Temporizador/Contador de 8 bits con Auto-recarga. Contadores mltiples especficos.
B2
C/t: Selecciona temporizador o contador. Si C/T=0 entonces funciona como temporizador con los pulsos de reloj internos. Si C/T=1 entonces cuenta los pulsos que llegan por T0 (pin 14)
B3
GATE: Habilita la entrada exterior INT0 (pin 12) Si GATE=1 entonces habilita INT0 si TR0=1 control por Hardware. Si GATE=0 entonces deshabilita INT) y depende exclusivamente de TR0. (TR0 es un bit del Reg. TCON y se activa o desactiva por software).
B4-B5-B6-B7
Configuracin del Timer 1. Igual que para el Timer 0, sustituyendo: T0 por T1, INT0 por INT1 y TR0 por TR1
MODO 0: Temporizador/Contador de 13 bits. Poniendo los bits M0=M1=0 en el registro TMOD se selecciona el modo de operacin cero (Modo 0). Cuando la cuenta, en los contadores, da una vuelta pasando desde todos <<unos>> a todos <<ceros>>, se activa la flag de interrupcin TFX (x=0 si se trata del Timer 0 y x=1 si se trata del Timer 1), siendo ste un bit que pertenece al registro TCON (Timer/Counter control register), registro direccionable bit a bit.
TCON: Timer/Counter Control Register: Este es un registro que controla fundamentalmente el modo de operacin de los Timer 0 y 1 en relacin con las interrupciones y los flancos de activacin de los mismos.
REGISTRO TCON B7 TF1 BIT B0 B6 TR1 B5 TF0 B4 TR0 B3 IE1 B2 IT1 B1 IE0 B0 IT0
NOMBRE Y COMENTARIO IT0: Control de Interrupcin externa 0. (INT0). - Si IT0=0 entonces es activada por un nivel bajo. - Si IT0=1 Entonces es activada por un flanco de bajada.
B1
IE0: Flag de interrupcin para la interrupcin externa 0 (INT0). - Se pone a uno cuando se detecta interrupcin externa. - Se repone automticamente al atender la interrupcin por flanco.
B2 B3 B4
IT1: Control de Interrupcin externa 1 (INT1). IE1: Flag de interrupcin externa 1 (INT 1). TR0: Habilita temporizador/contador 0. - Si TR0=1 entonces habilita temporizador/contador 0. - Si TR0=0 entonces deshabilita temporizador/contador 0.
B5
B6 B7
La autorizacin para contar pulsos, procedentes del reloj interno o bien del pin 15 (T1) (actuando como contador), se produce en el Timer 1, cuando TR1=1 y las entradas GATE=0 o INT1=1. Una aplicacin podra ser, para medir el ancho de pulso a travs del pin INT1 INT0.
EJEMPLO No.1 Timer 1 en Modo 1 como temporizador de 16 bits. El bit 0 del puerto P1 (P1.0), prendera y se apagara en funcin de los valores de carga del Timer 1 (TH1+TL1).
;***** PROGRAMA PARA CONFIGURAR TIMER/COUNTER 1 EN MODO 1 (16 bits) ***** DEFSEG MODO1, ABSOLUTE SEG MODO1 ORG 0 LJMP INICIO INICIO: ORG 30H MOV TMOD,#10H ;M0=1 de Timer1,GATE=0,C/T=0
SETB CALL CLR CALL JMP TEMPO: LEER: MOV MOV MOV MOV ANL JZ RET END
P1.0 TEMPO P1.0 TEMPO INICIO TL1,#00 TH1,#00 TCON,#40H A,TCON A,#80H LEER
; ; ; ; ;
Poner a Uno el P1.0 LLAMA A SUBRUTINA PONER A ZERO P1.0 LLAMADA A SUBRUTINA REPITE TODO NUEVAMENTE
;Inicializa parte baja de contador a 0 ;Inicializa parte alta del contador a 1 ;Inicializa TR1=1 para el conteo ;lee el contenido del registro ;And para preguntar si flag TF1=1 ;si aun no llega a overflow TF1=0 por lo tanto ACC=0.
EJEMPLO No.2 Timer 1 en Modo 1 como temporizador de 16 bits con arranque por hardware desde el exterior. El bit 0 del puerto P1 (P1.0), prendera y se apagara en funcin de los valores de carga del Timer 1 (TH1+TL1) cuando se aplica un nivel alto por el pin exterior 13 (INT 1).
MODO 2: Temporizador/Contador de 8 bits con Auto-recarga. El modo 2 configura el registro Timer como un contador de 8 bits (TL1) con recarga automtica. El overflow de TL1 no slo activa el bit de flag (TF1), sino que tambin <<recarga>> TL1 con el contenido de TH1, por lo que TH1 mantiene los datos iniciales con que fue cargado. El funcionamiento es el mismo para Timer 0 y Timer 1.
EJEMPLO No.3 Timer 1 en Modo 2 como temporizador de 8 bits con auto-recarga arranque por hardware desde el exterior. El contenido de TL1 es enviado por el puerto P0, cuando se aplica un nivel alto por el pin exterior 13 (INT 1). SCON: Este registro se encarga de establecer los parmetros para la transmisin o recepcin de datos en comunicacin serie; as si se trata de una transmisin o recepcin, formato de la palabra (bit de start, bit de datos, bit de stop), Velocidad, etc.
REGISTRO SCON b4 b3 b2 REN TB8 RB8 NOMBRE Y COMENTARIO RI: Bandera de interrupcin de recepcin. Se activa por hardware al finalizar la recepcin del 8 bit en el modo 0 hacia la mitad intervalo de tiempo del bit de sto p en los otros modos. b1 Debe ser desactivado por software. TI: Bandera de interrupcin de transmisin. Se activa por hardware al finalizar la tranmisin del 8 bit en el modo 0 al comienzo en los otros modos. Debe ser desactivado por software. RB8: En modos 2 y 3 es el 9 bit que se recibe. del
b7 SM0 BIT b0
B6 SM1
b5 SM2
b1 TI
b0 RI
bit de stop
b2
b3 b4 b5
B6-b7
En modo 1, si SM2=0, RB8 es el bit de stop. En modo 0, no se utiliza. TB8: Corresponde al 9 bit de datos en los modos 2 y 3. Es programable por el usuario. Habitualmente es el bit de paridad. REN: - Si REN=1 (por software) permite la recepcin. - Si REN=0 no la permite SM2: En modo 2 y 3, Si SM2=1 entonces RI no se activar si el 9 bit de datos (RB8) es igual a cero. En Modo 1, si SM2=1 entonces RI no se activar si el bit de stop no se ha recibido. En Modo 0, SM2 debe estar a cero. SM0 SM1 MODO DESCRIPCION VELOCIDAD 0 0 0 Desplaza 8 bit Reloj/12 0 1 1 8 bit-UART Variable 1 0 2 9 bit-UART Reloj/64 Reloj/32 1 1 3 9 bit-UART Variable
SBUF : Serial Data Buffer: son dos registros buffer aparentemente separados, pero fsicamente el mismo, buffer de transmisin y buffer de recepcin. Cuando un dato es movido a SBUF, este va al buffer del transmisor, cuando un dato es movido de SBUF, este viene del buffer del receptor. PCON: Power Control Register: Para aplicaciones en donde la caracterstica de consumo sea crtica, la versin CHMOS ofrece dos modos de trabajo de bajo consumo: el modo POWER DOWN y el IDLE. Tambin ofrece, este r egistro, posibilidades de variar la velocidad de comunicacin en el canal serie.
SMOD SMOD GF1 GF0 PD IDL GF1 GF0 PD IDL Dobla el BAUD RATE para el puerto serie cuando se utiliza el timer para generar el BAUD RATE. Propsito general. Propsito general. Bajo consumo de energa. (80C51 solamente) Bajo consumo de energa. (80C51 solamente)