of 139 /139
INSTITUTO TECNOLOGICO DEL MAR, Mazatlán APUNTES DE LA MATERA DE: MICROPROCESADORES I DEPARTAMENTO DE INGENIERIA ELECTRONICA PROF: ING: RUFINO J. DOMINGUEZ ARELLANO

Microcontrolador 8051

Embed Size (px)

Text of Microcontrolador 8051

  • INSTITUTO TECNOLOGICO DEL MAR, Mazatln

    APUNTES DE LA MATERA DE:

    MICROPROCESADORES I

    DEPARTAMENTO DE INGENIERIA ELECTRONICA

    PROF: ING: RUFINO J. DOMINGUEZ ARELLANO

  • El Microcontrolador 8051 CAP 1

    ITMAR Mazatln 2 Ing. Rufino Domnguez Arellano

    1.1. CARACTERISTICAS DE LA FAMILIA 51 Dentro de los modelos de la familia 51 de microcontroladores (Tabla 1.1) se encuentran los 8XX2 y 8XX1, que presentan las siguientes diferencias bsicas:

    8032/31 Memoria de programas externa- 8052/51 Memoria de programas interna en ROM. 8752/51 Memoria de programas interna en EPROM.

    Tabla 1.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.

    1.2. CARACTERISTICAS DE LOS MICROCONTROLADORES 8052/8051. La anterior Figura 1.1 y, de manera mas detallada, la Figura 1.2, muestran los diagramas generales en bloques de los Microcontroladores 8052/8051. Las caractersticas generales son las siguientes:

    CPU de 8 bits.

  • El Microcontrolador 8051 CAP 1

    ITMAR Mazatln 3 Ing. Rufino Domnguez Arellano

    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.

    1.3. TERMINALES DE LOS MICROCONTROLADORES 8052/8051

    La figura 1.3 muestra la distribucin de terminales del procesador 8051, tpica del resto de esta familia de microcontroladores.

  • El Microcontrolador 8051 CAP 1

    ITMAR Mazatln 4 Ing. Rufino Domnguez Arellano

    Vcc Alimentacin positiva de 5 VDC Vss Conexin a tierra. Puerto 0 (P0) 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.

  • El Microcontrolador 8051 CAP 1

    ITMAR Mazatln 5 Ing. Rufino Domnguez Arellano

    Puerto 2 (P2) 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 3 (P3) Puerto de entrada/salida programable. Adems, cada bit de

    este puerto tiene las funciones especiales que se muestran en la tabla 1.3.

    Figura 1.3

  • El Microcontrolador 8051 CAP 1

    ITMAR Mazatln 6 Ing. Rufino Domnguez Arellano

    _____ 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.

    _____ PSEN (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/Vpp 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.

    XTAL1 y XTAL 2 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

    Para que el microcontrolador trabaje sincronizado con un reloj externo, se pueden conectar XTAL1 y XTAL2 como se muestra en la figura 1.6.

  • El Microcontrolador 8051 CAP 1

    ITMAR Mazatln 7 Ing. Rufino Domnguez Arellano

    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.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 8 Ing. Rufino J. Domnguez Arellano.

    CAPITULO 2

    Organizacin de la memoria en los Microcontroladores 8052/8051

    2.1. MEMORIA DE PROGRAMAS Y DATOS Los Microcontroladores 8052/8051 tienen separados los espacios de direcciones para memoria de programas y memoria de datos (Figura 2.1).

    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

    _________________________________________________________________________ ITMAR Mazatln 9 Ing. Rufino J. Domnguez Arellano.

    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.

    2.2. MEMORIA DE PROGRAMAS En la Figura 2.3, se observa la divisin de la memoria de programas, segn se considere mixta (interna y externa) o completamente externa. En la parte baja de la memoria de programas se encuentran ciertas posiciones de memoria especiales para el tratamiento de las rutinas de interrupciones. En la Figura 2.4 se asignan las posiciones fijas de la vectorizacin de estas interrupciones, as la posicin de memoria 0000 corresponde al RESET y el resto figura sealado al margen.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 10 Ing. Rufino J. Domnguez Arellano.

    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

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 11 Ing. Rufino J. Domnguez Arellano.

    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

    _________________________________________________________________________ ITMAR Mazatln 12 Ing. Rufino J. Domnguez Arellano.

    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 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

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 13 Ing. Rufino J. Domnguez Arellano.

    a la memoria de datos externa para tomar un dato. En este caso observar que no se activa PSEN.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 14 Ing. Rufino J. Domnguez Arellano.

    2.3. MEMORIA DE DATOS El 8052/8051 puede direccionar hasta 64 KB de memoria de datos externa. (La instruccin MOVX se utiliza para acceder a los datos de la memoria externa.) Si utiliza 16 bytes de direccin hgalo con MOVX @ DPTR, y si utiliza 8 bytes, MOVX @ Ri. La Figura 2.7 muestra la configuracin para acceder a 2 KB de memoria de datos externa. En este caso la CPU tiene el programa interno en la ROM. El Puerto 0 multiplexea en el tiempo direcciones y datos en la RAM, y tres lneas del Puerto 2 completan el direccionamiento d los 2 Kbytes de RAM (memoria paginada). La CPU genera las seales de lectura (RD) y escritura (WR) que necesita la RAM externa. En la operacin de lectura de un dato se podra relacionar el cronograma de la Figura 2.6(B) con la Figura 2.7. En la Figura 2.8, se puede ver el mapa de la memoria de datos. La memoria interna se encuentra dividida en tres bloques, los 128 bytes bajos, los 128 bytes altos y el espacio ocupado, en parte, por los Registros de Funcin Especial (SFR). Como se indica en la Figura 2.7, la memoria externa se puede direccionar utilizando las lneas de E/S del Puerto 2 a voluntad, en funcin de la cantidad de memoria a direccionar. Si el direccionamiento es de 8 bytes (no utiliza el Puerto 2), el contenido de P2 permanece durante todo el ciclo para utilizar la memoria

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 15 Ing. Rufino J. Domnguez Arellano.

    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.

    2.4. AREA DE DIRECCIONAMIENTO SOLO INDIRECTO (para el 8052) En la Figura 2.8 se observa que el rea SFR y el de direccionamiento indirecto (80H a FFH) tienen las mismas direcciones. Sin embargo estn separados por caminos de acceso diferentes, segn el direccionamiento de las instrucciones*. As, la instruccin: MOV 90H, #ABH

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 16 Ing. Rufino J. Domnguez Arellano.

    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).

    2.5. AREA DE DIRECCIONAMIENTO DIRECTO E INDIRECTO (8052/8051) Los 128 bytes a los que se puede acceder desde ambos direccionamientos, directo e indirecto, pueden ser divididos en tres segmentos (Figura 2.10). A continuacin se explican brevemente las caractersticas de esta rea.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 17 Ing. Rufino J. Domnguez Arellano.

    Banco de registros (banco 0, 1, 2 y 3). Registros R0 a R7 por banco Los registros se localizan desde la direccin 00H a 1FH (32 bytes). Despus de 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.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 18 Ing. Rufino J. Domnguez Arellano.

    Sub rea Scratch Pad

    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.

    2:6. AREA DE REGISTROS O FUNCIONES ESPECIALES (8052/8051) La Tabla 2.1 muestra los registros especiales que utiliza el 8052/8051, as como sus direcciones. Adems de la lista se proceder a dar una breve explicacin de los mismos, considerando que un anlisis ms profundo corresponde hacerlo en los ejercicios de aplicacin que se vern ms adelante.

    * 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

    _________________________________________________________________________ ITMAR Mazatln 19 Ing. Rufino J. Domnguez Arellano.

    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.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 20 Ing. Rufino J. Domnguez Arellano.

    P0, P1, P2 y P3 Puertos 0, 1, 2 y 3: Son los latchs de los puertos P0, P1, P2 y P3. 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: Lo mismo que con TCON y TMOD, pero aplicado al Timer 2. 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.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 21 Ing. Rufino J. Domnguez Arellano.

    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.

    2.7. OPERACION RESET Conectado al pin (9) de entrada RST=RESET se encuentra un Schmitt Trigger que va a propiciar la operacin de inicializacin de los dispositivos internos del microcontrolador.

  • El Microcontrolador 8051 CAP 2

    _________________________________________________________________________ ITMAR Mazatln 22 Ing. Rufino J. Domnguez Arellano.

    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

    _________________________________________________________________________ ITMAR Mazatln 23 Ing. Rufino J. Domnguez Arellano.

    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

    _________________________________________________________________________ ITMAR Mazatln 24 Ing. Rufino J. Domnguez Arellano

    CAPITULO 3 Programacin de los Microcontroladores 8052/8051 (I)

    3.1. INTRODUCCION Todos los modelos de la familia 51 ejecutan el mismo conjunto de instrucciones. Estas instrucciones estn optimizadas para el control de aplicaciones en 8 bits. Estn provistas de una buena variedad de modos de direccionamiento para acceder a la memoria RAM de datos internos del microcontrolador, facilitando operaciones del tipo byte sobre una pequea estructura de datos. Permiten la manipulacin directa de control y procesamiento booleano de estructuras de datos del tamafio de un bit. En esta breve introduccin se estudiarn los modos de direccionamiento y el juego de instrucciones agrupadas por especialidades de esta manera:

    Instrucciones aritmticas. Instrucciones lgicas. Instrucciones para la transferencia de datos en:

    a) RAM interna. b) RAM externa.

    Instrucciones para el tratamiento de tablas. Instrucciones booleanas. Instrucciones de salto.

    3.2. MODOS DE DIRECCIONAMIENTO

    Direccionamiento directo El operando se especifica en la instruccin por un campo de direccin de 8 bits. Slo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se pueden direccionar de esta forma. Ejemplo:

    ADD A,3BH ; es decir, suma (ADD) el contenido del acumulador con el contenido de la posicin de memoria (38):

    A (A) + (38)

    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

    _________________________________________________________________________ ITMAR Mazatln 25 Ing. Rufino J. Domnguez Arellano

    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 por registro Los Microcontroladores 8052/8051, como se ha visto, contiene cuatro bancos de registros seleccionados por los bits 3 y 4 del PSW, y cada banco de registros tiene ocho registros del R0 al R7 (vase Apartado 2.5). El propio cdigo de operacin de la instruccin especifica con qu registro se opera; es decir, cuando la instruccin es ejecutada se accede a uno de los 8 registros del banco seleccionado. Ejemplos:

    MOV Rn,A ; operacin: (Rn) (A) MOV Rn, #dato ; operacin: (Rn) #dato

    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 ; Incrementa el contenido del acumulador: A (A) + 1

    INC DPTR ; Incrementa puntero de datos: DPTR (DPTR) + 1

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 26 Ing. Rufino J. Domnguez Arellano

    Direccionamiento inmediato Al cdigo de operacin le sigue una constante en la memoria de programas. Ejemplo:

    MOV A, #255 ; Carga en el acumulador el nmero decimal 255. Generalmente se expresan ; ; en hexadecimal:

    MOV A, #FFH ; o en binario:

    MOV A, #11111111B

    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.

    3.3. CICLO DE INSTRUCCION La ejecucin de un ciclo de instruccin comienza en el estado 1 del ciclo mquina, cuando el cdigo de operacin es almacenado en el Registro de Instruccin. (Para comprender este apartado tener a la vista la Figura 3.1 y la Tabla 4.5, Set de Instrucciones.) Como norma general, una instruccin requiere de uno q ms ciclos mquina, en funcin de:

    a) El cdigo de operacin Por ejemplo, la instruccin INC A (Figura 3.1 A) tiene 1 byte de instruccin y

    requiere 1 ciclo mquina, la instruccin INC DPTR, tambin, de 1 byte de instruccin requiere de 2 ciclos mquina (Figura 3.1 C) y la instruccin MUL AB requiere de 4 ciclos mquina para su total ejecucin y ocupa 1 byte en la memoria.

    b) El nmero de bytes

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 27 Ing. Rufino J. Domnguez Arellano

    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.

    3.4. TIPOS DE INSTRUCCIONES El set de instrucciones del 8052/8051 se puede dividir segn las especialidades:

    Instrucciones aritmticas. Instrucciones lgicas. Instrucciones de transferencia de datos. Instrucciones booleanas Instrucciones de salto.

    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

    _________________________________________________________________________ ITMAR Mazatln 28 Ing. Rufino J. Domnguez Arellano

    3.5. INSTRUCIONES ARITMETICAS. En la tabla 3.2, se muestra el men de las instrucciones aritmticas del 8051. Se indican en la tabla los diferentes modos de direccionamiento que se pueden usar en cada caso y los indicadores de estado que son afectados. Los tiempos de ejecucin que se indican en la tabla estn evaluados sobre una frecuencia de relo de 12 MHz.

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 29 Ing. Rufino J. Domnguez Arellano

    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).

    3.6 INSTRUCCIONES LOGICAS. La tabla 3.3 muestra la lista de operaciones lgicas, modos de direccionamiento disponibles e indicadores de estado. Observe que en este grupo se incluyen las instrucciones de rotacin a la izquierda y a la derecha.

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 30 Ing. Rufino J. Domnguez Arellano

    3.7. INSTRUCCIONES DE TRANSFERENCIA DE DATOS Se consideran tres modalidades, segn la transferencia se realice sobre:

    La RAM interna. La RAM externa. La memoria de programa para el tratamiento de tablas. .

    3.7.1. Transferencia de datos sobre la RAM interna En la Tabla 3.4 se muestra la tabla de instrucciones disponibles para mover datos dentro de los espacios de memoria RAM interna, considerando los distintos direccionamientos para cada una de las instrucciones.

    La instruccin MOV , permite transferir datos entre alguna de las dos RAM interna o el espacio de localizacin del SFR (referencia Figura 2.8). Este tipo de instruccin permite la transferencia sin afectar el acumulador.

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 31 Ing. Rufino J. Domnguez Arellano

    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 acta incrementando el SP (Stack Pointer =

    puntero de la pila) y copiando el dato dentro de la pila. La instruccin POP 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 POP ---------------------------- --------------------------------

    (SP) (SP) + 1 ((SP))

    ((SP)) (SP) (SP) -1

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 32 Ing. Rufino J. Domnguez Arellano

    La instruccin XCH A, , 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

    3.7.2. Transferencia de datos sobre la RAM externa La Tabla 3.5 muestra la lista de instrucciones sobre transferencia de datos que acceden a la memoria de datos. Slo se puede utilizar el direccionamiento indirecto con este grupo de instrucciones.

    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

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 33 Ing. Rufino J. Domnguez Arellano

    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). Ejemplo: Estudiar la secuencia de instrucciones. MOVX A, @Rl [email protected],A

    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:

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 34 Ing. Rufino J. Domnguez Arellano

    sustituida 85H 2085H F3H 20F3H

    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 A, @DPTR MOVX @Ri, A MOVX @DPTR, A

    Recurdese que en la Tabla 3.4 hay una instruccin que es:

    MOV DPTR, #data16 Con la que se podra acceder a todo el mapa de memoria.

    3.7.3. Memoria de programas para el tratamiento de tablas La Tabla 3.6 muestra las dos instrucciones disponibles para la lectura de tablas en la memoria de programa (independientemente del algoritmo que pueda crear el usuario con otras instrucciones). Obsrvese que las tablas slo pueden ser ledas y no actualizadas. El nemnico es MOVC (Mover Constante). Si la tabla accede a la memoria de programa externa, recordar que esta lectura es autorizada por la seal de control PSEN (pin 29). Obsrvese la Figura 2.5 del captulo anterior .

  • El Microcontrolador 8051 CAP 3

    _________________________________________________________________________ ITMAR Mazatln 35 Ing. Rufino J. Domnguez Arellano

    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.

    ; PC (PC) + 1 MOVC A, @A+PC ; A ((A) + (PC))

    Se presenta esta instruccin dentro de una subrutina, estando la tabla de informacin despus de la instruccin de retorno de la subrutina (RET). Ejemplo: Se trata de demostrar el funcionamiento sobre una tabla de 4 datos. A la izquierda aparece el mapa de memoria del programa.

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 36 Ing. Rufino J. Domnguez Arellano

    CAPITULO 4 Programacin de los Microcontroladores 8052/8051 (II)

    4.1. INSTRUCCIONES BOOLEANAS. La familia de microcontroladores 8051 incluye un procesador booleano. Esto es, un procesador especializado en manipular bits. Existen dos reas dxe memoria que permiten el acceso bit a bit; una corresponde al segmentote RAM interna entre las direcciones 20H a 2FH, en total 128 bits, y la otra corresponde a la primera columna de SFR sealada en la tabla 2.2. Esto es de gran utilidad ya que permite el verificar el estado de bits particulares de este grupo de registros. La tabla 4.2 muestra el conjunto de instrucciones que permiten la manipulacin de bits.

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 37 Ing. Rufino J. Domnguez Arellano

    Ejemplos: A) Poner el Acarreo a 1 si el bit 0 del puerto P1 es 1, el bit 7 del acumulador es 1 y la bandera OV = 0. MOV C, P1.0 ; Carga el acarreo (C) con P1.0 ANL C, A.7 ; Operacin AND entre el acarreo (C) y A.7

    ANL C, /OV ; Operacin AND entre el acarreo (C) y el ; complemento de OV

    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 C, P0.0 ; Cargo P0.0 al acarreo.

    JNB P1.1, SALTA ; Si P1.1 = 0, C tiene el resultado correcto, y entonces ; salta. Si P1.1 = 1 hay que complementar C.

    CPL C SALTA: MOV P2.7, C

    4.2. INSTRUCCIONES DE SALTO. Existen dos tipos de salto: los incondicionales y los condicionales. Ahora se detalla cada uno.

    4.2.1. Instrucciones de salto incondicional. La tabla 4.3 muestra la lista resumida de saltos incondicionales.

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 38 Ing. Rufino J. Domnguez Arellano

    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 DPTR, #TABLA_DE SALTO ; Cargo direccion de tabla. MOV A, VALOR ; Valor entre 0 y 4 RL A ; Multiplico por 2. JMP @A + DPTR ; Se realiza el salto. - - - TABLA_DE SALTO: AJMP SALTO0 AJMP SALTO1 AJMP SALTO2 AJMP SALTO3 AJMP SALTO4

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 39 Ing. Rufino J. Domnguez Arellano

    4.2.2. Instrucciones de salto condicional. La tabla 4.4 muestra la lista de instrucciones de salto condicional. Estas instrucciones permiten al microcontrolador tomar decisiones en base a condiciones que resulten en el momento de ejecucin del programa. En todos los casos, el salto es relativo, lo que significa que la direccin destino debe localizarse dentro de los -128 y +127 bytes a partir de la siguiente instruccin a la del salto condicional.

    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: MOV CONTADOR, #10

    LAZO: ---------------- ---------------- ---------------- 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.

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 40 Ing. Rufino J. Domnguez Arellano

    Ejemplos: A) Ejecutar las instrucciones de un lazo hasta que la lectura de un perifrico en P0 coincida con la localidad de memoria 7FH. MOV A, P0

    LAZO: ---------------- ---------------- ---------------- CJNE A, 7F, LAZO B) Implementar las comparaciones mayor que y menor que. Si de los dos bytes del campo de operandos, el primero es menos que el segundo, entonces el acarreo (C) se pone a 1. Si el primer byte es mayor o igual que el segundo, el acarreo toma el valor 0.

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 41 Ing. Rufino J. Domnguez Arellano

    4.3 SET DE INSTRUCCIONES DE LA FAMILIA 8051.

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 42 Ing. Rufino J. Domnguez Arellano

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 43 Ing. Rufino J. Domnguez Arellano

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 44 Ing. Rufino J. Domnguez Arellano

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 45 Ing. Rufino J. Domnguez Arellano

  • El Microcontrolador 8051 CAP 4

    _________________________________________________________________________ ITMAR, Mazatln 46 Ing. Rufino J. Domnguez Arellano

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 47 Ing. Rufino J. Domnguez Arellano

    CAPITULO 5

    Introduccin a la Programacin en Lenguaje Ensamblador.

    5.1. INTRODUCCION Se entiende por modelo de programacin al conjunto de registros accesibles por el usuario que junto al set de instrucciones y los modos de direccionamiento constituyen las herramientas imprescindibles para el programador. El objetivo de este captulo es mostrar estos tres aspectos combinados en varios ejercicios que puedan servir de ayuda al comienzo. Estos ejercicios corresponden a algunos de los modelos estn dar que suelen ser habituales en las operaciones de control de procesos industriales pero no tienen el suficiente rigor como para poder ser incorporadas dentro de una librera de rutinas operativas profesionalmente; ms bien tienen un sentido didctico, objetivo principal de este captulo. A continuacin se proponen una serie de ejercicios, que irn distribuidos entre este captulo y el siguiente. En total, 13 ejercicios que pueden servir de aperitivo; por esta razn, casi todos los nombres de los archivos de los ejercicios figuran con un nmero terminal, para que el lector pueda mejorarlos, como si de una nueva versin se tratara.

    Ejercicio 5.1. Estructura condicional o alternativa Habitualmente el programa tiene que tomar decisiones en funcin del contenido de una variable (posicin de memoria), de la informacin de un puerto de entrada o salida y/o del estado de un bit o registro. Se produce lo que se conoce por una bifurcacin condicional o alternativa. En este ejercicio se trata de realizar la operacin suma o resta de dos variables DA1 (78H) y DA2 (79H); si la localidad CHE (77H) es cero, suma el contenido de DA1 y DA2; si el contenido es distinto de cero, entonces resta DA1 de DA2. En cualquier caso, el resultado de la operacin suma o resta se deposita en la localidad RES (7AH).

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 48 Ing. Rufino J. Domnguez Arellano

    %TITLE "ESTRUCTURA CONDICIONAL ECON0.ASM" ; ORG 0200H ; CHE EQU 77H DA1 EQU 78H DA2 EQU 79H RES EQU 7AH MOV DA1, #09H MOV DA2, #06H ; CARGA DE DATOS MOV A, CHE ; LEE LA LOCALIDAD 77H JNZ SAL1 ; SI ES CERO SUMA, SI NO SALTA A RESTA MOV A, DA1 ADD A, DA2 ; HACE LA SUMA MOV RES, A ; GUARDA RESULTADO MOV A, CHE JZ SAL2 SAL1: MOV A, DA1 SUBB A, DA2 ; HACE LA RESTA MOV RES, A ; GUARDA RESULTADO SAL2: NOP ; END

    Ejercicio 5.2.- Estructura Iteractiva. Al menos una vez.

    Enunciado La localidad MEM (77H) puede contener nmeros comprendidos entre 1 y 9, teniendo en cuenta esta caracterstica, poner las posiciones de memoria comprendidas entre 61 H y 69H a FFH (todos los bits a uno), segn esta relacin: Si MEM=1 cargar con FFH la localidad 61H Si MEM=2 cargar con FFH las localidades 61H y 62H Si MEM=3 cargar con FFH las localidades 61H, 62H y 63H ========================================= Si MEM=9 cargar con FFH las localidades de la 61H ala 69H

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 49 Ing. Rufino J. Domnguez Arellano

    %TITLE ESTRUCTURA ITERATIVA. ITERAO.ASM ; ORG 0200H ;

    MEM EQU 778 CON EQU 78H

    MOV CON, MEM ; Se transfiere el contenido de MEM a CON SAL: 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

    ; no es CERO NOP END

    Ejercicio 5.3.- Estructura iteractiva. Puede que ninguna vez.

    %TITLE ESTRUCTURAITERATIVA. ITERA1.ASM ; ORG 0200H

    ; MEM EQU 77H CON EQU 78H

    MOV CON, MEM ; Se transfiere el contenido de MEM a CON SALO: MOV A, CON ; Cargar acumulador

    JZ SAL1 ; No efecta ninguna accin si MEM=O ADD A, #60H ; Prepara el dir. indexado por software MOV RO, A ; Carga el puntero MOV @RO, #FFH ; Carga la localidad correspondiente DEC CON ; Decrementa CON JMP SALO ; Salto incondicional

    SAL1: NOP END

    Ejercicio 5.4.-Comprobacin de bits. Mtodo general La operacin de comprobacin de bits es una prctica habitual en el control de procesos. La secuencia del programa puede cambiar dependiendo del estado de un bit. Este ejercicio muestra uno de los mtodos.

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 50 Ing. Rufino J. Domnguez Arellano

    Enunciado 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 BITS. TESBITO.ASM ;

    ORG 0200H ;

    CHE EQU 28H RES EQU 7FH

    MOV A, CHE ; Se carga el ACC con el byte a chequear ANL A, #04H ; Se detecta el bit. JZ SAL0 ; Si es igual a CERO salta MOV RES, #FFH ; Si no es igual a CERO, carga RES con unos

    SALO: JNZ SALl ; ...y sale del proceso MOV RES, #00 ; Si es igual a CERO. carga RES con ceros

    SAL1: NOP END

    Ejercicio 5.5. Comprobacin de bits. Mtodo particular. Cuando se estudiaba el set de instrucciones del 8052/8051, en el Apartado 4.1. lnstrucciones booleanas, se deca que haba una zona de memoria interna direccionable bit a bit (20H a 2FH) y una serie de instrucciones que permitan esta forma de proceso (vase Tabla 4.2). Esta prctica es una muestra de este tipo de instrucciones. El problema es el mismo que el planteado en el ejercicio anterior, pero con la salvedad de utilizar el carry como variable referencia! para establecer las bifurcaciones.

    %TITLE TESTEO DE BITS. TESBIT1.ASM ; ORG 0200H ;

    CHE EQU 28H RES EQU 7FH

    SETB C ; Se pone el "flag del Carry" a UNO ANL C, CHE.2 ; Se detecta el bit 28.2 o 42

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 51 Ing. Rufino J. Domnguez Arellano

    JNC SALO ; Si es igual a CERO salta MOV RES. # FFH ; Si no es igual a CERO, carga RES con unos

    SALO: JC SALl ; ...y sale del proceso MOV RES, #00 ; Si es igual a CERO, carga RES con ceros

    SAL1: NOP END

    Ejercicio 5.6. Comprobacin de bytes con la operacin resta o sustraccin En el control de procesos industriales la informacin que se recibe o enva es compleja y necesita de varios bits. En este caso, la informacin ocupar 8 bits, es decir, 1 byte. Este ejercicio, como los dos siguientes, corresponden al mismo planteamiento, pero utiliza procedimientos distintos de resolucin. As, este ejercicio emplea la operacin resta o sustraccin para detectar el byte que desencadena una secuencia de proceso distinta. En este y en los dos siguientes ejercicios el byte clave es 63H. Si el byte ledo en la direccin 70H (CHE), es igual a 63H, pone el bit cero (b0) de la localidad 20H (RES) a cero, y si el byte ledo es distinto a 63H, el bit cero (b0) de RES se pone a uno, es decir: Si (70H) = 63H implica que 20.0 0 Si (70H) 63H implica que 20.0 1

    %TITLE TESTEO DE BYTES. TESPAL0.ASM ; ORG 0200H ;

    CHE EQU 70H RES 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 SAL0: JNZ SALl ; ...y sale del proceso

    CLR RES.0 ; Si es igual a CERO, carga con "0" el ; bit0 del byte RES

    SAL1: NOP END

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 52 Ing. Rufino J. Domnguez Arellano

    Ejercicio 5.7. Comprobacin de bytes con la operacin EXCLUSIVE-OR El enunciado de este ejercicio es el mismo que el apartado anterior, pero el procedimiento para la deteccin del byte que desencadena un cambio en el proceso se realiza con la operacin EXCLUSIVE-OR (XRL). Efectivamente, si: 0 1 1 0 0 0 1 1 = LECTURA BYTE 0 1 1 0 0 0 1 1 = REFERENCIA: 63H 0 0 0 0 0 0 0 0 = RESULTADO 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 = LECTURA BYTE 0 1 l 0 0 0 1 1 = REFERENCIA: 63H 0 0 0 0 0 0 0 l = RESULTADO

    %TITLE TESTEO DE BYTES. TESPAL1.ASM ; ORG O2OOH ;

    CHE EQU 7OH RES 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 SALO: JNZ SALl ; ...y sale del proceso

    CLR RES.O ; Si es igual a CERO, carga con "O" el ; bitO del byte RES

    SAL1: NOP END

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 53 Ing. Rufino J. Domnguez Arellano

    Ejercicio 5.8. Comprobacin de bytes con la instruccin especial Los ejercicios 5.6 y 5.7 pueden ser resueltos tambin con macroinstrucciones como CJNE A,,rel estudiada en el apartado 4.2.2,. Esta instruccin compara y salta si el resultado no es igual y su utilidad se puede ver a continuacin. La eficacia de estas macroinstrucciones puede verse amenazada por la falta de flexibilidad, pero se puede fcilmente comprender que en este caso, que es habitual, resulta muy eficaz, por lo que es ventajosa su inclusin en el set de instrucciones.

    %TITLE TESTEO DE BYTES. TESPAL2.ASM ; ORG O2OOH ;

    CHE EQU 7OH RES EQU 2OH

    MOV A, CHE ; Se carga ACC con el contenido de la ; variable CHE

    CJNE A, #63H, SAL0 ; Compara el contenido del ACC con el ;dato #63H y salta a SALO. Si (ACC) es ; distinto de # 63H

    CLR RES.O ; En el caso de que sean iguales, pone el ; bitO de la localidad 2OH a "CERO..

    JMP SALl : ...y salta al final SALO: SETB RES.O ; Si no es igual a CERO, carga con " I " el

    ; bitO de la localidad 2OH y finaliza SAL1: NOP

    END

    Ejercicio 5.9.Movimiento de tablas de datos en la memoria externa. En el control de procesos se producen prcticas habitua]es de manipulacin de datos, que el programador debe convertir, gracias a su tcnica e ingenio, en rutinas eficaces. As, el programador deber elaborar rutinas para:

    El movimiento de datos de una posicin a otra de memoria. Captura y seleccin de datos del exterior a travs de una unidad de E/S y

    su colocacin en memoria. Bsqueda y seleccin sobre tablas de datos, etc.

    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.

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 54 Ing. Rufino J. Domnguez Arellano

    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

    SALO: 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

    Ejercicio 5.10. Comprobacin de tablas de datos En algunas ocasiones interesa conocer, para hacer un estudio estadstico, la cantidad de veces que aparece un determinado dato y en qu posicin de la tabla de datos se encuentra localizado.

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 55 Ing. Rufino J. Domnguez Arellano

    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

    %TITLE CHEQUEO DE TABLAS DE DATOS. CHEQUEO.ASM ; ORG O2OOH ;

    POS 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

    SALO: 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

    SAL1: NOP END

  • El Microprocesador 8051 CAP 5

    _________________________________________________________________________ ITMAR, Mazatln 56 Ing. Rufino J. Domnguez Arellano

    Ejercicio 5.11. Gestin de la pila y rotaciones Finalmente, para terminar con este apartado dedicado al modelo de programacin del 8052/8051 se dedica un ejercicio al manejo de las instrucciones de acceso a la memoria de pila ya las rotaciones. A la pila, como se puede ver en este ejercicio, no solamente la gestiona el microcontrolador, de una forma automtica, para salvar los registros importantes en los saltos a las subrutinas e interrupciones, si no que tambin puede y debe ser utilizada y gestionada por el programador. En este ejercicio, que por otro lado no tiene otras pretensiones que demostrar estas instrucciones, se ha situado la zona reservada a la pila en otra zona de la memoria interna, distinta a la que por defecto y despus de un RESET el microcontrolador posiciona. Como se recordar, en el captulo 2, apartado 2.6, se deca que despus de un RESET el microcontrolador situaba .el comienzo de la pila en la direccin 08H. En este ejercicio, como se puede ver en la primera instruccin del programa, la pila se ubica a partir de la direccin 40H y en sentido creciente. El ejercicio planteado pretende que un dato como 01H realice una rotacin completa y que finalice en la misma posicin con la que empez, dicho de otra manera, que el contenido del b0 se desplace a la Izquierda sobre el registro para despus de varios desplazamientos concluya en la misma posicin. Para esta operacin es preciso efectuar como se comprobar, 8 rotaciones bit a bit>.

    %TITLE GESTION DE LA PILA Y ROTACIONES. ROTAO.ASM ; ORG O2OOH ;

    REF EQU 7OH ROT EQU 6FH

    MOV SP, #4OH ; Inicializacin de la pila en rea ;SCRATCHPAD

    MOV A, #OOH ; Carga del ACC con OOH PUSH A ; Se guarda en la pila. Inicializacin

    ; del CONTADOR MOV REF, #OlH ; Se inicializa el registro de REFERENCIA MOV ROT, REF ; Se inicializa el registro de ROTACION MOV A, ROT ; Se carga el ACC con el valor de ROT

    SALO: RL A ; Rotacin a la izda. del ACC MOV ROT, A ; Se salva el contenido de ACC una vez

    ; rotado POP A ; Recupera valor contador. El ACC

    ; es ahora contador INC A ; Incrementa CONTADOR PUSH A ; Guarda contador en la PILA MOV A, ROT ; Recupera el dato rotado CJNE A, REF, SALO ; Compara ACC con REF para salir

    ; del programa cuando sean iguales NOP END

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 57 Ing. Rufino J. Domnguez Arellano

    CAPITULO 6

    Control de perifricos. Puertos de Entrada/ Salida

    6.1. INTRODUCCION En el Captulo 1 se describa la arquitectura de los puertos de entrada y salida (E/S) de la familia de Microcontroladores 51. En este captulo, se retorna el tema para recordar, ampliar y mostrar una serie de ejercicios de iniciacin en el control de los puertos que van a permitir comunicarse con una buena parte de los perifricos comerciales y con los que el usuario disee. Los cuatro puertos del 8052/8051 son bidireccionales, es decir, permiten la lectura y escritura en el perifrico correspondiente. Las salidas estn

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 58 Ing. Rufino J. Domnguez Arellano

    Figura 6.1

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 59 Ing. Rufino J. Domnguez Arellano

    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 Parmetro TLHLL ALE Pulse Width (Anchura pulso ALE) TAVLL Address Valid to ALE Low (Direccin vlida a ALE bajo) TLLAX Address Hold After ALE Low (Direccin mantenida despus de ALE

    bajo) TLLIV ALE Low to Valid Instruction In (ALE bajo a Instr. In. vlida) TLLPL ALE Low to PSEN Low (ALE bajo a PSEN bajo) TPLPH PSEN Pulse Width (Anchura pulso PSEN) TPLIV PSEN Low to Valid Instruction In (PSEN bajo a Instr. In. vlida) TPXIX Input Instr. Hold After PSEN (Mantenimiento de Instr. In.

    despus de PSEN) TPXIZ Input Instr. Float After PSEN (Bus flotante de Instr. In. despus

    de PSEN) TPXAV PSEN to Address Valid / PSEN a Direccin vlida TAVIV Addres to Valid Instr. In. / Direccin a Instr. In. vlida TPLAZ PSEN Low to Addres Float / PSEN bajo a bus direccin flotante TRLRH RD Pulse Width / Anchura del pulso de lectura TWLWH WR Pulse Widht / Anchura del pulso de escritura. TRLDV RD Low to Valid Data In / RD bajo a Dato In. vlido TRHDX Data Hold After RD / Mantenimiento de Dato despus de RD TRHDZ Data Float After RD / Bus Datos flotante despus de RD TLLDV ALE Low to Valid Data In / ALE bajo a Dato In. vlido TAVDV Addres to Valid Data In / Direccin a Dato In. vlido TLLWL ALE Low to RD or WR Low / ALE bajo a RD o WR bajo TAVWL Addres to RD or WR Low / Direccin a RD o WR bajo TQVWX Data Valid to WR Transition / Dato vlido a transicin WR TQVWH Data Valid to WR High / Dato vlido a WR alto TWHQX Data Hold After WR (Mantenimiento de Dato despus de WR) TRLAZ RD Low to Addres Float (RD bajo a bus flotante Direccin) TWHLH 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

    _________________________________________________________________________ ITMAR, Mazatln 60 Ing. Rufino J. Domnguez Arellano

    6.2.1. Ciclo de lectura en la memoria externa de programas Para acceder a la memoria externa de programas utiliza la seal PSEN (Program Store Enable) como seal de autorizacin de lectura (Figuras 6.1 (A) y 6.2). La seal ALE latchea el byte bajo del bus de direcciones en el primer estado (ciclo de reloj), y as permite direccionar, durant todo el ciclo de instruccin, mientras esas mismas lneas son utilizadas, en el resto del ciclo de instruccin, como bus de datos. En la Figura 6.2 se puede observar que la lectura en la memoria de programas se realiza cuando PSEN est a nivel bajo y las lneas A13, A14 y A15 se encuentran a nivel alto, siendo el resto de las lneas de direccin las que establecen la localidad exacta del byte de instruccin u operando que ha de ser ledo. (La actuacin del PSEN elimina cualquier incompatibilidad que podra producirse al estar los dos chips seleccionados, es decir, CE complementado y CS = 0.) Para el acceso a la memoria de programas, utiliza los 16 bits del bus de direcciones, su posicin en el mapa general de memoria es la que se encuentra al final de los 64 Kbytes puesto que A15=A14=A13=1, concretamente comienza en la direccin 1110 0000 0000 0000 = E000H y termina en la direccin FFFFH, en total 8 Kbytes. A la memoria de programas externa se accede bajo dos condiciones:

    I. Cuando la seal EA es activa, caso de la Figura 8.2. 2. Cuando el contador de programa (PC) contiene un nmero ms grande que 0FFFH para el 8051 o 1 FFFH para el 8052.

    En las versiones de microcontroladores sin ROM (8031 y 8032) tienen la seal de control EA puesta a nivel bajo permanentemente para leer el programa en la memoria externa.

    6.2.2. Ciclo de lectura en la memoria externa de datos Para el acceso a la memoria externa de datos utiliza la seal de control RD (funcin alternativa de P3.7) y puede utilizar los 16 bits de direccin (MOVX A, @DPTR) o bien 8 bits (MOVX A, @Ri) (vase Figura 6.1(B)). En un ciclo de lectura el byte de entrada es aceptado en el Puerto P0 justo antes de que la seal de control RD que autoriza la lectura sea desactivada.

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 61 Ing. Rufino J. Domnguez Arellano

    +5 VEPROM

    2764

    A0A1A2A3A4A5A6A7A8A9A10A11A12

    Vpp

    O7O6O5O4O3O2O1O0

    CEOEPGW

    U3

    RAM

    43256C

    A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14

    Q7Q6Q5Q4Q3Q2Q1Q0

    CS

    OEWR

    U2

    8052

    P1.0/T2P1.1/T2XP1.2P1.3P1.4P1.5P1.6P1.7

    RESET

    T0T1

    X2X1

    P2.5P2.6P2.7

    P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0EA/Vpp

    P2.0P2.1P2.2P2.3P2.4

    ALE/PTXDRXD

    INT0INT1

    PSENWRRD

    U1 74LS373D7D6D5D4D3D2D1D0

    Q7Q6Q5Q4Q3Q2Q1Q0

    OE E

    U4

    +5 V

    +5 VEPROM

    2764

    A0A1A2A3A4A5A6A7A8A9A10A11A12

    Vpp

    O7O6O5O4O3O2O1O0

    CEOEPGW

    U3

    RAM

    43256C

    A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14

    Q7Q6Q5Q4Q3Q2Q1Q0

    CS

    OEWR

    U2

    8052

    P1.0/T2P1.1/T2XP1.2P1.3P1.4P1.5P1.6P1.7

    RESET

    T0T1

    X2X1

    P2.5P2.6P2.7

    P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0EA/Vpp

    P2.0P2.1P2.2P2.3P2.4

    ALE/PTXDRXD

    INT0INT1

    PSENWRRD

    U1 74LS373D7D6D5D4D3D2D1D0

    Q7Q6Q5Q4Q3Q2Q1Q0

    OE E

    U4

    +5 V

    Figura 6.2

    6.2.3. Ciclo de escritura en la memoria externa de datos Para la escritura en la memoria externa de datos utiliza la seal de control WR (funcin alternativa P3.6) y puede utilizar los 16 bits de direccin (MOV @DPTR, A) o bien 8 bits (MOV @Ri, A) (Figura 6.1.(C)). En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto P0 antes y despus de que la seal de control de escritura WR sea desactivada. En general, tanto para la lectura como para la escritura, cuando una direccin de 16 bits es utilizada (MOVX @DPTR), el byte alto de direccin sale por el Puerto P2 donde permanecer mientras dura el ciclo de lectura o escritura. Si se utiliza una direccin de 8 bits (MOVX @Ri), el contenido del Puerto P2 en el SFR permanece sobre los pines de P2 durante todo el ciclo de acceso a la memoria externa. Esto facilita la paginacin (vase Apartado 2.3). Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface, los puertos quedarn en esta situacin:

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 62 Ing. Rufino J. Domnguez Arellano

    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.

    6.3. OPERACIN DE ESCRITURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051 La operacin de escritura, utilizando los puertos del 8052/8051, puede ser realizada por cualquiera de ellos; no obstante, el Puerto P0 es el que presenta una mayor cargabilidad, permitiendo comandar ocho cargas TTL-LS, mientras que los otros tres permiten cuatro cargas TTL-LS. En la ejecucin de una instruccin que cambia el valor del latch del puerto, el nuevo valor llega al latch durante el estado 6, fase 2 del final del ciclo de instruccin, segn indica la Figura 6.3. Antes de comenzar con el estudio y comprobacin de los puertos de E/S, se dibuja el interface para la conexin de los puertos a los dispositivos de salida, que en este caso pueden servir unos simples LED (Figura 6.4). Para comandar cargas de mayor consumo energtico, como rels, se recomienda utilizar, entre el puerto y la carga, drivers no inversores, como el ULN 2003, o inversores, como el ULN 2803, que tienen una cargabilidad de 500 mA y soportan hasta 50 v. Como ya se sabe, el 8052/8051 presenta dos seales de control, una para ejecutar la lectura (RD) y otra para la escritura (WR). Por esto la activacin de estas seales depende del formato de la instruccin. Para la operacin de ESCRITURA en el puerto, la instruccin ms habitual es la siguiente:

    MOV PX, ; X toma valores 0, 1, 2 y 3 segn el puerto. Admitiendo todos los tipos de direccionamiento estudiados en el Captulo 3.

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 63 Ing. Rufino J. Domnguez Arellano

    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

    _________________________________________________________________________ ITMAR, Mazatln 64 Ing. Rufino J. Domnguez Arellano

    .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

    As, por ejemplo, para activar el bit0 del Puerto P0:

    SETB P0.0

    o tambin

    SETB 80 o el bit 1 del Puerto P0:

    SETB P0.1

    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

    _________________________________________________________________________ ITMAR, Mazatln 65 Ing. Rufino J. Domnguez Arellano

    ; Escribe en el puerto P0 configurado como salida ; ORG 0200H ;

    RETAR1 EQU 0300H MOV A, #00H ANL P0, A ; Escribe CERO en el puerto P0 CALL RETAR1 ; Producir retardo

    SAL0: 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

    SAL0: MOV R1, #85H ;Se CARGA R1 con #85H SAL1: MOV R2, #FFH ;Se CARGA R2 con #FFH SAL2: 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

    6.4. OPERACION DE LECTURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051 La operacin de lectura o de adquisicin de datos no representa ningn tipo de problema; solamente se deber cambiar el orden de los operandos en la instruccin respecto a la operacin de escritura. Para la operacin de lectura, el formato de la instruccin ms habitual es el siguiente:

    MOV , PX

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 66 Ing. Rufino J. Domnguez Arellano

    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).

    Ejercicio 6.2. Operacin de lectura en el puerto P0 y de escritura en el puerto P1 Este ejercicio trata de mostrar cmo se manipula el Puerto P0 para utilizarlo como entrada y el P1 como salida, de tal forma que la informacin leda por el Puerto P0 y despus de ser tratada adecuadamente sale escrita por P1. En este caso concreto, la informacin leda por P0 sale intacta por el Puerto P1.

    Figura 6.5 Este es el listado del programa: Lazo: MOV A, P0 MOV P1, A AJMP Lazo

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 67 Ing. Rufino J. Domnguez Arellano

    Figura 6.6

    Ejercicio 6.3. Control de un proceso industrial elemental El siguiente ejercicio muestra cmo realizar el control de un proceso industrial muy simple, utilizando la CPU del microcontrolador para la toma de decisiones, la memoria para almacenar las instrucciones del programa y los datos, y los puertos, uno (de lectura) para comprobar la situacin de los sensores y el otro (de escritura) para enviar la seal a los actuadores. Se ha escogido este ejercicio resuelto en el libro Sistemas Microprocesadores, de J. M. Angulo Usategui, por considerar que es conocido entre muchos profesionales y entusiastas de los micros, y es interesante ver su resolucin desde la perspectiva de los Microcontroladores 8052/8051.

    Proceso 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

    _________________________________________________________________________ ITMAR, Mazatln 68 Ing. Rufino J. Domnguez Arellano

    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

    _________________________________________________________________________ ITMAR, Mazatln 69 Ing. Rufino J. Domnguez Arellano

    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

  • El Microcontrolador 8051 CAP. 6

    _________________________________________________________________________ ITMAR, Mazatln 70 Ing. Rufino J. Domnguez Arellano

    Este es el listado:

    ; Controla el nivel de lquido de un depsito. ; ORG 0300H ; .BYTE 07H,03H,20H,09H,20H,20H,20H,18H ;

    ORG 0200H ;

    MOV DPTR, #0300H ;inicializa puntero de TABLA

    SAL0: MOV A, P0 ; LEE puerto PO ANL A, #07H ; Enmascara MOVC A, @A+DPTR ; Direcciona y captura dato MOV Pl, A ;Acta JMP SAL0 END

  • El Microcontrolador 8051 CAP 7

    _________________________________________________________________________ ITMAR, Mazatln 71 Ing. Rufino J. Domnguez Arellano

    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:

  • El Microcontrolador 8051 CAP 7

    _________________________________________________________________________ ITMAR, Mazatln 72 Ing. Rufino J. Domnguez Arellano

    -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 (T