Documente Academic
Documente Profesional
Documente Cultură
El Microcontrolador 8051
CAP 1
Los modelos ms populares de los microcontroladores de INTEL son los 8XX1 y ms concretamente los 8X51, que han dado nombre a la familia, Las diferencias entre la serie 8XX1 y 8XX2, y en concreto, entre los 8051 y 8052 aparecen en la Figura 1.1. El 8052 presenta una mayor capacidad de memoria y un Timer ms que el 8051, al margen de dichas diferencias y de algunas otras, se puede afirmar que todo programa que funcione en un 8051 lo har en un 8052.
ITMAR Mazatln
El Microcontrolador 8051
CAP 1
Procesador booleano (operacin sobre bits). 4 puertos de 8 bits. Para el 8052,256 bytes de memoria interna RAM til para el usuario y 384 bytes en total considerando el rea de los registros especiales (SFR). Para el 8051, 128 bytes tiles para el usuario y 256 bytes incluyendo el SFR. 8K octetos de ROM (8052) o EPROM (8752). 4K para el 8X51. Espacio de memoria de 64K para programa externo. Espacio de memoria de 64K para datos externos. El 8052 contiene tres contadores-temporizadores (timers). El 8051 presenta dos timers. Comunicacin asncrona full-duplex. 6 fuentes de interrupciones con niveles de prioridad (5 para el 8051). o 2 interrupciones externas. o 3 interrupciones de los timers (2 para el 8051 ) o 1 interrupcin de la comunicacin serie. Oscilador interno.
ITMAR Mazatln
El Microcontrolador 8051
CAP 1
Alimentacin positiva de 5 VDC Conexin a tierra. Puerto de entrada/salida. Como salida soporta 8 cargas TTL LS ( el resto de los puertos solo soporta 4). Si se maneja memoria externa, este puerto multiplexea en el tiempo el bus de datos y la parte baja del bus de direcciones. Tambin recibe los bytes de cdigo durante la programacin del dispositivo, y salen por este puerto los cdigos durante la verificacin de la memoria de programa interna.
Puerto 1 (P1)
Puerto de entrada/salida programable. Tambin recibe la parte baja de las direcciones durante la programacin y verificacin de la memoria de programa interna. En el 8052, los bits P1.0 y P1.1 son usados por el Timer 2.
ITMAR Mazatln
CAP 1
Puerto de entrada/salida programable. Tambin emite la parte alta del bus de direccin en los accesos a memoria externa con direccionamiento de 16 bits. Tambin recibe la parte alta de la direccin durante la programacin y verificacin de la memoria de programa interna. Puerto de entrada/salida programable. Adems, cada bit de este puerto tiene las funciones especiales que se muestran en la tabla 1.3.
Puerto 3 (P3)
Figura 1.3
ITMAR Mazatln
El Microcontrolador 8051
CAP 1
_____ ALE/PROG
ALE (Address Latch Enable) Este pin genera un pulso para latchear la parte baja del bus de direcciones durante los accesos a memoria externa. PROG es usada durante la programacin del dispositivo como entrada de los pulsos de programacin. (Program Store Enable) Esta es la seal de strobe para leer en la memoria de programa externa. Sirve para diferenciar la memoria externa de programa de la memoria externa de datos. No se activa durante el acceso a memoria interna de programa. __ EA (External Access) Entrada. Cuando se mantiene en nivel alto, se ejecuta solo el programa de la memoria de programa interna, a menos que el contador de programa exceda de 1FFF (8 K) para el 8052 y de 0FFF (4 K) para el 8051. Si EA se mantiene a nivel bajo, siempre se ejecutar el programa de la memoria externa, independientemente de la direccin del programa. Vpp es la tensin de programacin, aplicada solo durante la programacin de la memoria de programa interna. Entrada y salida respectivamente del amplificador inversor que forma parte del oscilador interno. Se puede conectar a estas terminales un cristal de cuarzo, tal como indica la figura 1.5
_____ PSEN
__ EA/Vpp
XTAL1 y XTAL 2
Para que el microcontrolador trabaje sincronizado con un reloj externo, se pueden conectar XTAL1 y XTAL2 como se muestra en la figura 1.6.
ITMAR Mazatln
El Microcontrolador 8051
CAP 1
RESET
Seal de inicializacin del sistema. Un nivel alto aplicado a este terminal, durante cierto tiempo, provoca que el microcontrolador pase a su estado inicial.
ITMAR Mazatln
El Microcontrolador 8051
CAP 2
La memoria de programas slo puede ser leda y tiene como mximo 64K. En el 8052 la memoria de programas interna es de 8K y en el 8051 de 4K. La seal de autorizacin de lectura en la memoria de programas externa es PSEN. El pin EA del Microcontrolador 8052 puesto a VCC indica que el puntero de programa busca direcciones desde la posicin de memoria 0000H hasta la 1FFFH de la memoria interna y de la 2000H ala FFFFH de la memoria externa mientras que en el 8051 busca en la memoria interna de la direccin 000H hasta 0FFFH y en la externa de la 1000H a la FFFFH. Si el pin EA es puesto a VSS, la bsqueda de direcciones del programa se dirige a la memoria externa en todo momento.
El Microcontrolador 8051
CAP 2
La memoria de datos puede ocupar, si se desea, un espacio separado de la memoria de programas. La memoria de datos admite operaciones de lectura y escritura y, como se puede ver en la Figura 2.1, puede ser interna o externa y puede direccionar, como la memoria de programas, hasta 64K. La CPU genera las seales RD (read) y WR (write) para leer o escribir en la memoria de datos externa. Como anteriormente se deca, la memoria de programa y la memoria de datos pueden coexistir en el mismo espacio de direcciones o en espacios separados; en el primer caso se dice que la memoria es combinada y en el segundo segregada. La memoria combinada se obtiene aplicando las seales RD y PSEN a una puerta lgica AND y utilizando la salida de la puerta como strobe del chip de memoria externa de programas y datos. En la Figura 2.2 se pueden observar grficamente estos conceptos.
El Microcontrolador 8051
CAP 2
Como se puede observar en la Figura 2.4, el intervalo fisico entre dos interrupciones es de 8 bytes, espacio capaz para albergar una pequea rutina, pero si ste no fuera suficiente se desviara el contador de programa (PC) mediante una instruccin de salto (JMP) a una zona amplia de la memoria de programas capaz de contener dicha rutina.
Figura 2.4
Se ha dicho anteriormente que la memoria de programa puede ser interna (en el propio microcontrolador) o externa (en otro chip). La seleccin se realiza por hardware, con la seal EA (Extern Access), poniendo este pin a VCC o a VSS respectivamente. La configuracin del hardware para que el 8052/8051, como _________________________________________________________________________ ITMAR Mazatln 10 Ing. Rufino J. Domnguez Arellano.
El Microcontrolador 8051
CAP 2
microprocesador, utilice como memoria de programa la memoria externa, se muestra en la Figura 2.5.
Se observa en la figura 2.5 que las 16 lneas de direccin corresponden al Puerto 0 al Puerto 2, que estn dedicados al bus de direcciones; aun ms, el Puerto P0 sirve como bus de direcciones y bus de datos, multiplexados en el tiempo. Esta operacin, caracterstica de la familia de micros de Intel, se realiza de la forma siguiente: --El Puerto P0 emite el byte bajo de la palabra del contador de programa (PCL). Una vez estabilizada la seal sobre P0, la seal ALE (Address Latch Enab!e) introduce esta direccin dentro del dispositivo latch 74LS373, que pasa a apuntar la direccin en la memoria externa de programas. Al mismo tiempo, la parte alta del contador de programa (PCH) se emite por P2. Entonces PSEN autoriza la lectura de cdigo de instruccin a travs del puerto P0. En la figura 2.6(A) se muestra un cronograma de esta operacin.
El Microcontrolador 8051
CAP 2
Las secuencias 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 2.6 muestra el cronograma de las seales implicadas en la secuencia de bsqueda, cuando la memoria de programas es externa. La seal PSEN se activa dos veces por ciclo mquina, para autorizar la lectura en la memoria de programas. Si se produce un acceso a la memoria de datos, como se muestra en la Figura 2.6(B), no se emiten los dos impulsos PSEN, puesto que el acceso a la memoria de datos no los necesita. Ms bien utiliza las seales RD (lectura) y WR (escritura). Estas seales son generadas automticamente cuando el nemnico correspondiente al cdigo de instruccin termina en la letra X. Observe cmo el acceso a la memoria de datos toma dos ciclos ms de bus que la memoria de programas. La Figura 2.6 muestra los cronogramas relativos a ambas secuencias de acceso, destacando la emisin de direcciones por parte de P0 y P2, y las seales ALE y PSEN. La seal ALE se utiliza para <latchear> el byte bajo de direcciones dentro del latch que se dibuja en las Figuras 2.5 y 2.7. Cuando la CPU est 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 mquina, pudiendo ser utilizada como seal de reloj externo; no obstante, como se puede ver en la Figura 2.6(B), cuando se accede a un operando utilizando la instruccin MOVX, la seal ALE desaparece. En la Figura 2.6(B) se puede observar cmo se realiza un acceso a la memoria externa de programas para tomar una instruccin y en el segundo ciclo se accede _________________________________________________________________________ ITMAR Mazatln 12 Ing. Rufino J. Domnguez Arellano.
El Microcontrolador 8051
CAP 2
a la memoria de datos externa para tomar un dato. En este caso observar que no se activa PSEN.
El Microcontrolador 8051
CAP 2
El Microcontrolador 8051
CAP 2
paginada. Tambin se pueden utilizar 2 bytes de direcciones; byte bajo en el Puerto 0 y byte alto en el Puerto 2. Este es el sistema clsico que permite direccionar un mximo de 64 Kbytes. En la memoria de datos interna se puede acceder a un total de 384 bytes para el 8052 y a 256 bytes para el 8051 incluido el rea de los registros especiales (SFR), combinando los bloques de memoria de 128 bytes con el modo direccionamiento.
A continuacin, se va a analizar las tres reas de memoria interna: , rea de direccionamiento slo indirecto (para el 8052). rea de direccionamiento indirecto y directo. rea de direccionamiento directo y zona SFR.
El Microcontrolador 8051
CAP 2
escribe ABH en la localizacin 90H de la memoria RAM de datos y concretamente (por utilizar direccionamiento inmediato) en el Puerto 1 (90H = P1 (port1)) del rea SFR. En cambio, las instrucciones (en un 8052): MOV R0, #90H MOV @R0, #ABH escnben ABH en la direccin 90H de la memoria de dalos y por utilizar direccionamiento indirecto escribe en la media pgina que asoma detrs de la media pgina del SFR en la Figura 2.8. Despus de la ejecucin de ambos modos de direccionamiento, se hallar ABH en el registro imagen del Puerto 1 (P1) en el SFR y ABH en la direccin 90H (Figura 2.9).
El Microcontrolador 8051
CAP 2
Los registros se localizan desde la direccin 00H a 1FH (32 bytes). Despus de la operacin de inicializacin del microcontrolador, aplicando un nivel alto a la terminal RESET (vase Apartado 2.7 de este captulo), el banco operativo por defecto es el banco 0. La seleccin de otro banco de registros debe hacerse por software escribiendo en el registro de estado PSW (vase Tabla 2.1).
El RESET inicializa el Stack Pinter (SP) en la direccin de memoria 07H y se incrementa inmediatamente a la direccin 08H que es el primer registro R0 del segundo banco de registros. Con el fin de usar ms de un banco de registros, el SP se puede inicializar en otra localizacin de memoria. Sub rea direccionable bit a bit
Esta rea tiene una longitud de 16 bytes (segmento 20H a 2FH). Cada uno de los 128 bits de este segmento se puede direccionar directamente (00H a 7FH). Los bits se pueden referir de dos formas diferentes, bien por sus direcciones (bits 00H a bits 7FH) o por los bytes que los contienen (20H a 2FH). Esto es, los bits 0 al 7 pueden ser referidos como los bits 20.0 a 20.7 y del 8 al F, como 21.0 a 21.7, etc. Cada uno de los 16 bytes de este segmento puede ser tambin direccionado como Byte. _________________________________________________________________________ ITMAR Mazatln 17 Ing. Rufino J. Domnguez Arellano.
CAP 2
La memoria scratch pad se entiende como la memoria de un block de notas de rpido acceso, pero de escasa capacidad. Ocupa las posiciones 30H a 7FH. Es la memoria de trabajo (RAM) del usuario.
* Direccionable bit a bi!, + Slo para el 8052. Nota: Los nmeros hexadecimales que, como cifra ms significativa tienen un carcter alfabtico, en algunas ocasiones y para evitar equvocos, van precedidos de la cifra cero (0),
El Microcontrolador 8051
CAP 2
ACC Acumulador: Es un registro de propsito general de los Microcontroladores 8052/8051 y, por su frecuencia de intervencin, el ms importante. En la programacin de aplicaciones en lenguaje ensamblador se har referencia a l como REGISTRO A. B Registro B: Est especializado en las operaciones de multiplicacin y divisin, adems de ser usado como registro de datos de propsito general. PSW Program Status Word: Contiene informacin del estado del CPU en cada ciclo de instruccin. El cuadro 2.1 muestra el formato de la palabra de estado.
SP Stack Pointer: Es un registro de 8 bits. Despus del RESET, el SP se carga por defecto con la direccin 07H. Al ejecutar la primera instruccin PUSH o CALL el SP se incrementa a la posicin 08H.
DPL y DPH Data Pointer: Su propsito principal es contener la direccin del puntero de datos. Puede ser manipulado como un registro de 16 bits (DPTR) o como dos registros independientes de 8 bits. _________________________________________________________________________ ITMAR Mazatln 19 Ing. Rufino J. Domnguez Arellano.
El Microcontrolador 8051
CAP 2
Puertos 0, 1, 2 y 3:
SBUF Serial Data Buffer: Son dos registros buffer fsicamente separados, pero a efectos de programacin es el mismo, buffer de transmisin y buffer de recepcin. Al escribir un dato en SBUF, el mismo comienza a transmitirse por la lnea correspondiente del puerto serie. En el modo recepcin el dato que ingresa por la lnea de entrada del puerto serie se registra en el buffer receptor (SBUF). TH0-TL0, TH1-TL1, TH2-TL2 Timer Registers: Son pares de registros de 16 bits, que pueden actuar como temporizadores o contadores. RCAP2H-RCA2PL Capture Registers: Este par de registros actan como registros de captura del Timer 2, cuando este trabaja en modo captura. En este modo RCAP2H y RCAP2L responden a la transicin del flanco en el pin T2EX, copiando los valores de TH2 y TL2 sobre ellos mismos. El Timer 2, en el modo de trabajo con autorrecarga, obtiene los valores de recarga de estos registros. 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 registro, posibilidades de variar la velocidad de comunicacin en el canal SERIE. TCON Timer/Counter Control Register: Este es un registro que controla fundamentalmente el modo de operacin de los Timers 0 y 1 en relacin con las interrupciones y los flancos de activacin de las mismas. TMOD Timer /Counter Mode Control Register: Selecciona el Timer 0 o 1, el modo de operacin (Modo 0, 1 o 2), si acta como temporizador o como contador, etc. T2CON Timer/Counter 2 Control Register: TMOD, pero aplicado al Timer 2. Lo mismo que con TCON y
IE Interrupt Enable Register: 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. _________________________________________________________________________ ITMAR Mazatln 20 Ing. Rufino J. Domnguez Arellano.
El Microcontrolador 8051
CAP 2
IP Interrupt Priority Register: 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 (vase Captulo 10). SCON Serial Port Control Register: 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, bits de datos, bit de .Stop), velocidad, etc. Finalmente, en la Tabla 2.2 se hace .referencia al mapa .de memoria de los registros SFR. Los registros que pertenecen a la columna izquierda de la tabla estn en un rea direccionable bit a bit que corresponde a las direcciones 80H, 88H, 90H, 98H, .:., F8H.
Los registros que estn encerrados entre parntesis pertenecen solamente al 8052.
El Microcontrolador 8051
CAP 2
Un RESET se alcanza cuando se mantiene en el pin RST, un nivel lgico alto al menos durante dos ciclos mquina (24 perodos de reloj), mientras el oscilador est funcionando. La CPU responde generando un RESET interno, segn el cronograma mostrado en la Figura 2.12. La seal externa de RESET es asncrona al reloj interno. El pin RESET es muestreado durante la fase 2 del estado 5 de cada ciclo mquina. Los pines de los puertos mantendrn sus actividades durante 19 perodos de reloj, despus de que el nivel lgico del pin RESET haya sido detectado; esto es, durante 19 a 31 perodos de reloj, despus de haber aplicado externamente un nivel lgico alto al pin RESET . El algoritmo del RESET interno escribe ceros en todos los registros del SFR, excepto en los latches de los puertos, el Satck Pointer y el registro SBUF. Los latches de los puertos son inicializados a FFH (quedan programados para la lectura), el Stack Pointer a 07H y el SBUF es indeterminado. En la Tabla 2.3 se muestran los valores que toman los registros despus de un RESET.
El Microcontrolador 8051
CAP 2
El RESET automtico del microcontrolador se produce al aplicar la tensin de alimentacin VCC al terminal RST a travs de un capacitor de 10 F y una resistencia de 8.2 K, como indica la figura 2.13, procurando que el tiempo de flanco de subida de la alimentacin no exceda de un milisegundo y el comienza de los pulsos del reloj no exceda de 10 mS.
El Microcontrolador 8051
CAP 3
Nota: Un registro o nmero entre parntesis se refiere al contenido. Asi: (A) es el contenido del acumulador. (38) es el contenido de la posicin de memoria 38.
El Microcontrolador 8051
CAP 3
Direccionamiento indirecto
La instruccin especifica un registro que contiene la direccin del operando. Tanto la memoria RAM interna (256 bytes/128 bytes) como la externa se pueden direccionar indirectamente. Los registros para direccionar sobre el mapa de 8 bits pueden ser el R0 y R1 del banco de registros seleccionado, o el Stack Pointer. El registro para direccionar sobre 16 bits slo puede ser el Puntero de Datos (Data Pointer = DPTR). Ejemplo:
ADD A,@R0 ; As, si (RO)=38H la operacin ser: A (A) + (38) Igual que en el ejemplo anterior(@) es el identificador del direccionamiento indirecto.
Direccionamiento implcito
Algunas instrucciones especifican, implcitamente, el registro sobre el que van a operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando porque est implcito en el cdigo de operacin. Ejemplos:
INC A INC DPTR ; Incrementa el contenido del acumulador: A (A) + 1 ; Incrementa puntero de datos: DPTR (DPTR) + 1
El Microcontrolador 8051
CAP 3
Direccionamiento inmediato
Al cdigo de operacin le sigue una constante en la memoria de programas. Ejemplo:
MOV A, #255 MOV A, #FFH ; o en binario: MOV A, #11111111B ; Carga en el acumulador el nmero decimal 255. Generalmente se expresan ; ; en hexadecimal:
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 de 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. Es decir, la direccin de la tabla que se va a acceder est formada por la suma del acumulador y el puntero base. Se puede utilizar otro tipo de direccionamiento indexado en las instrucciones de salto. En este caso la direccin de destino del salto se calcula como la suma del puntero base y el dato del acumulador.
El Microcontrolador 8051
CAP 3
Por ejemplo, la instruccin MOV A, #data tiene 2 bytes de instruccin y requiere de 1 ciclo mquina (Figura 3.1 B). 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.1 D 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.1 B.
Las instrucciones aritmticas, lgicas, de transferencia y de salto son comunes a la mayora de microprocesadores. Los microcontroladores tienen un rea especial de aplicacin, que es el rea del control de procesos; en este campo las operaciones estn orientadas, muy a menudo, al bit. Los microcontroladores leen, procesan, escriben e intercambian informacin con los sistemas exteriores, en formato bit a bit> o palabra a palabra. Un procesador booleano con un set de instrucciones booleanas muy completo se encarga de realizar este tipo de operaciones, que, como ya hemos dicho, estn orientadas al bit>. Esta particularidad, as como su inmunidad al ruido elctrico, le hacen valioso en el mundo del control de procesos industriales
El Microcontrolador 8051
CAP 3
El Microcontrolador 8051
CAP 3
La instruccinb MUL AB multiplica el contenido del acumulador con el dato situado en B y el producto, de 16 bits, aparece en los registros B:A (sobrescribe los operandos) La instruccin DIVAB divide el contenido del acumulador con el dato del registro B, apareciendo el resultado en A (el cociente) y B ( el residuo).
El Microcontrolador 8051
CAP 3
El Microcontrolador 8051
CAP 3
Ejemplo:
; Antes de ejecutar la instruccin: ; (3A) = 35H ; (3D) = 78H MOV3AH,3DH .. ; Despues de ejecutarla: ; (3A) = 78H ; (3D) = 78H
La instruccin MOV DPTR, #data 16, permite transferir datos de 16 bits para inicializar el DPTR (Data Poimer = 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 SCRA TCH 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
El Microcontrolador 8051
CAP 3
La instruccin XCH A, <byte>, intercambia los datos del acumulador y del byte direccionado. 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: ; (RO) = 2DH y (2D) = 37H y (A) = 23H XCHD A, @R0 ; Despus de ejecutarla: ; (A) =27H y (2D) = 33H
Conviene observar que para este tipo de accesos 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 utilizar un direccionamiento de 16 bits, usando el _________________________________________________________________________ ITMAR Mazatln 32 Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 3
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 Captulo 2. 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 Microcontroladores 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 unas lneas extras de E/S (Figura 2.7).
Nota: Este ejemplo se podra realizar con el Microcontrolador 8052, en el espacio de memoria RAM interna Que se solapa con el rea SFR. Si se refiere al Microcontrolador 8051, debera ser implementada esta operacin, obligatoriamente. en el espacio de memoria externa. Naturalmente, si utiliza la memoria interna, las instrucciones que debe utilizar son MOV A., @R1 y MOV @R0, A.
Qu sucedera si se tuvieran que implementar estas instrucciones en la zona de memoria por encima de la direccin 2000H? Es decir:
CAP 3
85H F3H
Se llegara a la conclusin de que no se podran 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 comprendido entre 0000H y FFFFH, sera: sustituida
MOVX A, @Ri MOVX @Ri, A MOVX A, @DPTR MOVX @DPTR, A
El Microcontrolador 8051
CAP 3
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 es el Pogram Counter (PC) el que acta como indicador de la direccin base de la tabla.
MOVC A, @A+PC ; PC (PC) + 1 ; 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.
El Microcontrolador 8051
CAP 4
CAP 4
B) Efectuar la operacin XOR entre los bits P0.0 y P1.1, dejando el resultado en P2.7.
La instruccin XOR no existe en la familia 8051. Se debe implementar por algoritmo: MOV JNB CPL SALTA: MOV C, P0.0 P1.1, SALTA C P2.7, C ; Cargo P0.0 al acarreo. ; Si P1.1 = 0, C tiene el resultado correcto, y entonces ; salta. Si P1.1 = 1 hay que complementar C.
El Microcontrolador 8051
CAP 4
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 bytes relativos al primer byte siguiente a la instruccin de salto.
PC (PC) + 2 PC (PC) + rel
LJMP addr16 (Long Jump). La direccin destino del salto viene dada 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 addr16
AJMP addr11 (4bsolute 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 si misma 3 de los 11 bits de direcciones, y otro byte que contiene los 8 bits bajos de la direccin de destino. Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2 KB referenciado respecto a la siguiente instruccin a la del salto.
PC (PC) + 2 (PC.10-0) direccin de la pgina
JMP @A + DPTR Se trata de una instruccin de salto indirecto. Suma el acumulador con los 16 bits del puntero de datos DPTR y carga el resultado en PC. Esta ser la direccin para el siguiente ciclo fetch. Ejemplo: Se trata de establecer cinco caminos de ramificacin del programa, dependiendo de que el acumulador tome valores entre 0 y 4:
MOV MOV RL JMP --TABLA_DE SALTO: AJMP AJMP AJMP AJMP AJMP SALTO0 SALTO1 SALTO2 SALTO3 SALTO4 DPTR, #TABLA_DE SALTO A, VALOR A @A + DPTR ; Cargo direccion de tabla.
El Microcontrolador 8051
CAP 4
JZ y JNZ. Salta si es cero y salta si no es cero, respectivamente. En este procesador, puesto que no existe un indicador de CERO (como en otros micros), se examina directamente el registro acumulador. DJNZ Decrementa el byte indicado y salta si el resultado NO es cero. til para implementar bucles:
LAZO: MOV CONTADOR, #10 ---------------------------------------------DJNZ CONTADOR, LAZO
CJNE Compara y salta si no son iguales. Se puede comparar A con un byte, que puede ser con direccionamiento indirecto, directo, por registro o inmediato. O bien se puede comparar un byte con una constante.
CAP 4
A) Ejecutar las instrucciones de un lazo hasta que la lectura de un perifrico en P0 coincida con la localidad de memoria 7FH.
LAZO: MOV A, P0 ---------------------------------------------CJNE A, 7F, LAZO
El Microcontrolador 8051
CAP 4
El Microcontrolador 8051
CAP 4
El Microcontrolador 8051
CAP 4
El Microcontrolador 8051
CAP 4
El Microcontrolador 8051
CAP 4
El Microcontrolador 8051
CAP 4
El Microprocesador 8051
CAP 5
CAPITULO 5
El Microprocesador 8051
CAP 5
SAL1: SAL2:
%TITLE ; ORG ; EQU EQU EQU EQU MOV MOV MOV JNZ MOV ADD MOV MOV JZ MOV SUBB MOV NOP ; END
"ESTRUCTURA CONDICIONAL ECON0.ASM" 0200H 77H 78H 79H 7AH DA1, #09H DA2, #06H A, CHE SAL1 A, DA1 A, DA2 RES, A A, CHE SAL2 A, DA1 A, DA2 RES, A
; CARGA DE DATOS ; LEE LA LOCALIDAD 77H ; SI ES CERO SUMA, SI NO SALTA A RESTA ; HACE LA SUMA ; GUARDA RESULTADO
El Microprocesador 8051
CAP 5
%TITLE ESTRUCTURA ITERATIVA. ITERAO.ASM ; ORG 0200H ; EQU 778 EQU 78H MOV CON, MEM ; Se transfiere el contenido de MEM a CON MOV A, CON ; Cargar acumulador ADD A, #60H ; Prepara el dir. indexado por software MOV R0, A ; Carga el puntero MOV @R0, # FFH ; Carga la localidad correspondiente ; Por lo menos carga una posicin ; de memoria DJNZ CON, SAL ; Decrementa CON y salta si CON NOP END ; no es CERO
SAL1:
CAP 5
Si el bit 2 de la localidad 28H (CHE) es igual a cero, entonces en la direccin 7FH (RES) se sealar poniendo todos sus bits a cero, y si el bit 2 es igual a uno, se sealar poniendo todos sus bits a uno. Es decir: 28.2 = 0 implica que: (7FH) 00H 28.2 = 1 implica que: (7FH) FFH
%TITLE TESTEO DE ; ORG 0200H ; EQU 28H EQU 7FH MOV A, CHE ANL A, #04H JZ SAL0 MOV RES, #FFH JNZ SALl MOV RES, #00 NOP END BITS. TESBITO.ASM
CHE RES
SALO: SAL1:
; ; ; ; ; ;
Se carga el ACC con el byte a chequear Se detecta el bit. Si es igual a CERO salta Si no es igual a CERO, carga RES con unos ...y sale del proceso Si es igual a CERO. carga RES con ceros
CHE RES
El Microprocesador 8051
JNC MOV JC MOV NOP END SALO RES. # FFH SALl RES, #00 ; ; ; ;
CAP 5
Si es igual a CERO salta Si no es igual a CERO, carga RES con unos ...y sale del proceso Si es igual a CERO, carga RES con ceros
SALO: SAL1:
CHE RES
SAL0: SAL1:
%TITLE TESTEO DE BYTES. TESPAL0.ASM ; ORG 0200H ; EQU 70H EQU 20H MOV A, 7OH ; Se CARGA el ACC con la localidad a ; chequear. CLR C ; Se pone el carry a 0 SUBB A, #63H ; Resta de localidad CHE la constante #63H JZ SALO ; Si es igual a CERO salta SETB RES.0 ; Si no es igual a CERO, carga con" 1' ; el bit0 del byte RES JNZ SALl ; ...y sale del proceso CLR RES.0 ; Si es igual a CERO, carga con "0" el ; bit0 del byte RES NOP END
El Microprocesador 8051
CAP 5
El resultado de la operacin ser cero, slo si coinciden el byte ledo y el byte de referencia. Si los bytes difieren al menos en un bit, comoen el siguiente ejemplo: 0 l 1 0 0 0 1 0 0 1 l 0 0 0 1 1 0 0 0 0 0 0 0 l = LECTURA BYTE = REFERENCIA: 63H = RESULTADO
CHE RES
SALO: SAL1:
%TITLE TESTEO DE BYTES. TESPAL1.ASM ; ORG O2OOH ; EQU 7OH EQU 2OH MOV A, 7OH ; Se CARGA el ACC con la localidad a ; chequear XRL A, #63H ; Operacin EX-OR entre ACC y la cte. #63H JZ SALO ; Si el resultado es igual a CERO salta SETB RES.O ; Si no es igual a CERO, carga con" 1" ; el pitO del byte RES JNZ SALl ; ...y sale del proceso CLR RES.O ; Si es igual a CERO, carga con "O" el ; bitO del byte RES NOP END
El Microprocesador 8051
CAP 5
CHE RES
SALO: SAL1:
Este apartado y el siguiente proponen ejercicios de proceso sobre bloques de datos. Para estas rutinas los 8052/8051 cuentan con unas instrucciones muy potentes que van a ser analizadas. _________________________________________________________________________ ITMAR, Mazatln 53 Ing. Rufino J. Domnguez Arellano
El Microprocesador 8051
CAP 5
Este ejercicio copia de una posicin a otra de la memoria RAM externa un bloque de datos. Estos bloques, para simplificar el problema, son de tamao fijo, de una pgina de 256 bytes, y comienzan en el primer byte de la pgina seleccionada. As, en nuestro caso, si se quiere copiar un bloque de datos situado en las direcciones 0315H a 0380H (pgina 03H), a la pgina 05H, se copiara todo el contenido de la pgina 03 (0300H a 03FFH) a la pgina 5 (0500H a 05FFH) y el bloque de datos situado inicialmente en las localidades 0315H a 0380H se encontrar copiado en las localidades 0515H a 0580H. A continuacin se muestra el listado del programa fuente, tal como se ha previsto. Se invita al usuario a que realice una versin mejorada, indicando el rango de las direcciones acopiar (direccin inicial a direccin final) y la direccin de la primera localidad destino, incluso por encima del rango de una pgina de 256 bytes.
%TITLE MOVIMIENTO DE TABLAS. MOTABLAO.ASM ; ORG O2OOH ; ; RO es el puntero que recorre las pginas ; Rl es la pgina FUENTE ; R2 es la pgina DESTINO ; MOV RO, #OOH ; Inicializa el puntero MOV DPL, RO ; Carga RO en el byte bajo del DPTR MOV DPH, Rl ; Carga R l en el byte alto del DPTR ; (FUENTE) MOVX A, @DPTR ; Lee byte apuntado por DPTR MOV DPH, R2 ; Carga el byte alto del DPTR ; (DESTINO) MOVX @DPTR, A ; Escribe byte apuntado por DPTR INC RO ; Incrementa puntero MOV A, RO ; Carga el ACC para la siguiente instruccin JNZ SALO ; Busca el siguiente byte en la pgina ; y si es CERO concluye porque ha ; terminado la pgina NOP END
SALO:
El Microprocesador 8051
CAP 5
Este ejercicio muestra cmo se realiza esta operacin dentro de la memoria de programas de 8K, pudiendo hacer lo mismo en la memoria RAM externa o interna de los 8052/8051, naturalmente, habr que hacer referencia a las instrucciones correspondientes, pues claramente se resaltaron en el estudio del set de instrucciones en el Apartado 3.7.1, la Transferencia de datos sobre la RAM interna, en el Apartado 3.7.2, la Transferencia de datos sobre la RAM externa, y en el Apartado 3.7.3, Memoria de programas para el tratamiento de tablas. Concretamente este ejercicio trata de buscar un determinado dato, 23H, en una tabla cuyo rango es 0300H a 03FFH. Los resultados que se han de indicar son el nmero de veces que ha sido encontrado y la posicin de memoria en que se encuentran estos datos. R2 = nmero de veces A partir de la localidad 60 = situacin
POS
SALO:
SAL1:
%TITLE CHEQUEO DE TABLAS DE DATOS. CHEQUEO.ASM ; ORG O2OOH ; EQU 6OH MOV RO, #POS ; Apunta el comienzo de la tabla ; de las localidades en las que ; se van a localizar los caracteres MOV R2, #OOH ; Se inicializa R2 con O. ; Contador de carcter MOV Rl, #OOH ;Se inicializa R1 con O. ; Contador de tablas MOV DPTR, #O2FFH ; Se inicializa DPTR con el ; comienzo de la tabla INC DPTR ; Se busca otro carcter MOV Rl, DPH CJNE Rl, #O3H, SALl ; Si se termina la tabla 03xx sale ; del proceso MOV A, #OOH ; El ACC se borra para la ; prxima instruccin MOVC A, @A+DPTR ; Se LEE el carcter y se carga en el ACC. CJNE A, #23H, SALO ; Si el carcter no es *23H busca ; siguiente INC R2 ; Si el carcter es * 23H incrementa ; contador MOV @RO, DPH ; Apunta direccin (H) localizacin carcter INC RO MOV @RO, DPL ; Apunta direccin (L) localizacin carcter INC RO JMP SALO ; Busca otro carcter para evaluar NOP END
El Microprocesador 8051
CAP 5
REF ROT
SALO:
El Microcontrolador 8051
CAP. 6
CAPITULO 6
El Microcontrolador 8051
CAP. 6
Figura 6.1
El Microcontrolador 8051
CAP. 6
Para un mejor entendimiento y seguimiento de los cronogramas anteriores, en la Figura 6.2 se dibuja un esquema en el que aparece el microcontrolador comandando una memoria RAM (43256C) y una memoria EPROM (2764).
Cuadro 6.1.
Smbolo
TLHLL TAVLL TLLAX TLLIV TLLPL TPLPH TPLIV TPXIX TPXIZ TPXAV TAVIV TPLAZ TRLRH TWLWH TRLDV TRHDX TRHDZ TLLDV TAVDV TLLWL TAVWL TQVWX TQVWH TWHQX TRLAZ TWHLH
Parmetro
ALE Pulse Width (Anchura pulso ALE) Address Valid to ALE Low (Direccin vlida a ALE bajo) Address Hold After ALE Low (Direccin mantenida despus de ALE bajo) ALE Low to Valid Instruction In (ALE bajo a Instr. In. vlida) ALE Low to PSEN Low (ALE bajo a PSEN bajo) PSEN Pulse Width (Anchura pulso PSEN) PSEN Low to Valid Instruction In (PSEN bajo a Instr. In. vlida) Input Instr. Hold After PSEN (Mantenimiento de Instr. In. despus de PSEN) Input Instr. Float After PSEN (Bus flotante de Instr. In. despus de PSEN) PSEN to Address Valid / PSEN a Direccin vlida Addres to Valid Instr. In. / Direccin a Instr. In. vlida PSEN Low to Addres Float / PSEN bajo a bus direccin flotante RD Pulse Width / Anchura del pulso de lectura WR Pulse Widht / Anchura del pulso de escritura. RD Low to Valid Data In / RD bajo a Dato In. vlido Data Hold After RD / Mantenimiento de Dato despus de RD Data Float After RD / Bus Datos flotante despus de RD ALE Low to Valid Data In / ALE bajo a Dato In. vlido Addres to Valid Data In / Direccin a Dato In. vlido ALE Low to RD or WR Low / ALE bajo a RD o WR bajo Addres to RD or WR Low / Direccin a RD o WR bajo Data Valid to WR Transition / Dato vlido a transicin WR Data Valid to WR High / Dato vlido a WR alto Data Hold After WR (Mantenimiento de Dato despus de WR) RD Low to Addres Float (RD bajo a bus flotante Direccin) RD or WR High to ALE Hight (RD o WR alto a ALE alto)
El acceso a la memoria externa puede hacerse o bien a la memoria de programas o a la memoria de datos y esta ltima puede ser para leer o escribir un dato. Estos tres aspectos se van a desarrollar someramente a continuacin.
El Microcontrolador 8051
CAP. 6
El Microcontrolador 8051
CAP. 6
U2
A0 Q0 A1 Q1 A2 Q2 A3 Q3 A4 Q4 A5 Q5 A6 Q6 A7 Q7 A8 A9 A10 RAM A11 A12 A13 A14 CS OE WR
U3
A0 O0 A1 O1 A2 O2 A3 O3 A4 O4 A5 O5 A6 O6 A7 O7 A8 A9 EPROM A10 A11 A12 CE OE PGW Vpp
U4
D0 D1 D2 D3 D4 D5 D6 D7 OE Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 E
U1
EA/Vpp X1 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/P TXD RXD
74LS373
+5 V
+5 V
43256C
2764
8052
P1.0/T2 P1.1/T2X P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
Figura 6.2
El Microcontrolador 8051
CAP. 6
P0: Bus de direcciones de menos peso (A0 a A 7) y bus de datos (D0 a D7) multiplexados en el tiempo. P1: Puerto de E/S. P2: Bus de direcciones de ms peso (A8 a A15). P3: Bus de control.
El Microcontrolador 8051
CAP. 6
Figura 6.3
Figura 6.4
Ejercicio 6.1. El puerto P0 en modo salida Este ejercicio muestra cmo se deben tratar los cuatro puertos cuando se tiene que enviar una informacin de salida del microcontrolador. Se refiere, comnmente, a una operacin de escritura. El ejercicio se realiza con el Puerto P0 pero el usuario puede comprobar que el programa funcionar igual si sustituye el Puerto P0 por el P1 , P2 o P3. El programa muestra distintas formas de escritura en el puerto. As: En las primeras instrucciones, mediante una mscara, se ponen todos los bits del Puerto P0 a CERO. Se incrementa el acumulador y se transfiere al Puerto P0. por lo que el contenido de dicho puerto se incrementar, as hasta contar hasta 5.
El Microcontrolador 8051
CAP. 6
.Direccionando directamente los bits 0 y 2 del Puerto P0. que en la ltima operacin haban quedado a UNO, se ponen a CERO. En este instante todos los bits de P0 estn a CERO. Se pone a UNO el bit 7 de P0 y con direccionamiento inmediato se carga P0 con 55H. Finalmente, se complementa (operacin lgica NOT) la informacin de P0 cambiando los UNOS por CEROS y los CEROS por UNOS.
Se observar que entre las distintas operaciones se ha incluido un lazo de retardo para poder seguir la evolucin de la secuencia anteriormente descrita. La rutina de retardo es la misma que la estudiada en el Ejercicio 5.1, con la diferencia del valor asignado al registro R0 y, tambin, que dicha rutina se ubica a partir de la localidad 0300H para que no coincida con el programa principal. Una ltima observacin antes de pasar a realizar el ejercicio. Si se necesita activar o desactivar un bit de un puerto (se puede hacer extensivo a todos los registros direccionales bit a bit del SFR), puede hacerlo utilizando las instrucciones booleenas (ver Tabla 4.2).
CLR bit SETB bit CPL bit
o tambin
SETB 80
o tambin
SETB 81
Efectivamente, por esta razn slo son direccionables bit a bit los registros correspondientes a la primera columna (ver Tabla 4.1 ).
El Microcontrolador 8051
CAP. 6
RETAR1
SAL0:
; Escribe en el puerto P0 configurado como salida ; ORG 0200H ; EQU 0300H MOV A, #00H ANL P0, A ; Escribe CERO en el puerto P0 CALL RETAR1 ; Producir retardo INC A ; Incrementa ACC MOV P0, A ; Escribe en el puel1o P0 CALL RETAR1 CJNE A, #05H , SAL0 ; Si se han realizado 5 incrementos de P0 sale CLR P0.0 ; Pone el bit 0 de P0 a CERO CLR P0.2 ; Pone el bit 2 de P0 a CERO CALL RETAR1 SETB P0.7 ; Pone el bit7 de P0 a UNO CALL RETAR1 MOV P0, #55H ; Carga P0 con 55H CALL RETAR1 MOV A, #FFH XRL P0, A ; Complementa P0 NOP END ; ORG 0300H ; MOV R0, #40H ; Se CARGA el registro R0 con #40H MOV R1, #85H ;Se CARGA R1 con #85H MOV R2, #FFH ;Se CARGA R2 con #FFH DJNZ R2, SAL2 ; Decrementa R2 y repite el lazo hasta que R2=0 DJNZ R1, SAL1 ; Lo mismo que la instruccin anterior, pero por cada ; lazo de R1, ejecuta FFH veces el lazo R2 DJNZ R0, SAL0 ; Lo mismo que las instrucciones anteriores, pero por ; cada lazo de R0, ejecuta 85H lazos de R1 y ; 85H * FFH lazos de R0 NOP RET END
El Microcontrolador 8051
CAP. 6
Se presentan dos circuitos de interface muy sencillos para poder introducir datos a los puertos del microcontrolador, cuando ste trabaja en modo lectura. El primero, muy simple, es til para la comprobacin de la mayor parte de los ejercicios qu aqu se exponen; no obstante, tiene el problema de los rebotes (Figura 6.5). El segundo circuito est pensado especialmente para los ejercicios que se refieren al tema de las interrupciones. Este circuito es, hasta cierto punto, inmune a los rebotes de los contactos (Figura 6.6).
Figura 6.5
El Microcontrolador 8051
CAP. 6
Figura 6.6
Se trata de controlar el nivel de liquido de un depsito, utilizando tres sondas detectoras de niveles A, B y C, y dos bombas B1 y B2 (Figura 6.7). 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:
El Microcontrolador 8051
CAP. 6
Figura 6.7
Entrada de informacin: SENSORES (sondas). Actuacin sobre los elementos finales: ACTUADORES. Sealizacin del proces{): INDICADORES.
1. SONDAS (entradas)
La sonda A seala el nivel mnimo de agua. Por debajo de este nivel, se indicar VACIO en el cuadro de INDICADORES. La sonda B seala el nivel ptimo y cuando se alcance se indicar LLENO. La sonda C seala el nivel peligroso e indica REBOSE. Las sondas sern ledas por el Microcontrolador a travs del Puerto P0. P0.0 - A P0.1- B P0.2 - C
El Microcontrolador 8051
CAP. 6
2. ACTUADORES (salidas)
Cuando ninguna de las sondas est mojada, 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, quedando la bomba B1 activada en modo mantenimiento. Si el nivel del 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 la sonda B (P0.1 ) se active cuando la A (P0.0), por debajo de la B, no lo est- se excita en el cuadro de indicadores una seal de ALARMA. P1.5 --ALARMA La Figura 6.8 muestra la disposicin de los actuadores, indicadores y sondas.
Figura 6.8
CAP. 6
El Microcontrolador 8051
CAP 7
CAPITULO 7
Temporizadores y contadores
7.1. INTRODUCCION.
El Microcontrolador 8052 tiene tres registros temporizadores-contadores denominados Timer 0 (T0), Timer 1 (T1) y Timer 2 (T2). El Microcontrolador 8051 tiene slo dos Timers. el T0 y el T1, de las mismas caracteristicas que los del 8052. Por esta razn, todo lo que se diga con relacin a los Timers 0 y 1 del 8052 es vlido para los del 8051 y viceversa. Los tres limers pueden ser configurados para que operen como temporizadores o como contadores. Cuando el dispositivo opera como Timer, el registro contador se incrementa cada ciclo mquina (la temporizacin se produce contando los ciclos mquina hasta sobrepasar el valor prefijado). As, se puede considerar que funciona como un contador de ciclos mquina, de tal forma que, como a cada ciclo mquina le corresponden 12 periodos de reloj, la razn de conteo es 1/12 de la frecuencia del oscilador. En la funcin contador, el registro es incrementado en respuesta a la transicin del nivel alto de tensin al nivel bajo (flanco descendente) de la seal externa aplicada al (pin 14) para el contador T0, al (pin 15) para T1 y al (pin 1) para el T2, este ltimo pertenece al 8052. La entrada externa es muestreada durante el estado 5 de la fase 2 (S5P2) de cada ciclo 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 ciclo siguiente. El nuevo valor de la cuenta aparece en el registro correspondiente durante el estado 3 de la fase 1 (S3PI) 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 descendente, la mxima razn de conteo es 1/24 de la frecuencia del oscilador. Mientras que el Timer 0 y 1 tienen cuatro modos de operacin, el Timer 2 tiene tres modos como se va a ver en el Apartado 7.2 y 7.3. Antes de pasar al estudio de los distintos tipos Timers, de su configuracin y de realizar algunos ejercicios de aplicacin, se va a analizar el circuito general que representa a los Timers presentes en los Microcontroladores 8052/8051. En 1a Figura 7.1 se observan cuatro bloques fundamentales que de izquierda a derecha se van a exponer a continuacin: _________________________________________________________________________ ITMAR, Mazatln 71 Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 7
-En la parte superior izquierda aparece un dispositivo conmutador que selecciona la forma de efectuar el conteo, bien mediante el oscilador reloj 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 acciona el interruptor (smil elctrico) que permite el paso de los impulsos que incrementan los registras de conteo. Este circuito permite dos opciones: bien se acciona el interruptor por software, para ello GATE=0 y TR1=1, que son bits imagen pertenecientes a unos registros de control que se estudiarn, o bien se acciona por hardware con la seal de nivel alto, aplicada al pin INT 1, estando GATE=1 y TR1=1. -En la parte central se encuentran los registros de conteo, que pueden ser de 8, 13 o 16 bits segn el modo de trabajo (TL 1, TH 1). -A la derecha del registro de conteo se encuentra el biestable representativo del bit de bandera, TF1, que seala el overflow o sobrepasamiento del registro contador. -Finalmente, si la interrupcin correspondiente est habilitada, se producira una interrupcin, tema que ser tratado en el prximo captulo.
Figura 7.1
El Microcontrolador 8051
CAP 7
Register), de los SFR (Special Function Register). El registro TMOD no es direccionable bit a bit> (Cuadro 7.1). Estos dos timer/counters tienen cuatro modos de operacin, como se indica a continuacin, que se seleccionan mediante los pares de bt (M0,M1) en el registro TMOD. CUADRO 7.1
El Microcontrolador 8051
CAP 7
que pertenece a! registro TCON (Timer/ Counter Control Regisler), registro que es direccionable bit a bit) (vase Cuadro 7.2).
Figura 7.2
CUADRO 7.2
El Microcontrolador 8051
CAP 7
La autorizacin de cuenta de pulsos, procedentes de la seal de reloj (actuando como temporizador) 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 pulsos a travs del pin INT1. As, mientras INT1 =1 los impulsos internos o externos de cuenta llegaran al contador TH1-TL1. Cuando INT1 =0 el valor del contador permanecer sin cambios, puesto que no llegarn mas pulsos de cuenta. Para ello es necesario que GATE = 1 y TR1 = 1. El Modo 0 de operacin es el mismo para el Timer 1 que para el Timer 0, sustituyendo los bits o seales con el subndice 1 por el subndice 0. As, el registro TMOD est dividido en dos partes iguales para el control del Timer 0 y el Timer 1; lo mismo sucede con TCON. Ejercicio 7.1. Timers 0 y 1 en Modo 0 como temporizador. Arranque por software. Este ejercicio prueba el funcionamiento del timer 0 en Modo 0, con la puyesta en marcha por software. El bit 0 del puerto P0 conmutar entre cero y uno en funcin de los valores del Timer 0. Los pasos a seguir son: 1-. Programar TMOD
2.3.4.5.-
Se activa el bit 0 del Puerlo 0. Se llama a la rutina Tempo para temporizar. Se desactiva el bit 0 del Puerto 0. Se llama a la rutina Tempo y se salta incondicionalmente al paso 2.
CAP 7
1.Carga de los registros del Timer 0 a sus valores mnimos correspondiendo con la mxima temporizacin. Se entiende que el flag TF0 se activar (0 1) cuando la cuenta rebase: XXX0 0000 0000 0000 XXX1 1111 1111 1111 = 1FFFH Se sugiere al lector que calcule la temporizacin considerando lo indicado en el Apartado 7.1, es decir, se incrementa a la razn de 1/12 de la frecuencia de reloj. Podemos adelantar que la temporizacin es muy pequea. 2.Se programa TCON.
El Microcontrolador 8051
CAP 7
El Microcontrolador 8051
CAP 7
CODIGO MOV TMOD, #10 P0.0 ACALL Tempo CLR P0.0 ACALL Tempo AJMP ; MOV MOV MOV ANL JZ RET B0203 TL1, #00 TH1, #00 TCON, #40 A,TCON A, #80 B0309
Ejercicio 7.3. Timer 1 en Modo 1 (16 bits) como temporizador hardware y software. Arranque por software
Este ejercicio permite ver la interaccin de la temporizacin de los Timers fisicos con la temporizacin, ya estudiada en el Captulo 5 -Ejercicio 5.1-, por software; de esta manera se pueden conseguir tiempos ms largos. El algoritmo de funcionamiento de este programa es el siguiente: por cada unidad de decremento del registro R0 se establece un ciclo de cuenta del Timer 1, de tal forma que si se carga el registro R0 con 0FH, y el Timer 1 con 0000H., se establecen 15 perodos completos de ciclos de conteo del Timer 1 ms los ciclos mquina que implica la ejecucin del programa, es decir, aproximadamente: 15 x 65536 ciclos mquina. Los registros TMOD y TCON estn configurados como en el ejercicio anterior, por lo que no se hace ningn comentario.
ETIQUETA CODIGO MOV RO, #0F MOV TMOD, # 11 SETB P0.0 ACALL Tempo CLR P0.0 ACALL Tempo AJMP B0205 ; MOV TL1, #00 MOV TH1, #00 MOV TCON, #40 MOV A,TCON
B0205
Tempo B0309
El Microcontrolador 8051
ANL JZ DJNZ MOV RET A, #B0 B0309 R0, Tempo R0, #0F
CAP 7
Ejercicio 7.4. Timer 1 en Modo 1 (16 bits) como temporizador: Arranque por hardware desde el exterior
Este ejercicio es similar al anterior, salvo en la forma de arrancar el Timer 1. En el ejercicio anterior, el arranque se haca va software al poner el bit 6 (TR1 ) del registro TCON a 1, estando el bit 7 (GATE) del registro TMOD a 0, como se puede observar en la Figura 7.2. Entonces el interruptor CONTROL se cerraba y llegaban los impulsos a los registros de conteo. Ahora la nueva configuracin parte de que GATE=1 y TR1=1, pero no es suficiente para arrancar el Timer 1; se necesita aplicar al pin 13 (INT1) un nivel de tensin alto desde el exterior. La figura 7.3 muestra las conexiones externas para este ejercicio. Configuracin de TMOD. b7 1 GATE Control Por Hardware C/T Es un Timer M1= 0 y M0 = 1 Modo 1 TH1 + TL1 = 16 bits 0 0 1 b0 = 90H
Figura 7.3
CAP 7
Tempo B0309
Figura 7.4
El Microcontrolador 8051
CAP 7
Figura 7.5
El Microcontrolador 8051
CAP 7
GATE Control por Hardware C/T Es contador M1 = 1 y M0=0 Modo 2 TL1 = contador, TH1 = cargador
FLAG TF1 Se pone a uno al Ocurrir desbordamiento SET Timer 1 Habilita el conteo
BO20C:
El Microcontrolador 8051
CAP 7
Figura 7.6
El Microcontrolador 8051
CAP 7
B0209:
Figura 7.7
El Microcontrolador 8051
CAP 7
7.3. EL TIMER 2
El Microcontrolador 8052, con relacin al 8051, presenta un temporizador/contador extra de 16 bits (el timer 2). Al igual que los Timers 0 y I, puede operar como temporizador o como contador de eventos. Dentro de los registros especiales (SFR), el registro (T2CON) puede configurarlo como Timer (C/T2=0) o como Counter (C/T2= 1) contador de flancos descendentes, introduciendo los mismos a travs del pin 1 (T2) del Microcontrolador 8052. El registro T2CON (Timer/Counter 2 Control Regisler) es un registro direccionable bit a bit. y su estructura aparece en el Cuadro 7.3. Es conveniente seguir el Cuadro 7.3 teniendo presentes las Figuras 7.8 y 7.10.
Cuadro 7.3
El Microcontrolador 8051
CAP 7
El Timer 2 tiene tres modos de operacin, pero slo los dos primeros sern tratados en este captulo. Modo captura. Modo autorrecarga. Modo generador seal comunicacin serie. Siendo la seleccin establecida segn los valores asignados, a los bits correspondientes del registro T2CON (vase Cuadro 7.4).
Cuadro 7.4
Figura 7.8
El Microcontrolador 8051
CAP 7
en la entrada externa T2EX en flanco descendente el valor que en ese instante est presente en los registros de conteo TL2 y TH2 es capturado dentro de los registros de captura RCAP2L y RCAP2H, respectivamente (RCAP2L y RCAP2H ocupan las posiciones de memoria CAH y CBH en el rea de los SFR). Adems, el flanco descendente en el pin T2EX, siendo EXEN2= 1, pone a 1 el flag de EXF2 y puede generar una interrupcin, si est habilitada (Figura 7.8).
ETIQUETA B0200:
SUB1: B0309 :
CODIGO SETB P0.0 ACALL SUB1 CLR P0.0 ACALL SUB1 AJMP B 0200 ; MOV TL2, #99 MOV TH2, #99 MOV T2CON, #04 MOV A.T2CON ANL A., #80 JZ B0309 RET
El Microcontrolador 8051
CAP 7
A continuacin se pasa a comentar las tareas que efecta el programa. -Primero se configura el Timer 2 como contador y en modo captura. b7 TCON2 TF2 EXF2 0 0 1 1 1 b0 1 = 0FH
Es un CONTADOR C/T2 = 1 Captura por flanco negativo en TEX2 -Enseguida se cargan los registros de conteo TL2 y TH2. -El contenido de TL2 se saca por el Puerto P0, por lo que el byte bajo de la cuenta de pulsos va apareciendo en el Puerto P0. -Pregunta si ha llegado algn flanco descendente en el pin T2EX. Si es as, y puesto que est programado en modo captura, pasa el contenido de TL2 y TH2 a RCAP2L y RCAP2H, respectivamente. -El contenido de RCAP2L se saca por el Puerto P0. pero se intercambian los nibbles (SWAP A). El tiempo de visualizacin del contenido de CAP2L est temporizado por el Timer 1 en la rutina Tempo. -Al regresar de la rutina de temporizacin se borra el flag EXF2, correspondiente a la transicin negativa. -Se pregunta por el flag de desbordamiento y si se activa quiere decir que el Timer 2 ha sobrepasado el valor FFFFH. -En estas condiciones el programa termina visualizando por el Puerto P0 el dato 55H. En la Figura 7.9 se muestra el esquema del montaje exterior:
El Microcontrolador 8051
CAP 7
Figura 7.9
B0209:
B021B:
El Microcontrolador 8051
CAP 7
Figura 7.10
El Microcontrolador 8051
CAP 7
La Figura 7.10 muestra las conexiones externas necesarias para este ejercicio.
Figura 7.10
BO20F:
Ejercicio 9.10. Timer 2 con autorrecarga al producirse un flanco descendente en el pin T2EX
La diferencia con el ejercicio anterior consiste en que, en este caso, la recarga tambin se produce al generar un flanco descendente en el pin 2 (T2EX) del microcontrolador. Los impulsos de conteo entran por el pin 1 (T2).
El Microcontrolador 8051
CAP 7
El esquema del montaje es el mismo que el de la Figura 7.9 del Ejercicio 7.8. En aqul se produca una captura al flanco descendente en el pin T2EX, mientras que en este caso se produce una recarga.
BO20F:
BO21B:
Ejercicio 7.11. Timer 2 con captura al producirse un flanco descendente en el pin T2EX
Si en el Ejercicio 7.10 se sustituye la instruccin: MOV T2CON, #0EH por MOV T2CON, #0FH
El Microcontrolador 8051
CAP 7
se producir la captura al producirse un flanco descendente por la lnea T2EX (pin 2). Si tambin se sustituye la instruccin: MOV P0, TL2 por MOV P0, CAP2L
que el incremento producido en TH2 + TL2 pasa al registro RCAP2H + RCAP2L visualizndose en el Puerto P0.
El Microcontrolador 8051
CAP 8
CAPITULO 8
Interrupciones
8.1. INTRODUCCION
La comunicacin asncrona de los sistemas perifricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales: a) Consultas (polling): Se comprueban cclicamente, mediante instrucciones del programa los registros de estado de los dispositivos de E/S. Unas lneas de dilogo (handshake) establecen el protocolo de comunicacin. As. en la Figura 8.1 se muestra cmo se establece el dilogo entre un sistema microcomputador o microcontrolador y dos perifricos mediante el procedimiento de consultas. Primero el programa pregunta si el bit del Puerlo 0 est activo, esto quiere decir que el Perifrico 1 solicita la atencin del sistema, en ese caso la CPU atiende al Perifrico 1. Cuando el proceso termina, el programa activa el bit 1 del Puerlo 0 para indicar, al Perifrico 1, que el proceso ha finalizado. El mismo procedimiento para el Perifrico 2. Las desventajas de este mtodo son: -En cada ciclo de programa ste tiene que interrogar los bits de consulta. -Al perifrico se le atiende despus de realizar la consulta y no cuando solicita la intervencin de la CPU. b) Interrupcin: Servicio directo entre perifricos y CPU, siempre que sta desee establecer el dilogo. Este servicio tiene la caracterstica de la inmediatez, pueden eliminarse total o parcialmente los ciclos de consulta y permite inhibir la interrupcin cuando se considera que es inoportuna y, por tanto, perjudicial para la marcha del proceso. Esta forma de trabajo es inherente al control de procesos en tiempo real. As, en la Figura 8.2, cuando el Perifrico 1 requiere la intervencin del sistema microcomputador o microcontrolador activa la interrupcin INT1, si est habilitada el sistema atender la peticin y ejecutar el proceso correspondiente de atencin en la RUTINA 1. El mismo procedimiento se establecera para el Perifrico 2.
El Microcontrolador 8051
CAP 8
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, la CPU vuelve al programa principal, continuando su tarea cclica justo donde la dej.
Figura 8.1
Figura 8.2
El Microcontrolador 8051
CAP 8
Una interrupcin puede ser inciada: Por un perifrico o circuito externo ajeno al microprocesador o microcontrolador a travs de los pines especficos del mismo. En estas condiciones la interrupcin es externa. Dentro del propio chip microprocesador o microcontrolador. Entonces la interrupcin es interna.
Toda interrupcin aceptada conduce a la ejecucin de un subprograma especfico cuya direccin de comienzo se indica en las posiciones de memoria de una tabla, que recibe el nombre de tabla de vectorizacin.
Figura 8.3
El Microcontrolador 8051
CAP 8
Los bits de bandera que generan las interrupciones pueden ser cancelados. en algunas interrupciones por hardware cuando stas son vectorizadas; no obstante todos los bits pueden cancelarse por software escribiendo ceros en el registro correspondiente. Cada una de estas fuentes de interrupcin pueden ser individualmente habilitadas o inhabilitadas poniendo uno o a cero el bit correspondiente del registro IE (Interrupt Enable Regisler) perteneciente a SFR (Special Funclion Register) (Cuadro 8.1).
Cuadro 8.1
Tabla 8.1
El Microcontrolador 8051
CAP 8
Las interrupciones, hacen uso de una tabla, tabla de vectorizacion, en la que se reservan 8 localidades para cada una de las interrupciones en la memoria de programas (Tabla 8.2).
Tabla 8.2
En estas 8 direcciones se puede escribir el programa de atencin a la interrupcin o, como es habitual, mediante un JMP<dir> se desva a una zona de memoria de programas lo suficientemente extensa para albergar la rutina de tratamiento de la interrupcin detectada. As por ejemplo, si se habilita la interrupcin exterior (bit EX0 correspondiente al pin INT0) y el comienzo del programa de tratamiento de la rutina est ubicado en la direccion 0450H, la tabla de vectorizacin contendr en la localidad 0003H el cdigo de operacin de la instruccin de salto (y la parte alta de la direccin del salto si es un salto absoluto AJMP), en la siguiente localidad 0004H el byte alto de la direccin de salto y en la direccion 0005H el byte bajo de la direccin del salto (Figura 8.4).
Figura 8.4
10.3. EL PROCESO DE INTERRUPCION
El Microcontrolador 8051
CAP 8
El ciclo de escrutinio se repite con cada ciclo mquina y los valores escrutados son los que corresponden a la activacin de la interrupcin presente en el S5P2 del ciclo mquina anterior. Puede suceder que una bandera de interrupcin sea activada y no pueda responder el sistema por encontrarse en una de las situaciones de bloqueo comentadas anteriormente. En estas condiciones puede suceder lo siguiente: a) Que desaparezca la situacin de bloqueo y que la solicitud de interrupcin siga activa. En este caso la interrupcin ser tratada por el microcontrolador. b) Que desaparezca la situacin de bloqueo, pero que en ese intervalo la seal de solicitud de interrupcin se haya desactivado. En ese caso la interrupcin ser denegada y deber ser solicitada nuevamente. El ciclo completo es mostrado en la Figura 8.5, considerando las condiciones idneas, es decir, cuando el ciclo mquina C2 coincide con el ltimo ciclo de instruccin que se est ejecutando y que esta instruccin no sea una RETI o un acceso a los registros IE o IP. Puede suceder tambin que una interrupcin de un nivel de prioridad mas alto se active antes del estado S5P2 del ciclo de mquina etiquetado C3 en la Figura 8.5; de acuerdo con lo dicho anteriormente, esta interrupcin ser vectorizada durante los ciclos C5 y C6, sin que ninguna instruccin de la rutina de prioridad ms baja haya sido ejecutada.
El Microcontrolador 8051
CAP 8
Con relacin al borrado de los indicadores, una vez servida la rutina de interrupcin, se ha de decir que en algunos casos, el borrado es automtico, aspecto denominado como borrado por hardware; en el otro caso, es el programador el que debe estar pendiente de su borrado; modalidad de borrado por software.
Figura 8.5
No se produce borrado por hardware en las interrupciones del puerto serie y del Timer 2. Los flags de las interrupciones exteriores (INT0 e INT1) son borrados por hardware cuando se activan por flanco. Si estn activadas por nivel, ste debe volver a su estado de no activacin> para que salga de la rutina de interrupcin. Una vez validada la interrupcin y producido el salto a la rutina de servicio, la CPU guarda en la memoria pila (stack) el contenido del contador de programa (PC = Program Counter) y no salvaguarda el registro de estado (PSW). La rutina de interrupcin debe finalizar con la instruccin RETI, que informa a la CPU de que la rutina ha finalizado. A rengln seguido se recuperan de la memoria de pila los dos bytes de direccin del programa principal, instruccin siguiente a la que en proceso recibi la interrupcin y que concluy antes de pasar al proceso de tratamiento. Estos dos bytes recargados en el contador de programa (PC) permiten que se siga ejecutando el programa principal, sin ms que sufrir una relativa pequea prdida de tiempo.
El Microcontrolador 8051
CAP 8
Los bits b6 y b7 no estn asignados, y lo mismo pasa con el b5 para el Microcontrolador 8051, puesto que no tiene Timer2. Una interrupcin con nivel de prioridad bajo puede ser interrumpida por otra de nivel de prioridad alto, pero no por otra de nivel de prioridad bajo. Una interrupcin de prioridad alta no puede ser interrumpida por otra fuente de interrupcin, salvo por la interrupcin externa RESET.
Cuadro 8.2
Si dos peticiones de interrupcin de distintos niveles de prioridad son recibidas simultneamente la interrupcin de nivel de prioridad alto es servida. Si la peticin corresponde a interrupciones del mismo nivel de prioridad y se producen simultneamente, un escrutinio interno da secuencia al servicio de una manera predeterminada segn se muestra en la tabla 8.3
Tabla 8.3
El Microcontrolador 8051
CAP 8
As, dentro del mismo nivel de prioridad, hay una segunda estructura de prioridades determinada por el orden de escrutinio segn la tabla anterior. Esta prioridad, dentro del mismo nivel, solamente es utilizada para resolver estas peticiones simultneas. La Figura 8.6 resume y esquematiza los aspectos ms importantes que han sido tratados con relacin al tema: ____ ____ INT0 e INT1 pueden ser activas por nivel o flanco. El registro IE (Interrupt Enable) permite interrupciones o habilitarlas individualmente. inhabilitar todas las
El registro IP (Interrupt Priority) puede disponer cada interrupcin, individualmente, en la cola de interrupciones de alta o baja prioridad.
Hasta aqu se ha tratado el tema de las interrupciones de una forma general. A continuacin se estudia cada uno de los tipos de interrupciones, exceptuando las de los puertos de comunicaciones.
Figura 8.6
El Microcontrolador 8051
CAP 8
El programa consta de un cuerpo principal que pretende simular el funcionamiento de la pantalla de luces deslizantes del Auto Increible. Un bit se desplaza de izquierda a derecha y de derecha a izquierda y excitar 8 leds situados a la salida del Puerto 0 (P0). Una rutina de temporizacin permite modificar la frecuencia de desplazamiento del bit. ____ En estas condiciones se tiene el efecto referido, pero cuando por el pin 12 (INT0), interrupcin externa del microcontrolador, se produce un flanco descendente, y dado que est habilitado este tipo de interrupcin, el microcontrolador ejecuta una rutina, asociada a la interrupcin, cuyos efectos externos son hacer parpadear diez veces y simultneamente todos los leds del Puerto 0 (P0) para, una vez concluida esta secuencia, continuar con el programa principal del bit deslizante. A continuacin se indican, someramente, las operaciones que van a tener lugar de una manera secuenciada: --Cuando el microcontrolador recibe la interrupcin y sta es aceptada, por estar habilitada (IE), el contador de programas (PC) no se incrementa para ejecutar la _________________________________________________________________________ ITMAR, Mazatln 103 Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
siguiente instruccin, sino que consulta la tabla de vectorizaciones en la localidad correspondiente al tipo de interrupcin. --El contador de programas salta a ejecutar la rutina situada en la direccin sealada en la tabla de vectorizacin. -Antes de proceder a la ejecucin de la rutina asociada a la interrupcin, guarda en la pila el PC de la instruccin siguiente en la que fue interrumpido el sistema para, una vez concluida la rutina de interrupcin, conocer la instruccin que le corresponda ejecutar y permitir, de esta manera, no romper la secuencia del programa principal. -En este punto se recuerda al usuario que guarde en la pila el registro de estado (PSW) por si es modificado por la rutina y preste atencin a los registros y variables que son utilizados en comn y no se encuentre con que los valores que utilizaba en el programa principal han sido modificados por la rutina, lo que rompera la secuencia del programa principal. En este caso, proceda a guardarlos, justo al comienzo del programa de la rutina, ya recuperarlos antes de que sta concluya. -El regreso de la rutina se efecta colocando al final de la misma, y justo despus de recuperar los valores de los registros y variables de la pila, la instruccin RETI. A continuacin se muestra el circuito (Fig. 8.7), el mapa de memoria, y el programa fuente del ejercicio. Nota: Es importante Que el interruptor o pulsador utilizado para producir la interrupcin sea antirrebote) (vase Figura 6.6).
Figura 8.7
El Microcontrolador 8051
CAP 8
Configuracin de registros:
Programa Fuente:
; DESPLA0.ASM ; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0) ; EQU 0300H ; Comienzo de la RUTINA de RETARDO. EQU 0400H ; Comienzo de la RUTINA de INTERRUPCION. ; ORG JMP ; ORG MOV MOV MOV SETB RLC 0003H ; Vectorizacin de la RUTINA DE INTERRUPCION (INT0). INT0 ; Llamada a la RUTINA DE INTERRUPCION. 0200H TCON, #01H IE, #81H A, #00H C A ; Se programa la INTO por flanco. ; Habilitada interrupcin INTO. ; Se pone el CARRY a 1. ; Rotacin de un bit ala izda.
RETARDO INT0
SAL0:
El Microcontrolador 8051
MOV P0, A CALL RETARDO JNB A, 7, SAL0 SAL1: RRC MOV CALL JNB JMP ; ORG PUSH MOV PUSH MOV MOV MOV DJNZ DJNZ DJNZ POP MOV POP RET ; ORG PUSH MOV PUSH MOV PUSH MOV MOV CALL MOV CALL DJNZ POP MOV POP MOV POP A RETI END A P0, A RETARDO A,0, SAL1 SAL0 0300H A A, R0 A R0, #04H R1, #20H R2, #FFH R2, SAL4 R1, SAL3 R0, SAL2 A R0, A A ; Comienzo de la rutina de RETARDO. ; Se guarda el ACC en el stack (PILA). ; Se escribe en el Puerto 0 (P0). ; Se llama a la rutina de RETARDO. ; Se testea el bit 8. Si es < > O se comienza el ; desplazamiento a la dcha.
CAP 8
0400H A A, PSW A A, R0 A R0, #0AH P0, #FFH RETARDO P0, #00H RETARDO R0, SAL5 A R0, A A PSW, A
; Comienzo de la rutina de interrupcin INT0. ; pone en intermitencia todos los bits del P0. ; Se guarda en el stack el registro de estado. ; Se guarda. tambin, el registro R0.
SAL5:
El Microcontrolador 8051
CAP 8
As estar oscilando entre los dos estados hasta ocho veces. Esquema del circuito (Figura 8.8)
Como se puede observar en la figura, el pulsador pone en marcha simultneamente las dos interrupciones INT0 y T2EX, ambas activas, como se podr ver en la inicializacin en flanco descendente. En funcin del valor escrito en el registro de prioridades (IP) se estudian dos opciones: ____ a) Que se ejecute la interrupcin INT0 y posteriormente T2EX, pulsando una sola vez. b) Que se invierta el orden de ejecucin. _________________________________________________________________________ ITMAR, Mazatln 107 Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Figura 8.8
Mapa de memoria
Algoritmo
Como se ha sealado antes, han de observarse, de momento, dos opciones a) y b). Para que se cumpla la primera opcin, no es necesario programar el registro de prioridades (IP), puesto que, por defecto, segn se estudi, INT0 tiene mayor prioridad que T2EX, por esta razn, en este programa: IP 00H Para que se cumpla la segunda opcin, a T2EX se le da la prioridad alta ya lNT0 la prioridad baja, es decir:
CAP 8
; PRIOR0.ASM. ; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0) , ; adems, presenta otros programas alternativos ; EQU 0300H ; Comienzo de la RUTINA de RETARDO. EQU 0400H ; Comienzo de la RUTINA de INTERRUPCION. EQU 0500H ; Comienzo de la RUTINA de INTERRUPCION (T2EX). ; ; -------------------------------------------------------------------------------------------------------ORG 0003H ; Vectorizacin de la RUTINA de INTERRUPCION ; (INT0). ; Llamada a la RUTINA DE INTERRUPCION.
JMP INT0 ; ; -------------------------------------------------------------------------------------------------------ORG 002BH ; Vectorizacin de RUTINA T2EX JMP T2EX ; ; -------------------------------------------------------------------------------------------------------ORG MOV MOV MOV MOV MOV SETB RLC MOV CALL JNB 0200H TCON, #0lH T2CON, #08H IE, #A1H IP, #00H A, #00H C A P0, A RETARDO A. 7, SAL0 ; Programa principal. ; (TCON01H flanco); (TCON00H nivel). ; Se programa la T2EX por flanco. ; Habilitada interrupcin INT0 y T2EX. ; Define prioridad. IP= O por defecto. : IP= 20H alta prioridad para T2EX. ; Pone a 0" ACC. ; Se pone el CARRY a 1". ; Rotacin de un bit a la izda. : Se escribe en el Puerto 0 (P0). ; Se llama a la rutina de RETARDO. ; Se testea el bit 8. Si es < > 0 se comienza el ; desplazamiento a la dcha. ; Rotacin de un bit a la dcha. ; Se escribe en el (P0).
SAL0:
SAL1:
RRC A MOV P0, A CALL RETARDO JNB A,O, SAL1 ;Salta si el bit ACC.O es <> de 0. JMP SAL0 ; ; -------------------------------------------------------------------------------------------------------ORG 030H ; Comienzo de la rutina de RETARDO. PUSH A ; Se guarda el ACC en el stack (PILA). MOV A, R0 PUSH A MOV A, PSW PUSH A
El Microcontrolador 8051
CAP 8
SAL5:
SAL6:
MOV R0, #15H ; Rutina comentada en el Ejercicio 5.5. MOV R1, #2OH MOV R2, #FFH DJNZ R2, SAL4 DJNZ R1, SAL3 DJNZ R0, SAL2 POP A MOV PSW, A POP A MOV R0, A POP A ; Se recupera ACC del stack. RET ; ; -------------------------------------------------------------------------------------------------------ORG 0400H ; Comienzo de la rutina de interrupcin INT0 ; poniendo en intermitencia todos los bits del P0. PUSH A MOV A, PSW PUSH A ; Se guarda en el stack el registro de estado. MOV A, R0 PUSH A ; Se guarda, tambin, el registro R0. MOV R0, #0AH ; Contador de eventos. MOV P0, #0FFH CALL RETARDO MOV P0, #00H CALL RETARDO DJNZ R0, SAL5 POP A ; Se recuperan los registros del stack. MOV R0, A POP A MOV PSW, A POP A RETI ; -------------------------------------------------------------------------------------------------------ORG 0500H ; Comienzo de la rutina de interrupcin (T2EX). ANL T2CON, #BFH ; Se borra el flag EXF2 por soft. PUSH A MOV A, PSW PUSH A MOV A, R0 PUSH A : Hasta aqu guardar registros en el stack. MOV R0, #08H ; Contador de eventos. MOV P0, #0F0H CALL RETARDO MOV P0, #0FH CALL RETARDO DJNZ R0, SAL6 POP A : Se recuperan los registros del stack. MOV R0, A POP A MOV PSW, A POP A RETI ; END
El Microcontrolador 8051
CAP 8
En este ejercicio es interesante comprobar, adems de las interrupciones simultaneas, los siguientes aspectos: En el caso de que se est ejecutando una interrupcin, qu suceder si se activa otra de menor o igual prioridad ?
-Lgicamente. la segunda interrupcin no interrumpir la ejecucin de la primera, pero ser ejecutada, una vez finalizada la primera, porque la memoriza en la cola de ejecucin de rutinas. .Qu suceder si ejecutando el programa de la rutina de interrupcin se activa otra de mayor prioridad?
-Abandona la rutina de interrupcin para ejecutar la segunda, y una vez finalizada sta regresar a completar la ejecucin de la primera. Para comprobar este comportamiento se deber independizar las interrupciones colocando para cada entrada un pulsador.
El Microcontrolador 8051
CAP 8
-Repasar la programacin de los Timers. -Ver cmo se activa una interrupcin al producirse el desbordamiento en los Timers. -Observar el mecanismo de la vectorizacin. En este caso se utiliza el Timer 1, pudiendo sustituirse sin ningn inconveniente por el Timer 0. _________________________________________________________________________ ITMAR, Mazatln 112 Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Figura 8.9
Programa fuente
; DESPLA1.ASM. ; Desplaza un bit en el puerto P0, con velocidad variable en ; funcin del dato ledo en el puerto de entrada P1 ; ORG 001BH JMP 030H ; Vector de la interrupcin Timer 1. ; ORG 0200H MOV TMOD, #10H ; Timer 1 como temporizador en Modo 1. MOV IE, #88H ; Validacin de interrupcin Timer 1. MOV IP, #08H ; Prioridad para el Timer 1 (no es necesaria). MOV A, #01H ; Se carga el ACC con 01H. MOV TH1, #00H ; Se carga la parte alta del Timer 1. MOV TL1, #00H ; Se carga la parte baja del Timer 1. MOV TCON, #40H ; Se arranca el Timer 1. NOP JMP SAL0 ; Se cierra en un bucle que no hace nada. ; ; --------------------------------------------------------------------------------------------------------ORG 0300H ; Rutina de desplazamiento y lectura de P1 RL A ; Desplazamiento a la izq. del ACC. MOV P0, A ; Saca dato por el P0 MOV TL1, P1 ; Lee P1 MOV TH1, P1 RETI ; END
SAL0:
El Microcontrolador 8051
CAP 8
-Estudiar las interrupciones del Timer 2. -Cargar los registros de conteo con los datos procedentes de una tabla. -Observar el borrado del flag de interrupcin del Timer 2 por software
Figura 8.10
CAP 8
Figura 8.11
Program fuente
; INTETIM2.ASM. ; ; Igual que DESPLA0.ASM, pero la velocidad de desplazamiento ; es funcin de los valores registrados en una TABLA. ; EQU 0500H ; Comienzo de la TABLA. EQU 40H ; Variable que indica el sentido de ROTACION. EQU 41H ; Variable dato de salida por P0. EQU 0300H ; Comienzo rutina Timer 2. ; ; -----------------------------------------------------------------------------------------------------------ORG 0500H ;Comienzo de los datos de la TABLA. .BYTE FFH, 80H, 40H, 00H, 40H, 80H, FFH ORG 002BH ; Vector de rutina interrupcin (Timer 2). JMP TIMER2 ; ; ------------------------------------------------------------------------------------------------------------ORG 020H ; Programa de inicializacin y principal. MOV DPTR, #TABLA : Se carga inicio de TABLA en puntero DPTR. MOV AUX, #01H ; Se inicia movimiento rotacin a izda. MOV ROTA, #00H ; Se inicia valor salida leds por puerto PO. SETB C ; C 1. Este es el bit que se desplaza. MOV IE, #A0H ; Se habilita interrupcin Timer 2. MOV IP, #40H ; Mxima prioridad Int. Time,2 (no es necesario). MOV TL2, #00H ; Se carga registro contador Timer 2. MOV TH2, #00H
El Microcontrolador 8051
CAP 8
SAL0:
MOV T2CON, #04H ; Se arranca Time,2. NOP ; Simula el programa principal. JMP SAL0 ; ; ------------------------------------------------------------------------------------------------------------ORG ANL PUSH MOV JZ MOV RLC MOV JMP MOV RRC MOV MOV MOV MOVC MOV MOV MOV INC MOV JZ MOV CJNE MOV MOV JMP MOV CJNE MOV MOV CLR POP RETI ; END 0300H ; Comienzo de la rutina de interrupcin. T2CON, #BFH ; Se borra la bandera de interrupcin. A ; Guardar registros programa principal. A, AUX ; Para saber el sentido de rotacin que ... SAL1 ; ...corresponde. Si AUX = 01H a la izda ... A, ROTA ;...si AUX=00H a la dcha. A ROTA, A SAL2 A, ROTA A ROTA, A P0, ROTA ; El contenido de ROTA se saca por el P0. A, #00H ; Se inicializa ACC. A, @A+DPTR ; Se obtiene dato de temporizacin de TABLA. TL2, A ; Se carga dato TABLA en Time,2. TH2, A T2CON, #04 ;Se arranca Timer2. DPTR ; Se incrementa puntero de TABLA. A, AUX ; Si el bit que se desplaza lleg al extremo ... SAL3 ; ...del recorrido se cambia el sentido de la ... A, ROTA ; ...rotacin. cambiando el valor de AUX. A, #80H, SAL4 AUX, #00H DPTR, #TABLA ; Se inicializa puntero de TABLA. SAL4 A, ROTA A, #01H,SAL4 AUX, #01H DPTR, #TABLA C A
SALl: SAL2:
SAL3:
SAL4:
El Microprocesador 8051
CAP 9
CAPITULO 9
Comunicaciones
9.1. INTRODUCCION
El puerto serie de los Microcontroladores 8052/8051 trabaja en el modo fullduplex, lo que significa que puede recibir y transmitir simultneamente. Como receptor tiene un buffer que le permite recibir un segundo byte, antes de que el byte previamente recibido haya sido ledo por el registro receptor. (Sin embargo, si el primer byte no ha sido ledo en el tiempo en que el segundo byte se completa, uno de los dos bytes se pierde.) A los registros receptor y transmisor de los puertos serie se accede por un nico registro que se denomina SBUF, estando situado en la direccin 99H del SFR (Special Function Register). Escribiendo en el SBUF carga el byte a transmitir y leyendo del SBUF se accede al byte recibido. El puerto serie puede operar en cuatro modos seleccionados utilizando los bit 6 = SM1 y bit 7 = SM0 del registro SCON (Apartado 9.3): Modo 0: Los datos en serie entran y salen a travs de la lnea RXD. TXD presenta los impulsos de desplazamiento del reloj. La palabra de informacin a transmitir o recibir es de 8 bits, siendo el primero en salir o en llegar el bit menos significativo. La velocidad de transmisin expresada en baudios (baudio = bits/seg) est dada por la relacin 1/12 de la frecuencia de reloj del microcontrolador . Modo 1: Es una comunicacin ms acorde con los estndares habituales. Utiliza 10 bits que son transmitidos a travs de TXD o recibidos a travs de RXD. Los bits utilizados tienen la siguiente funcin: - 1 bit de start (0) (seala el comienzo). - 8 bits de datos (LSB = primero). -1 bit de stop ( 1 ). La velocidad de transmisin puede ser ajustada por el usuario dentro de un amplio rango. Modo 2: Transmite a travs de TXD y recibe por RXD como en el caso anterior. Utiliza 11 bits distribuidos de la siguiente forma: -1 bit de slart (0). -8 bits de datos (LSB primero). -1 bit de dato (9.0 bit) (programable). -1 bit de Stop (1)
El Microprocesador 8051
CAP 9
El noveno bit, en la transmisin, puede ser 0 o 1 y es la imagen del bit TB8 en el registro SCON. As, el bit de paridad (P, en PSW) puede ser cargado en TB8 y asignado a este noveno bit en la transmisin. En la recepcin este noveno bit se refleja en el bit RB8 del registro SCON, mientras el bit de Stop es ignorado. La velocidad de transmisin es programable bien a 1/32 o 1/64 de la frecuencia del oscilador. Modo 3: Como en el caso anterior, 11 bits son transmitidos a travs de TXD o recibidos por RXD, de la siguiente manera: -1 bit de slart (0). -8 bits de datos (LSB primero). -1 bit de dato (9.o bit). -1 bIt de stop ( 1). Como se puede observar, el Modo 3 es igual al Modo 2 excepto en la velocidad de transmisin. En el Modo 3 la velocidad de transmisin puede ser ajustada por el usuario dentro de un amplio rango. En los cuatro modos, la transmisin es iniciada mediante cualquier instruccin que use el registro SBUF como destino. La recepcin se inicia en MODO 0 por la condicin R1=0 y REN=1 y en los otros modos Modo 1, 2 y 3, cuando se recibe el bit start y REN=1.
El Microprocesador 8051
CAP 9
SM2 no tiene ningn efecto en Modo 0, y en Modo 1 puede utilizarse para comprobar la validez del bit de Stop. En una recepcin en Modo 1, si SM2=1, la interrupcin de la recepcin no se ver activada a no ser que se reciba un bit de Stop vlido, es decir, a nivel alto.
El Microprocesador 8051
CAP 9
BAUDIOS en modo 0 =
Los baudios en, Modo 2 dependen del valor del bit 7 (SMOD) del registro PCON en el SFR. Si SMOD =0 (valor por defecto despus del RESET) los baudios son 1/64 de la frecuencia del oscilador-reloj del microcontrolador. Si SMOD = 1 la velocidad de comunicacin es 1/32 de la frecuencia del oscilador-reloj del microcontrolador, es decir:
BAUDIOS en modo 2 =
En el 8051, los baudios en, Modo 1 y 3 son determinados por la relacin de desbordamiento del Timer 1. En el 8052 la velocidad de comunicacin puede ser obtenida utilizando el Timer 1 o el Timer 2 o con ambos (uno para transmitir y el otro para ret:ibir).
BAUDIOS en modos 1 y 3 =
El Timer 1I puede ser configurado bien como temporizador o como contador y en cualquiera de sus tres modos. Se aconseja, porque as se utiliza en la mayora de las aplicaciones, configurarlo como temporizador en modo autorrecarga (TMOD = 20H). En este caso los baudios vienen dados por la frmula:
2SMOD frecuencia del oscilador 32 12(256 TH1)
BAUDIOS en modos 1 y 3 =
El Microprocesador 8051
CAP 9
Se pueden lograr velocidades de comunicacin muy bajas con el Timer 1, permitiendo la interrupcin y configurando el Timer para el conteo con 16 bits (TMOD = 10H) y usando la interrupcin del Timer para efectuar la recarga sobre el registro de conteo. La Tabla 9.1 lista algunas de las velocidades de comunicacin comnmente utilizadas y cmo pueden ser obtenidas utilizando el Timer 1. TABLA 9.1
As, por ejemplo, para obtener una velocidad de comunicacin de 9.600 baudios con el Timer 1 en modo autorrecarga como temporizador. Es decir, con el Timer 1 en Modo 2. Si SMOD = 0, y TH1 = FDH = 253, y aplicando la frmula:
BAUDIOS en modos 1 y 3 = 2SMOD frecuencia del oscilador 32 12(256 - TH1)
BAUDIOS =
El Microprocesador 8051
CAP 9
CUADRO 9.2
Se puede observar a la derecha de la Figura 9.1, que las velocidades en baudios para la transmisin y recepcin pueden ser diferentes, segn se active RCLK y/o TCLK y as poder actuar simultneamente con el Timer 1 y el Timer 2. EI modo generador de baudios acta de forma similar que el modo autorrecarga estudiado en el Captulo 7. Al producirse el ciclo de desbordamiento en TH2, los registros de conteo del Timer 2 son recargados con los valores de 16 bits de los registros RCAP2H y RCAP2L que previamente fueron inicializados por software. Los baudios en Modo 1 y 3 son determinados por la relacin de desbordamiento del Timer 2. De una forma general se pueden expresar as:
BAUDIOS en modos 1 y 3 =
Figura 9.1
El Microprocesador 8051
CAP 9
Concretando, el Timer 2 puede ser configurado bien como temporizador o como contador. En la mayora de las aplicaciones se configura como Timer (C/T2 =0). La operacin como Timer en el modo generador de baudios es un poco diferente de la estudiada como temporizador en el Apartado 7.3.2. Normalmente como temporizador comn el registro de conteo se incrementaba cada ciclo mquina, es decir, a 1/12 de la frecuencia del oscilador. Como generador de baudios se incrementa cada periodo de estado, es decir, a 1/2 de la frecuencia del oscilador. En este caso los baudios estn dados por la frmula:
BAUDIOS en modos 1 y 3 =
donde (RCAP2H:RCAP2L) es el contenido de dichos registros en formato de 16 bits, como enteros y sin signo. Un estudio ms detallado de la Figura 9.1 indica que para que acte como generador de baudios debe ser RCLK = TCLK = 1 en T2CON, como indica la figura. El ciclo de desbordamiento en TH2 no activa el indicador TF2 ni produce interrupcin, aspecto este que podra darse en los timers del Captulo 7. Por consiguiente, cuando se utilice el Timer 2 como generador de baudios no se debe desactivar la interrupcin del Timer 2. Obsrvese adems que, si EXEN2 se activa, una transicin descendente en el pin T2EX activar la bandera EXF2, pero no causar recarga del Timer 2. As pues, cuando el Timer 2 se utilice como generador de baudios, T2EX puede ser empleado, si se desea, como un generador de interrupciones externas. Se aconseja no leer ni escribir los registros TH2 y TL2 cuando el Timer 2 est trabajando {TR2=1) como generador de baudios. Bajo estas condiciones el registro de conteo se incrementa cada periodo de estado y el resultado de una lectura o escritura puede producir una prdida de exactitud en la evaluacin del tiempo. Los registros RCAP pueden ser ledos, pero no deben ser escritos, puesto que se podra producir solapamiento en la recarga y originar errores de escritura y/o recarga. Si se desean hacer estas operaciones, desconctese el Timer 2 (desactivar TR2) antes de acceder al Timer 2 o a los registros RCAP. A continuacin describiremos en detalle los cuatro modos de operacin.
El Microprocesador 8051
CAP 9
Como se ha dicho anteriormente la entrada y salida de datos en serie se produce a travs del pin 10 {RXD) del microcontrolador. El pin 11 (TXD) es la salida de los pulsos de desplazamiento {Shift Clock). Ocho bits de datos se transmiten o reciben comenzando por el menos significativo {LSB). La velocidad es fija y corresponde a 1/12 de la frecuencia del oscilador del microcontrolador. En la Figura 9.2 se muestra un diagrama simplificado y funcional del puerto serie en Modo 0. Para poder seguir mejor el proceso de comunicacin en Modo 0, utilcense los cronogramas de la Figura 9.3 al tiempo que se lee el siguiente texto. La transmisin es iniciada por cualquier instruccin que utiliza SBUF como registro de destino. La seal de escritura en SBUF en el estado S6P2, tambin carga un 1 en la posicin novena del registro de desplazamiento de transmisin e indica al bloque control TX que comience la transmisin. El intervalo de tiempo que transcurre desde la escritura en SBUF y la activacin de la seal de control SEND es igual aun ciclo mquina completo. SEND autoriza la salida del dato contenido en el registro de desplazamiento de una forma alternada a travs del pin 10 {RXD =P3.0) y tambin autoriza la salida de la seal de reloj simtrica (Shjft Clock) a travs del pin 11 {TXD =P3.1 ). La seal TXD {SHIFT CLOCK) est a nivel bajo durante los estados S3, S4 y S5 de cada ciclo mquina, ya nivel alto durante los estados S6, S1 y S2. En la fase S6P2 de cada ciclo mquina en el que SEND es activa, el contenido del registro de desplazamiento transmisor se desplaza a la derecha una posicin. Por cada bit de dato que se desplaza al exterior por la derecha un bit cero ingresa por la izquierda. Cuando el bit ms significativo {MSB) del byte de datos est en la posicin de salida del registro de desplazamiento, entonces el 1 que fue inicialmente cargado en la posicin novena se encuentra a la izquierda del MSB y todas las posiciones a la izquierda de ste contienen ceros. Esta condicin previene al bloque de control TX para que haga un ltimo desplazamiento, desactive SEND y active la seal de interrupcin TI. Estas acciones ocurren en la fase S1P1 del dcimo ciclo mquina despus de escribir en SBUF. La recepcin es iniciada por la condicin REN =1 y R1 =0. En la fase S6P2 del siguiente ciclo mquina, la unidad de control RX escribe los bits 11111110 en el registro de desplazamiento receptor, y en la siguiente fase de reloj activa RECEIVE. La seal de control RECEIVE autoriza la salida de la seal de reloj simtrica SHIFT CLOCK por la lnea TXD. SHIFT CLOCK efecta la transicin en la fase S3P1 y S6P1 de cada ciclo mquina. En la fase S6P2 de cada ciclo mquina en que la seal de control RECEIVE es activa, el contenido del registro de desplazamiento receptor es desplazado a la izquierda una posicin. El bit que
El Microprocesador 8051
CAP 9
ingresa desde el exterior por la derecha es el bit de dato que ha sido muestreado en el pin 10 (RXD=P3.0) en la fase S5P2 del mismo ciclo mquina.
Figura 9.2 Como los bits de datos entran por la derecha, los unos cargados inicialmente son desplazados afuera por la izquierda. Cuando el 0 cargado inicialmente se encuentre en el extremo izquierdo del registro de desplazamiento, entonces el bloque de control RX hace un ltimo desplazamiento y carga SBUF, con el byte ingresado. En el estado S1P1 del dcimo ciclo mquina despus de la escritura en SCON, la seal de control RECEIVE es borrada y la bandera de interrupcin RI es puesta a 1.
El Microprocesador 8051
CAP 9
Figura 9.3
El Microprocesador 8051
CAP 9
Figura 9.4
Objetivos
-Programar el puerto serie como transmisor en Modo 0. -Transmitir por el puerto serie el byte que se introduce en paralelo por el Puerto 0. -Obtener la seal de sincronismo y visualizarla por el pin TXD.
Esquema
Como se ha indicado en los objetivos, por la lnea RXD se obtiene el byte de datos que previamente se captura en paralelo por el Puerto 0, como se indica en la
El Microprocesador 8051
CAP 9
Figura 9.5, la seal de sincronismo se obtiene en el pin TXD. El dato que se transmite en el ejemplo es AAH.
Figura 9.5
ETIQUETA
CODIGO MOV SCON, #00 CLR P2.0 MOV A, P0 MOV SBUF, A SETB P2.0 MOV A, SCON JZ B020B CLR P2.0 LCALL SUB1 CLR .TI SJMP ; MOV MOV MOV DJNZ DJNZ B0205 R0, #01 R1, # 03 R2, #05 R2, B0306 R1, B0304 ; Pto. Serie en Modo 0. Transmisin. ; Bit de aviso de transmision en cero. ; Dato a transmitir. ; Inicia la transmisin. ; Avisa que inicia la transmisin. ; Ya se transmiti el 8 bit ? ; Borra bit de aviso de transmisin. ; Solo un retardo. ; Borro bandera de interrupcion. ; Esto permite que haya otra transmisin ; Empiezo de nuevo. ; Rutina de retardo.
B0205: B020B:
El Microprocesador 8051
CAP 9
Objetivos
-Programar el puerto serie como receptor en Modo 0. -Recibir en el puerto serie el byte que se enva desde el exterior por el pin RXD. -Efectuar el tratamiento de la comunicacin utilizando interrupciones.
En la Figura 9.6 se observa cmo el dato se introduce utilizando un pulsador; la frecuencia de captura en el pin RXD es tan elevada que slo se puede observar la presencia de unos o ceros en el Puerto 0 de salida.
Figura 9.6
El Microprocesador 8051
CAP 9
En el pin TXD se tendrn los impulsos de sincronismo que se corresponden con los pulsos de reloj del registro de desplazamiento.
B0200:
LJMP 0400 ; ;------------------------------------------------------------------------; Inicializacin ORG 200H MOV IE, #90 MOV SCON, #10 LCALL RETARDO SJMP B0200 ; ;-----------------------------------------------------------------------; Rutina de RETARDO ORG 300H MOV R0, #02 MOV R1, #FF MOV R2, #FF DJNZ R2, B0306 DJNZ R1, B0304 DJNZ R0, B0302 RET ; ;----------------------------------------------------------------------; Rutina de Interrupcin ; Realiza las siguientes tareas: ; 1) Sale del modo de recepcin. ; 2) Salva registros en el slack. ; 3) Carga el contenido de SBUF en el ACC. ; 4) Visualiza el dato en paralelo en el Pulerlo P0 ; 5) Temporiza su visualizaci6n. ; 6) Repone los registros del slack. . ; ORG 400H MOV MOV PUSH MOV SCON, #00 A.R0 ACC A, R1
El Microprocesador 8051
PUSH ACC MOV A, R2 PUSH ACC MOV A, SBUF MOV P0, A LCALL RETARDO POP ACC MOV R2, A POP ACC MOV R1, A POP ACC MOV R0, A RETI
CAP 9
El Microprocesador 8051
CAP 9
Figura 9.7
La primera operacin de la unidad de control TX es activar la seal de control SEND que pone el bit de start en el pin TXD. Un tiempo de bit ms tarde, la seal DATA se activa, lo que autoriza la salida del bit del registro de desplazamiento transmisor a travs del pin TXD. El primer pulso de desplazamiento ocurre un tiempo de bit ms tarde de la salida del primer bit de dato, como se puede ver en el cronograma. Como los bits de datos son desplazados al exterior por la derecha, sus lugares son reemplazados por ceros por la izquierda. Cuando el MSB del byte de datos est en la posicin de salida del registro de desplazamiento, entonces el 1, que ha sido inicialmente cargado en la novena posicin, est a la izquierda del bit MSB y el resto de posiciones a su izquierda estn cargadas con ceros. Estas condiciones alertan a la unidad de control TX para que realice un ltimo
El Microprocesador 8051
CAP 9
desplazamiento y desactive la seal SEND y active el indicador TI (peticin de interrupcin). Esto ocurre en el dcimo ciclo de desbordamiento del contador divisor por 16 despus de la instruccin de escritura en SBUF.
Figura 9.8 La recepcin es iniciada al detectar la transicin (flanco descendente) en el pin RXD. Por este motivo este pin es muestreado a razn de 16 veces independientemente de la velocidad en baudios que haya sido establecida. Cuando una transicin ha sido detectada, el contador divisor por 16 es inmediatamente puesto a cero y el dato 1FFH se escribe en el registro de desplazamiento. Poniendo a cero el contador divisor por 16, sincroniza los ciclos de desbordamiento con los tiempos de bit entrantes. Los 16 estados del contador dividen cada tiempo de bit en 16 intervalos. En los estados 7, 8 y 9 de cada tiempo de bit>, el bit detector muestrea el valor de RXD. El valor aceptado es el que ha sido ledo en al menos dos de las tres muestras. Esto se hace para rechazar el ruido elctrico. Si el valor aceptado durante el primer tiempo de bit> no es cero, los circuitos receptor son reseteados y la unidad vuelve a alertarse para detectar otra transicin de flanco descendente. Esto est previsto para rechazar falsos bits de start. Si el bit de start resulta correcto, se desplaza dentro del registro de desplazamiento y lo mismo hara con el resto de la cadena de bits. Como los bits de datos ingresan en el registro de desplazamiento por la derecha, los unos son desplazados fuera por la izquierda. Cuando el bit de Start llega a la posicin novena, la ms extrema a la izquierda del registro de desplazamiento, alerta al bloque de control RX para hacer un ltimo desplazamiento, carga SBUF y RB8, y activa la seal RI (interrupcin). La seal para cargar SBUF y RB8, y para
El Microprocesador 8051
CAP 9
activar RI, se generar si las siguientes condiciones son satisfechas en el momento en que el pulso final de desplazamiento se genera: -- 1) R1=0, y -- 2) bien SM2=0, o el bit de Stop recibido es igual a 1. Si cualquiera de estas dos condiciones no se cumplen, la cadena de bits se pierde irremediablemente. Si ambas condiciones se cumplen, el bit de Stop se alojar en el indicador RBI, los 8 bits se ubicarn en el registro SBUF, y RI se activar. En este intervalo de tiempo, tanto si las condiciones indicadas se cumplen como si no, la unidad vuelve a muestrear el pin RXD para ver si se produce un flanco descendente.
-Velocidad de comunicacin:
BAUDIOS =
2SMOD (desbordamiento) 32
El Microprocesador 8051
Timer I como temporizador con autorrecarga:
BAUDIOS = 2SMOD frecuencia del oscilador 32 12 (256 - TH1)
CAP 9
Tambin utilizando el Timer 2 (vase Apartado 9.4.2), Comienza: Escribiendo el dato en SBUF Termina: Activando el indicador TI Comienza: Cuando REN=1 y descendente (bit start) en RXD. Termina: Activando la bandera RI se detecta un flanco
-Transmisin : - Recepcin :
En esta opcin 11 bits se transmiten a travs de TXD, o se reciben a travs de RXD, de la siguiente manera: - 1 bit de slart (0) - 8 bits de datos (el primero el LSB), - 1 bit noveno programable. - 1 bit de Stop (1). En la operacin de transmisin el noveno bit de datos es la imagen del bit TB8 perteneciente al registro SCON, pudiendo asignarle el valor 0 o 1. En recepcin el noveno bit de datos se refleja en el bit RB8 del registro SCON. La Figura 9.9 muestra el diagrama en bloques del puerto serie en el Modo 2. El Modo 3 presenta el mismo diagrama en bloques que el Modo 1 (Figura 9.7), siendo las diferencias mnimas, como se desprende de las explicaciones que siguen a continuacin.
El Microprocesador 8051
CAP 9
Figura 9.9 El cronograma representado en la Figura 9.10 muestra las operaciones secuenciadas en el tiempo para la transmisin y recepcin en el Modo 2 y 3. Las diferencias, como se aclararn en las explicaciones que siguen, residen en la velocidad de comunicacin que en el Modo 2 es fija, mientras que en el Modo 3 la velocidad de comunicacin es variable.
El Microprocesador 8051
CAP 9
Figura 9.10 Como en los otros modos, la transmisin se inicia por una instruccin que utilice el registro SBUF como destino. La seal de escritura en SBUF, tambin carga TB8 en la posicin del noveno bit del registro desplazamiento transmisor y alerta a la unidad de control TX para que proceda a la transmisin una vez sea solicitada. La transmisin comienza en la fase S1P1 del ciclo de mquina siguiente que resulta a partir del desbordamiento del contador del timer dividido por 16 (as pues, el tiempo de bit est sincronizado con el contador divisor por 16, no con la seal de escritura en SBUF) (Figura 9.10). La unidad de control TX comienza su gestin con la activacin de SEND que pone el bit de Starl en el pin TXD. Un tiempo de bit ms tarde DATA se activa autorizando la salida de los bits del registro de desplazamiento de transmisin a travs de TXD. El primer pulso de desplazamiento ocurre un tiempo de bit despus de la salida del primer bit de datos. Tambin, en ese mismo instante, el registro de desplazamiento enva un 1 (bit de Stop), que ocupa la posicin del noveno bit en el registro de desplazamiento. Despus, slo ceros se almacenan en dicho registro. As pues, como los bits de dalos son desplazados al exterior por la derecha, por la izquierda se introducen bits ceros. Cuando el bit reflejado de TB8 en el registro de desplazamiento est en la posicin de salida, entonces el bit de Stop se encuentra justo a la izquierda del TB8 y todos los bits a la izquierda de ste son ceros. Esta condicin alerta a la unidad de control TX para que haga el ltimo desplazamiento y entonces desactive SEND y active el indicador TI (interrupcin en la transmisin). Esto sucede en el undcimo ciclo de desbordamiento del contador-divisor por 16 despus de la escritura en SBUF.
El Microprocesador 8051
CAP 9
La recepcin se inicia al detectar en el pin RXD una transicin descendente. Por este motivo el pin RXD es muestreado a razn de 16 veces, independientemente de la velocidad en baudios establecida. Cuando una transicin ha sido detectada, el contador-divisor por 16 es inmediatamente puesto a cero y el dato 1FFH se escribe en el registro de desplazamiento. En los eslados 7, 8 y 9, correspondientes al intervalo de un tiempo de bit, el detector de bit muestrea el valor de RXD. El valor aceptado es el que ha sido ledo en al menos dos de las tres muestras. Si el valor aceptado durante el primer tiempo de bit> no es cero, los circuitos receptores son puestos a cero y la unidad vuelve a alertarse para detectar una nueva transicin de flanco descendente. Si el bit de start resulta correcto, ste es ingresado en el registro de desplazamiento, y lo mismo suceder con el resto de la cadena. Como los bits de datos ingresan en el registro de desplazamiento por la derecha, los unos son desplazados al exterior por la izquierda. Cuando el bit de Stara llega a la posicin ms extrema ala izquierda del registro de desplazamiento (que en los Modos 2 y 3 es el noveno bit), alerta al bloque de control RX para hacer un ltimo desplazamiento, carga SBUF y RB8 y activa el indicador RI (interrupcin en e] modo receptor). La seal para cargar SBUF y RB8, y para activar RI, se genera si las siguientes condiciones son satisfechas en el momento en que el pulso final de desplazamiento se produce: - 1) RI =-O y - 2) bien SM2 =0; o el noveno bit recibido es igual a 1. Si cualquiera de estas condiciones no se cumple, la cadena recibida se pierde y RI no se activa. Si ambas condiciones se cumplen, el noveno bit de datos se alojar en la bandera RBI, y los primeros 8 bits de datos se alojarn dentro del registro SBUF. Un tiempo de bit> ms tarde, se cumplan o no las condiciones indicadas ms arriba, la unidad vuelve a comprobar la transicin descendente en la entrada RXD. Obsrvese que el valor del bit de Stop recibido es irrelevante para SBUF, RB8 o RI.
El Microprocesador 8051
CAP 9
Para el Modo 2:
BAUDIOS =
- Transmisin:
Comienza: Escribiendo en SBUF TermIna: ActIvando el indicador TI Comienza: Cuando REN=1 y se detecta un flanco descendente (bit Start) en RXD Termina: Activando el indicador RI
- Recepcin :