Está en la página 1de 14

Pontificia Universidad Catlica Madre y Maestra Facultad de Ciencias de la Ingeniera Departamento de Ingeniera Telemtica

Entrega de: Laboratorio de Microprocesadores Clave: ITT-327-072 Reporte prctica #0 Tema: Set de instrucciones y arquitectura del MCU 8051/52

Presentado por: Hugo A. Reyes B.

Matricula: 2011-0371

Profesor: Ing. Luis Francisco

Jueves 23 de enero de 2014 Santiago de los Caballeros, Rep. Dominicana

Introduccin En este reporte se describen los aspectos ms relevantes del microcontrolador MCU 8051/52, como lo son, sus caractersticas, arquitectura sobre la cual se basa, modos de direccionamiento y el set de instrucciones del lenguaje ensamblador. Un microcontrolador es un circuito integrado programable, capaz de ejecutar las rdenes grabadas en su memoria. Est compuesto de varios bloques funcionales, los cuales cumplen una tarea especfica. A pesar de los aos que ya tiene en el mercado, en relacin a los microcontroladores ms modernos, el 8051 es uno de los de mayor popularidad hoy en da. Desde su invencin, se han desarrollado muchos microcontroladores derivados y compatibles con el 8051. A continuacin se dar una descripcin de sus funcionalidades y caractersticas detalladamente, as como el set de instrucciones con ejemplos de sintaxis.

MUC 8051/52 1. Descripcin y caractersticas arquitecturales El 8051 es un microcontrolador desarrollado por Intel en el ao 1980 para su uso en productos embebidos, es decir, equipos de computacin que realizan funciones dedicadas en sistemas de computacin en tiempo real. Es un microcontrolador muy popular y su diseo es utilizado como base para la fabricacin de otros microcontroladores de empresas diferentes a Intel, como Atmel, Dallas Semiconductor, Philips, Winbond, entre otros. El 8051 est basado en la arquitectura Harvard, lo que significa que en el existen espacios de direcciones separados para cdigo y datos. Permite direccionar 64KB de ROM externa y 64KB de RAM a travs de lneas separadas chip select para programa y datos. Contiene una memoria interna, la cual se divide en dos partes: los SFR y memoria de propsito general. Los SFR (Special Function Registers), son los registros proporcionados por el microcontrolador, y tienen asignadas direcciones en esta memoria interna. El acceso a la misma es ms rpido que el acceso a la memoria externa, pero es de tamao limitado. Parte de esta memoria interna adems se usa como pila durante las llamadas a funcin y el proceso de interrupciones. Tambin incluye una unidad de proceso booleano que permite que operaciones de nivel de bit lgica booleana se ejecuten de manera directa y eficientemente en registros internos. La mayora de los 8051 incluyen una o dos UARTs, dos o tres temporizadores, 128 o 256 bytes de RAM interna, cuatro o cinco registros de entrada/salida y entre 0k-54K de memoria interna de programa. El ncleo 8051 original ejecuta un ciclo mquina cada 12 ciclos de reloj, requiriendo la mayora de instrucciones uno o dos ciclos mquina. Pero actualmente la mayora de fabricantes ofrecen versiones mejoradas que slo requieren de 2 a 4 ciclos de reloj por cada instruccin mquina. El 8052 fue una versin mejorada del 8051, que incluye:

256 bytes de RAM interna, en vez de 128 bytes 8 kB de ROM, en vez de 4 kB un tercer temporizador de 16-bit un segundo puerto serie

El 8051 tiene instrucciones de 8 bits de cdigo de operacin u opcode: Existen 256 posibles instrucciones, de las cuales, 255 son implementadas. Algunas instrucciones tienen uno o dos bytes adicionales para datos o direccin. Hay 139 instrucciones de 1 byte, 92 instrucciones de 2 bytes, y 24 de 3 bytes. El 8051 es un dispositivo de 40 pines, de los cuales, 32 se usan para I/O.

Descripcin de pines Pines 1-8: Puerto 1 Cada uno de estos pines puede ser configurado como una entrada o como una salida. Pin 9: RS Una lgica en este pin desactiva el microcontrolador y borra el contenido de la mayora de los registros. Pines 10-17: Puerto 3 - Al igual que el puerto 1, cada uno de estos pines se puede usar como entrada o salida. Pero cada uno tambin tiene funciones alternativas. Pines 18,19: X2,X1 - Entrada y salida del oscilador interno. Un cristal de cuarzo que especifica la frecuencia de funcionamiento suele estar relacionado con estos pasadores. Pin 20: GND Tierra.

Pines 21-28: Puerto 2 - Si no se requiere el uso de la memoria externa entonces estos pines se configuran como entradas/salidas generales. En caso de que se utilice la memoria externa, el mayor byte de direccionamiento, es decir, A8-A15 aparecern en este puerto. Pin 29: PSEN - Si la ROM externa se utiliza para el almacenamiento de programa entonces un cero lgico (0) aparece en l cada vez que el microcontrolador lee un byte de la memoria. Pin 30: ALE Este puerto se utiliza para transmisin de datos y direccionamiento. Antes de la lectura de la memoria externa, el microcontrolador pone el byte de direccin inferior (A0-A7) en P0 y activa la salida ALE. Pin 31: AE - Mediante la aplicacin de cero lgico a este pin, P2 y P3 se utilizan para la transmisin de datos y de direcciones sin tener en cuenta si hay memoria interna o no. Pines 32-39: Puerto 0 - Al igual que P2, si no se utiliza la memoria externa, estos pines se pueden utilizar como entradas/salidas generales. De lo contrario, P0 se configura como salida de direccin (A0-A7) cuando se acciona el pin ALE alta (1) o como salida de datos (bus de datos) cuando el pin ALE es pulsado bajo (0). Pin 40: VCC Fuente de alimentacin de +5V.

2. Set de instrucciones del 8051/52 ACALL La instruccin ACALL llama a una subrutina ubicada en la direccin especificada. El PC se incrementa dos veces para obtener la direccin de la siguiente instruccin. El PC de 16 bits se almacena en la pila (byte de orden inferior primero) y el puntero de pila se incrementa dos veces. Ninguna bandera es afectada. Ejemplo: ACALL LABEL. ADD La instruccin ADD aade un valor de byte al acumulador y almacena los resultados de nuevo en el acumulador. Varios de los registros de la bandera se ven afectados. Ejemplo: ADD A, #03h ADDC La instruccin ADDC agrega un valor de byte y el valor de la bandera de acarreo al acumulador. Los resultados de la adicin se almacenan de nuevo en el acumulador. Varios de los registros de la bandera se ven afectados. Ejemplo: ADDC A, #23h. AJMP Transfiere la ejecucin del programa a la direccin especificada. La direccin est formada por la combinacin de los 5 bits de orden superior de la direccin de la siguiente instruccin (por A15-A11), los 3 bits de orden superior del cdigo de operacin (por A10A8), y el segundo byte de la instruccin (para A7-A0). Ejemplo: AJMP LABEL. ANL La instruccin ANL realiza una operacin AND bit a bit lgica entre el byte especificado o operandos bit y almacena el resultado en el operando destino. Ejemplo: ANL A, #3Fh. CJNE La instruccin CJNE compara los dos primeros operandos y salta al destino especificado si sus valores no son iguales. Si los valores son iguales, la ejecucin contina con la siguiente instruccin. Ejemplo: CJNE @R1, #24H, LABEL. CLR La instruccin CLR establece el operando destino especificado en un valor de 0. Ejemplo: CLR A. CPL La instruccin CPL complementa lgicamente el valor del operando destino especificado y almacena el resultado de vuelta en el operando destino. Los bits que anteriormente

contenan un 1 se cambiarn a un 0 y los bits que anteriormente contena un 0 se cambiar a un 1. Ejemplo: CPL A. DA La instruccin DA ajusta el valor de ocho bits en el acumulador resultante de la adicin anterior de dos variables (cada uno en formato empaquetado-BCD), la produccin de dos dgitos de cuatro bits. Ejemplo: DA A. DEC La instruccin disminuye el operando especificado en 1. Un valor original de 00h a subdesborda 0FFh. No hay banderas se ven afectados por esta instruccin. Ejemplo: DEC @R1. DIV La instruccin DIV divide el entero sin signo de 8 bits en el acumulador por el entero sin signo de 8 bits en el registro B. Despus de la divisin, el cociente se almacena en el acumulador y el resto se almacena en el registro B. Las banderas de acarreo y OV se borran. Ejemplo: DIV AB. DJNZ La instruccin DJNZ decrementa el byte indicado por el primer operando y, si el valor resultante no es cero, salta a la direccin especificada en el segundo operando. Ejemplo: DJNZ 40h, LABEL. INC La instruccin INC incrementa el operando especificado en 1. Un valor original de 0FFh o 0FFFFh desborda a 00h o 0000h. No hay banderas se ven afectados por esta instruccin. Ejemplo: INC @R0. JB La instruccin JB salta a la direccin especificada en el segundo operando si el valor del bit especificado en el primer operando es 1. El bit que se prueba no se modifica. No hay banderas se ven afectados por esta instruccin. Ejemplo: JB P1.2 LABEL JBC Esta instruccin salta a la direccin especificada en el segundo operando si el valor del bit especificado en el primer operando es 1. De lo contrario, la ejecucin contina con la instruccin siguiente. Ejemplo: JBC 44h.

JC La instruccin JC salta a la direccin especificada si la bandera de acarreo est establecida. De lo contrario, la ejecucin contina con la instruccin siguiente. No hay banderas que se vean afectadas por esta instruccin. Ejemplo: JC LABEL JMP La instruccin JMP transfiere la ejecucin para la direccin generada sumando el valor de 8 bits en el acumulador con el valor de 16 bits en el registro DPTR. Ni el acumulador ni el registro DPTR se alteran. No hay banderas se ven afectados por esta instruccin. Ejemplo: @A+DPTR. JNB La instruccin JNB salta a la direccin especificada si el operando de bit especificado tiene un valor de 0. De lo contrario, la ejecucin contina con la instruccin siguiente. No hay banderas se ven afectados por esta instruccin. Ejemplo: P1.3, LABEL. JNC Transfiere el control del programa a la direccin especificada si la bandera de acarreo es 0. De lo contrario, la ejecucin contina con la instruccin siguiente. No hay banderas se ven afectados por esta instruccin. Ejemplo: JNC LABEL. JNZ Transfiere el control a la direccin especificada si el valor en el acumulador no es 0. Si el acumulador tiene un valor de 0, se ejecuta la siguiente instruccin. Ni el acumulador ni ninguna bandera se modifican mediante esta instruccin. Ejemplo: JNZ LABEL. JZ Transfiere el control a la direccin especificada si el valor en el acumulador es 0. De lo contrario, se ejecuta la siguiente instruccin. Ni el acumulador ni ninguna bandera son modificados por esta instruccin. Ejemplo: JZ LABEL. LCALL La instruccin LCALL llama a una subrutina ubicada en la direccin especificada. Esta instruccin suma primero 3 a la PC para generar la direccin de la siguiente instruccin. Este resultado se inserta en la pila byte bajo primero y el puntero de pila se incrementa en 2. Los de orden superior y de orden inferior bytes del PC se cargan desde el segundo y tercer bytes de la instruccin, respectivamente. La ejecucin del programa se transfiere a la subrutina en esta direccin. Ejemplo: LCALL SUB1. LJMP Transfiere la ejecucin del programa a la direccin de 16 bits especificado. El PC se carga con los de orden superior y de orden inferior bytes de la direccin de la segunda y tercera

bytes de esta instruccin, respectivamente. No hay banderas se ven afectados por esta instruccin. Ejemplo: LJMP LABEL. MOV La instruccin MOV mueve bytes de datos entre los dos operandos especificados. El byte especificado por el segundo operando se copia en la ubicacin especificada por el primer operando. El byte de datos de origen no se ve afectado. Ejemplo: MOV @R0, A. MOVC La instruccin MOVC mueve un byte desde el cdigo o la memoria del programa para el acumulador. Ejemplo: MOVC A, @A+DPTR. MOVX Transfiere datos entre el acumulador y la memoria de datos externa. La memoria externa se puede abordar a travs de 16-bits en el registro DPTR oa travs de 8-bits en los registros R0 o R1. Al utilizar 8 bits de direccionamiento, el puerto 2 debe contener el byte de orden superior de la direccin. Ejemplo: MOVX @R0, A. MUL La instruccin MUL multiplica el entero sin signo de 8 bits en el acumulador y el entero sin signo de 8 bits en el B la produccin de un producto de 16 bit de registro. El byte de orden inferior del producto se devuelve en el acumulador. El byte de orden superior del producto se devuelve en el registro B. La bandera OV se establece si el producto es mayor que 255 (0FFh), de lo contrario, se restablece. La bandera de acarreo est siempre desactivada. Ejemplo: MUL AB. NOP La instruccin NOP no hace nada. La ejecucin contina con la siguiente instruccin. No hay registros o banderas que se ven afectados por esta instruccin. NOP se utiliza tpicamente para generar un retraso en la ejecucin o para reservar espacio en la memoria de cdigo. Ejemplo: NOP. ORL La instruccin ORL realiza una operacin lgica OR bit a bit de los operandos especificados, el resultado de que se almacena en el operando de destino. Ejemplo: ORL A, #01h POP La instruccin POP lee un byte de la direccin indirecta hace referencia el registro SP. El valor ledo se almacena en la direccin especificada y el puntero de pila se decrementa. No hay banderas se ven afectados por esta instruccin. Ejemplo: POP 34h.

PUSH La instruccin PUSH incrementa el puntero de pila y almacena el valor del operando de bytes especificada en la direccin de la memoria RAM interna indirectamente referenciado por el puntero de pila. No hay banderas se ven afectados por esta instruccin. Ejemplo: PUSH A. RET La instruccin RET hace estallar los de orden superior y de orden inferior bytes de la PC de la pila (y disminuye el puntero de pila por 2). La ejecucin del programa se reanuda desde la direccin resultante, que normalmente es la instruccin que sigue a un ACALL o instruccin LCALL. Ejemplo: RET. RETI La instruccin RETI se utiliza para terminar una rutina de servicio de interrupcin. Esta instruccin hace estallar los de orden superior y de orden inferior bytes del PC (y disminuye el puntero de pila por 2) y restaura la lgica interrput aceptar interrupciones adicionales. No hay otros registros se ven afectados por esta instruccin. Ejemplo: RETI. RL La instruccin RL gira los ocho bits en el acumulador de la izquierda una posicin de bit. El bit 7 del acumulador se hace girar en el bit 0, bit 0 en el bit 1, bit 1 en el bit 2, y as sucesivamente. No hay banderas se ven afectados por esta instruccin. Ejemplo: RL A. RLC La instruccin RLC gira los ocho bits en el acumulador y el bit de la bandera de acarreo dej una posicin de bit. El bit 7 del acumulador se hace girar en la bandera de acarreo mientras que el valor original de la bandera de acarreo se hace girar en el bit 0 del acumulador. El bit 0 del acumulador se hace girar en el bit 1, bit 1 en el bit 2, y as sucesivamente. Ejemplo: RLC A. RR La instruccin RR gira los ocho bits en el acumulador de la derecha de posicin un poco. El bit 0 del acumulador se hace girar en el bit 7, el bit 7 en el bit 6, y as sucesivamente. No hay banderas se ven afectados por esta instruccin. Ejemplo: RR A. RRC La instruccin RRC gira los ocho bits en el acumulador y el bit de la bandera de acarreo derecha posicin de un bit. El bit 0 del acumulador se hace girar en la bandera de acarreo mientras que el valor original de la bandera de acarreo se hace girar en el bit 7 del acumulador. El bit 7 del acumulador se hace girar en el bit 6, el bit 6 en el bit 5, y as sucesivamente. Ejemplo: RRC A.

SETB La instruccin SETB establece el bit operando a un valor de 1. Esta instruccin puede funcionar con la bandera de acarreo o cualquier otro bit directamente direccionable. Ejemplo: SETB 63h. SJMP La instruccin SJMP transfiere la ejecucin a la direccin especificada. La direccin se calcula sumando el desplazamiento en el segundo byte de la instructoin a la direccin de la siguiente instruccin relativa firmado. Ejemplo: SJMP LABEL. SUBB La instruccin SUBB resta la variable de bytes especificada y la bandera de acarreo desde el acumulador. El resultado se almacena en el acumulador. Esta instruccin establece la bandera de acarreo si necesita un prstamo para el bit 7 del resultado. Si no se necesita pedir prestado, la bandera de acarreo se borra. Ejemplo: SUBB A, #01h. SWAP La instruccin SWAP intercambia los bocaditos de bajo orden y de orden superior dentro del acumulador. Ejemplo: SWAP A. XCH La instruccin XCH carga el acumulador con el valor del byte del operando especificado mientras al mismo tiempo almacenar el contenido previo del acumulador en el operando especificado. Ejemplo: XCH A, @R0. XCHD La instruccin XCHD intercambia el nibble de orden inferior del acumulador con el cuarteto de orden inferior de la posicin de la RAM interna especificada. La RAM interna se accede indirectamente a travs de R0 o R1. Ejemplo: XCHD A, @R1. XRL La instruccin XRL realiza una operacin lgica OR exclusiva entre los operandos especificados. El resultado se almacena en el operando de destino. Ejemplo: XRL A, #0FFh.

3. Clasificacin de las instrucciones o o o o o Aritmticas: ADD, ADDC, SUBB, INC, DEC, MUL, DIV, DA, XCH, XCHD, NOP. Lgicas: ANL, ORL, XRL, CLR, CPL, RL, RR, RRC, RLC, SWAP, SETB. Control: JC, JNC, JB, JNB, JBC, JZ, JNZ, AJMP, LJMP. Transferencia de datos: MOV, MOVX, MOVC, PUSH, POP. Manipulacin de bits: CLR, SETB, CPL, MOV, ANL, ORL.

4. Modos de direccionamiento o Directo En el direccionamiento directo, se indica la direccin a operar de forma absoluta. Para la familia de microcontroladores 8051, se dispone de 256 direcciones directas, correspondientes a (RAM interna + Registros SFR). o Por registro Para el direccionamiento por registro, el cdigo de la operacin (Opcode) contiene la informacin del registro a operar, del banco de registros seleccionado. o Indirecto Se especifica un registro que contiene la direccin del dato a operar. R0, R1, cuando se accede a la memoria interna de direccionamiento indirecto 256 bytes. DPTR para el acceso a la memoria externa 64K Bytes. o Implcito La instruccin indica implcitamente el registro sobre el que se ha de operar. o Inmediato El Opcode est seguido de una constante que representa el valor con el que se operar. o Indexado Se utilizan dos registros para apuntar a la direccin que contiene el dato. La suma del contenido del DPTR ms el acumulador determina la direccin a operar.

Conclusin Finalizada la elaboracin de este reporte, se tiene una perspectiva mucho mejor acabada sobre un microcontrolador, de lo que son sus caractersticas y operaciones ms importantes. Especficamente se present el microcontrolador 8051/52 de Intel, y este representa la base para la fabricacin de muchos otros microcontroladores que le sucedieron, por ello se puede relacionar su funcionamiento y cualidades con la de los dems. Se pudo notar el amplio set de instrucciones que un programador debe manejar para poder trabajar con el mismo, y estas instrucciones se pueden dividir o clasificar en diversos grupos, esto debido a que realizan funciones similares, como por ejemplo, aritmticas, lgicas, de control, transferencia de datos, etc. Tambin se destacaron los modos de direccionamiento de este microcontrolador, que bsicamente se refiere a la forma en la que opera el dispositivo al manejar las instrucciones, ya sea de manera directa, indirecta, implcita, por registro, etc.

Bibliografa o http://www.keil.com/support/man/docs/is51/is51_instructions.htm o http://www.alciro.org/alciro/microcontroladores-8051_24/modosdireccionamiento_233.htm o http://es.wikipedia.org/wiki/Microcontrolador

o http://es.scribd.com/doc/58762580/Set-de-Instrucciones-Intel-8051

También podría gustarte