Está en la página 1de 53

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

CAPITULO 1

CARACTERSTICAS DEL AT89C52

La familia de microcontroladores de Intel conocida como MCS-51 represento el despegue en el uso y aplicacin de los microcontroladores, los miembros de esta familia se encuentran en diversas presentaciones, tanto en formas fsicas como en caractersticas, la seleccin de uno o de otro tipo de microcontrolador depender principalmente de las necesidades a satisfacer; diversos fabricantes de semiconductores tienen, basados en esta familia, sus propios derivados. En este documento se tratar de manera particular del ATMEL AT89C52, el cual se presenta con 8 Kbytes en la versin EEPROM. Es necesario relacionar a este microcontrolador con los de la familia MCS-51, que estn basados en los microprocesadores de 8 bits; contienen internamente un CPU de 8 bits, 4 puertos de entrada y salida paralelo completamente programables en forma individual como salidas o entradas, de los cuales el puerto 3 tiene tambin funciones de control con las particularidades siguientes: un puerto serie, 2 entradas para Timer/Contador de 16 bits, 2 entradas para interrupciones externas, las seales de RD y WR para la toma o almacenamiento de datos en RAM externa y en el puerto 1 se encuentra el timer 2. Adems, cuenta tambin con 256 bytes de memoria RAM interna. El AT89C52 es capaz generar la frecuencia (Baud Rate) de Transmisin/Recepcin de datos por el puerto serie, de manera automtica partiendo de la frecuencia del oscilador general, por medio de la programacin del Timer 1 o del 2. Dicha frecuencia de transmisin puede ser cambiada en cualquier momento con slo cambiar el valor almacenado en el contador, o tambin se puede duplicar o dividir la frecuencia con slo escribir directamente sobre el bit 7 (bit SMOD) del registro de control PCON. En la tabla 1se muestra la familia de microcontroladores MCS-51, en la que se listan las principales caractersticas de estos dispositivos.

Nombre 8051 80C51 8052 80C52

Versin sin ROM AT89C52 80C31 8032 80C32

Versin EEPROM AT89C51 AT89C52

Versin EPROM 87C51 87C52

Bytes en ROM 4k 4k 8k 8k

Bytes en RAM 128 128 256 256

Timers 16-Bits 2 2 3 3

Tipo de Circuito NMOS HMOS NMOS CMOS

Tabla 1. Familia de microcontroladores de la familia MCS-51 incluyendo a los ATMEL.

Pgina 1

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

La figura 1 muestra el diagrama a bloques de un miembro de esta familia de microcontroladores. Se trata del C AT89C52; este dispositivo por su bajo costo es el que se usar como elemento de control en los experimentos que aqu se proponen.

Figura 1. Diagrama a Bloques del C 80C31.

1.1

DESCRIPCIN DE LAS LNEAS (PINES) DEL AT89C52

La presentacin de este dispositivo puede encontrarse en tres tipos de encapsulado: - DIP - PLCC -PQFP/TQFP Dual In Line Package (figura 2). Plastic Leaded Chip Carrier

La presentacin DIP es utilizada para montaje de Pin In Hole (PIH), en tanto que las presentaciones en PLCC y PQFP/TQFP son especiales para la Tecnologa de Montaje Superficial (SMT). La distribucin de pines en el microcontrolador del tipo DIP, que en proyectos a nivel de aprendizaje es el mas apropiado se muestra en la siguiente figura 2.
Pgina 2

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Figura 2. Distribucin de los pines del AT89C52.


EL AT89C52 es un microcontrolador de 8 bits con 8 Kbytes de memoria flash de bajo consumo y gran desempeo (PEROM). Este dispositivo es fabricado usando la tecnologa de memoria no voltil de ATMEL y es compatible con el estndar, muy usado en la industria, 80C51 y 80C52, en cuanto a sus pines de conexin y a su set de instrucciones. La memoria flash contenida internamente permite que el programa contenido pueda se modificado en el sistema o por cualquier convencional programador. Combinando la verstil CPU de 8 bits y la memoria Flash en un solo chip, este microcontrolador permite soluciones flexibles y de bajo precio a muchas aplicaciones de control. Entre sus caractersticas mas relevantes tenemos: Compatibilidad con los productos de la familia MCS-51 8K bytes de memoria reprogramable flash interna hasta 1000 ciclos de escritura/lectura operacin completamente esttica, desde 0 HZ hasta 24 MHZ tres niveles de seguridad para la proteccin de cdigo Memoria interna RAM de 256 x 8-bit 32 lineas de entrada/salida programables Tres Timers/Contadores de 16 bits 8 fuentes de interrupcin con 2 niveles de prioridad 1 puerto de comunicacin serial 1 modos IDLE y de bajo consumo de energa

Pgina 3

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

1.2

DESCRIPCIN DE CONEXIONES

La Tabla 2 muestra la descripcin de los pines que conforman al C AT89C52, en el entendido que los miembros de la familia MCS-51 tienen las mismas caractersticas.

MNEMNICO VCC VSS P0.0-P0.7

CONEXIN 40 20 39-32

TIPO E/S E/S

NOMBRE Y FUNCIN Alimentacin positiva +5V. Tierra referencia 0 Volts . PUERTO 0. Es un puerto I/O bidireccional con salidas en colector abierto. Cuando el puerto tiene 1s escritos, las salidas estn flotadas y pueden servir como entradas en alta impedancia. Puede activar hasta 8 compuertas TTL y es el que recibe los datos en la programacin necesita de resistencias pull-ups en la programacin y en la verificacin PUERTO 1. Es un puerto I/O bidireccional, con pullups internas. Puede activar hasta 4 compuertas TTL, cuando se escriben 1s en el puerto, ste puede ser utilizado como entrada en alta impedancia., adems P1.0 y P1.1 pueden ser configurados como entradas del timer/contador 2, tambin recibe la direccin baja durante la programacin y la verificacin PUERTO 2. Es un puerto I/O bidireccional, con pullups internas. Puede activar hasta 4 compuertas TTL, cuando se escriben 1s en el puerto, ste puede ser utilizado como entrada en alta impedancia. Como entradas, las lneas que son externamente colocadas en la posicin baja, proporcionarn una corriente hacia el exterior. El puerto 2 es utilizado adems, para direccionar memoria externa. Este puerto, emite el byte ms alto de la direccin durante la bsqueda de datos en la memoria de programa externa y durante el acceso a memoria de datos externa que usan direccionamientos de 16 bits. Durante el acceso a una memoria de datos externa que usa direcciones de 8 bits, el puerto 2 emite el contenido del registro correspondiente a este puerto, que se encuentra en el espacio de funciones especiales. Recibe tambin las direcciones altas durante la programacin y la verificacin

P1.0-P1.7

1-8

E/S

P2.0-P2.7

21-28

E/S

P3.0-P3.7

10-17

E/S

RxD TxD INT0 INT1 T0

10 11 12 13 14

E S E E E

PUERTO 3. Es un puerto quasi-bidireccional con fijadores de nivel internos (PULL-UP). Cuando se escriben 1s sobre el puerto, las lneas pueden ser utilizadas como entradas en alta impedancia. Como entradas, las lneas que son externamente colocadas en la posicin baja proporcionarn una corriente hacia el exterior. El puerto 3 es utilizado adems, para producir seales de control de dispositivos externos tales como: (P3.0) Puerto serie de entrada. (P3.1) Puerto serie de salida. (P3.2) Interrupcin externa 0. (P3.3) Interrupcin externa 1. (P3.4) Entrada externa timer 0.

Pgina 4

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

T1 WR RD RST

15 16 17 9

E S S E

(P3.5) Entrada externa timer 1. (P3.6) Habilitador de escritura para memoria externa de datos. (P3.7) Habilitador de lectura para memoria externa de datos. RESET. Una entrada alta en esta lnea durante dos ciclos mquina, mientras el oscilador est funcionando, detiene el dispositivo. Un resistor interno conectado a Vss permite un alto en la fuente usando solamente un capacitor externo a Vcc. ADDRESS LATCH ENABLE. Un pulso positivo de salida, permite fijar el byte bajo de la direccin durante el acceso a una memoria externa. En operacin normal. ALE es emitido en un rango constante de 1/6 de la frecuencia del oscilador, y puede ser usada para cronometrar. Note que un pulso del ALE es emitido durante cada acceso a la memoria de datos externos. Durante la programacin este pin es la entrada del pulso de programacin. POGRAM STORE ENABLE. Habilitador de lectura para memoria de programa externa. Cuando el AT89C52 est ejecutando un cdigo de una memoria de programa externa, PSEN es activada dos veces cada ciclo de mquina, excepto cuando se accesa a la memoria de datos externa que omiten las dos activaciones del PSEN externos. PSEN no es activado cuando se usa la memoria de programa interna.

ALE

30

E/S

PSEN

29

EA

32

XTAL1

19

XTAL2

20

EXTERNAL ACCESS ENABLE. EA debe mantenerse externamente en posicin baja para habilitar el mecanismo que elige el cdigo de direccionamiento para memoria de programa externa, 0000H y 0FFFH. Si EA se mantiene en posicin alta, el dispositivo ejecuta los programas que se encuentran en la memoria interna (ROM), a menos que el contador del programa exceda la direccin 1FFFH. Este pin recibe el pulso de 12 volts de Vpp durante la programcin CRISTAL 1. Esta es la entrada del cristal para el circuito oscilador (generador del reloj interno) que amplifica e invierte la entrada. CRISTAL 2. Es la salida del amplificador oscilador inversor

Tabla 2. Configuracin de los pines del C AT89C52.

XTAL1 Y XTAL2 son la entrada y la salida, respectivamente, de un amplificador inversor que puede ser configurado para su uso como un chip oscilador, como se muestra en la siguiente figura (Figura 3). Se puede utilizar indistintamente un cristal de cuarzo o un resonador cermico.

Pgina 5

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52


1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

2 39 Figura 3. Oscilador del AT89C52 P11 P00 3 38 P12 P13 P14 P15 P16 P17 RESET RXD TXD INT0 INT1 T0 T1 WR RD X2 X1 GND P01 P02 P03 P04 P05 P06 P07 EA/VP ALE/P PSEN P27 P26 P25 P24 P23 P22 P21 P20

P10

VCC

DC a 12 MHZ max

C1 10pf a 30 pf

C2 10 pf a 30 pf

Figura 3. Circuito Oscilador

El RESET automtico del microcontrolador, se produce al aplicar la tensin de alimentacin (Vcc) al pin 9 (RST) a travs de un capacitor de 10 F y una resistencia de 8.2 kohms, como se indica en la figura 4.

VC 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 P1 P1 P1 P1 P1 P1 P1 P1 RESE RX TX INT INT T0 T1 W R X2 X1 GN VC P0 P0 P0 P0 P0 P0 P0 P0 EA/V ALE/ PSE P2 P2 P2 P2 P2 P2 P2 P2 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

10

R 10

Figura 4. Reset del sistema.

Pgina 6

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

1.3

CARACTERSTICAS ESPECFICAS DEL AT89C52

Entre sus caractersticas mas relevantes tenemos: Compatibilidad con los productos de la familia MCS-51 8K bytes de memoria reprogramable flash interna hasta 1000 ciclos de escritura/lectura operacin completamente esttica, desde 0 HZ hasta 24 MHZ tres niveles de seguridad para la proteccin de cdigo Memoria interna RAM de 256 x 8-bit 32 lineas de entrada/salida programables Tres Timers/Contadores de 16 bits 8 fuentes de interrupcin con 2 niveles de prioridad 1 puerto de comunicacin serial 1 modos IDLE y de bajo consumo de energa

1.4

DESCRIPCIN DE LOS ESPACIOS DE MEMORIA

La memoria del sistema del AT89C52 se clasifica en tres tipos fundamentales como se describe a continuacin. La primera, llamada MEMORIA DE PROGRAMA, en donde se encuentran todas las instrucciones que van a ser ejecutadas por el C, es decir, el programa de trabajo. Algunas versiones del AT89C52 cuentan con memoria de programa interna (de 4KB en el AT89C51 y de 8KB en el AT89C52). Cuando se requiere trabajar con una localidad arriba de sta, la memoria del programa externa es seleccionada mediante la activacin de la seal PSEN (estado bajo). El mximo espacio de memoria de programa que se puede acceder es de 64 Kb, utilizando para esto los puertos P0 y P2. El segundo espacio de memoria, denominado MEMORIA DE DATOS, es accesado mediante la activacin de las seales RD y WR (P3.6 y P3.7 respectivamente), durante la lectura o escritura de datos respectivamente. En este espacio el C toma todos los valores que se encuentran en memoria como DATOS, es decir, el C no puede ejecutar ninguna instruccin que se encuentre aqu almacenada. El AT89C52 puede direccionar tambin 64 Kb de memoria de datos. El tercer espacio de memoria es el denominado MEMORIA RAM INTERNA, el cual se subdivide en 256 bytes de memoria bajos y en 256 bytes de memoria altos. Los primeros 256 bytes, son registros utilizables por el usuario y son de gran ayuda para la simplificacin de los programas, debido a que cada uno de ellos nos permiten almacenar datos momentneamente y realizar un basto nmero de instrucciones del AT89C52. En la parte alta de la memoria RAM
Pgina 7

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

interna, se encuentran el contenido de los Registros de Funciones Especiales, formado por puertos, Registros de Control, Acumuladores, Registros de interrupcin, etc.

1.5

MEMORIA DE PROGRAMA

Como ya se mencion, el AT89C52 cuenta con 8Kb de memoria PEROM interna, la cual puede ser accesada mediante la conexin de la lnea EA a Vcc, de esta manera el CPU, automticamente, leer el programa del ROM interno, desde 0000H hasta 1FFFH, y si en algn caso el Program Counter llegara a exceder esta ltima direccin, las siguientes instrucciones sern buscadas en la memoria externa (a partir de 2000H hasta FFFFH). Por el contrario, si la lnea EA es conectada a tierra, el AT89C52 buscar el total de las instruccines en la ROM externa (desde la direccin 0000H hasta FFFFH). En el caso del entrenador presentado en este libro esta lnea se conecta siempre a 5 volts (Vcc) ya que siempre se usa la memoria ROM INTERNA. En la figura 5 se muestra de una manera grfica la disposicin de ambos tipos de memorias.

Figura 5. Organizacin de la Memoria de Programa

Pgina 8

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

La lnea PSEN (Program store enable), que sirve para leer el ROM externo, es activado en todas las bsquedas (fetches) del ROM externo. La figura 6, en el caso que se requiera, muestra una conexin a una EPROM externa.

Figura 6. Conexin de una memoria externa. Dentro de la memoria de programa se debern encontrar localidades asignadas (vectores) para la atencin de interrupciones, cuando una interrupcion se origina, el CPU acudir a la localidad asignada por el fabricante, pero programada y considerada por el usuario en la memoria de programa, con el propsito de ejecutar las instrucciones que se desea se lleven a cabo al presentarse esta situacin. En la siguiente tabla 3 se muestran las fuentes de interrupcin, su respectiva direccin en memoria.

FUENTE DE INTERRUPCIN
IE0 (Interrupcin 0 externa) TF0 (Interrupcin del timer 0) IE1 (Interrupcin 1 externa) TF1 (interrupcin del timer 1) R1 y T1 (Interrupcin serie)

VECTOR DE DIRECCIONES
0003H 000BH 0013H 001BH 0023H

Tabla 3. Interrupciones. Una interrupcin puede ser causada de manera externa o interna, es decir, puede ser producida por un dispositivo perifrico o por programacin, indistintamente. La interrupcin

Pgina 9

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

con mayor alto orden es el RESET el cual no puede ser enmascarable. Cuando, el RESET ocurre el programa se reinicia a partir de la direccin 0000H del programa. Si una interrupcin es producida, el Contador del Programa (PC) almacena su contenido temporalmente en la localidad que le seala el SP stack pointer (apuntador de pila) y se carga con la direccin de la localidad donde se encuentra la rutina de servicio de la interrupcin correspondiente. Una vez posicionado en esta localidad deber de comenzar la ejecucin de la rutina de servicio, hasta que encuentre la instruccin RETI, que le permitir al Program Counter (PC) recuperar nuevamente su valor original almacenado en el Stack Pointer (SP), y continuar con el programa anterior a la interrupcin. Por ejemplo a la interrupcin 0, se le asigna la localidad 0003H, si la interrupcin no se utiliza, esta localidad puede emplearse para propsitos generales del programa, si la interrupcin ha sido permitida, en el momento que exista una activacin de la interrupcin (estado bajo en la lnea INT0, pin p3.2) el PC se cargar con 0003H y saltar a esa localidad para comenzar a ejecutar la rutina de servicio. Estas localidades de memoria de los servicios de interrupcin estn separadas en intervalos de 8 bytes, entre s. Cuando un servicio de interrupcin es corto, ste puede estar contenido en estos 8 bytes. En el caso de que fuese largo, se puede ejecutar un salto a otra localidad de memoria para continuar con la secuencia de interrupcin. El trmino del servicio de interrupcin deber de realizarse mediante la ejecucin de la instruccin RETI.

1.6

MEMORIA DE DATOS (DATA MEMORY)

El espacio total de memoria RAM interno est dividido en tres espacios, el primer bloque es referido como la parte baja de 128 bytes, el segundo (se tiene slo en algunas versiones del AT89C52 v.gr.8052), la parte alta de 128 bytes y el tercero, llamado espacio SFR (Registros de Funciones Especiales), otros 128 bytes. Las direcciones de la memoria interna de datos siempre son de un byte (de 00H a FFH). Sin embargo, los modos de direccionamiento para la memoria interna pueden acomodar hasta 384 bytes, como se ve en la versin 89C52, lo cual es posible debido a que el modo de direccionamiento directo accede un espacio de memoria diferente fsicamente al permitido por el modo de direccionamiento indirecto.(Ver figura 7)

Pgina 10

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Figura 7. Estructura de la memoria RAM interna.

Los primeros 128 bytes son denominados de usuario, es una zona de memoria que normalmente es usada para manipular datos que no son importantes, esto es, que solo se ocupan para la toma de decisiones logicas o de sealizacin, estos bytes estn presentes en todos los dispositivos de la familia MCS-51, se presenta en la figura 8.

Pgina 11

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Figura 8. Distribucin de los 128 bytes ms bajos de la memoria RAM interna.

Como se puede apreciar en al figura 8, los 128 bytes ms bajos son divididos en 4 bloques de 8 registros cada uno, que contienen los valores de los registros R0 a R7, estos bloques pueden ser seleccionados mediante la escritura en los bits 3 y 4 del registro PSW (palabra del estado del programa), mediante las combinaciones de unos o ceros. El empleo de registros permite un uso ms eficiente del espacio de cdigos, debido a que sus direccionamientos son de 8 bits nicamente. Como ya se mencion, existen algunas versiones del AT89C51, como el AT89C52, que contienen 128 bytes de memoria interna que pueden ser direccionadas de manera indirecta. Por otro lado, todas las versiones del AT89C52 contienen un espacio de 128 bytes en la parte alta de la memoria que son direccionados directamente, en este espacio se localizan los Registros de Funciones Especiales (SFR). Estos registros especiales, tienen sus localidades bien establecidas, y son utilizados por el microcontrolador para realizar las distintas operaciones internas que ejecuta al decodificar la instruccin y ejecutarla, as como tambin para el control y acceso de los diferentes puertos de entrada y salida.

Pgina 12

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

1.7

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's se puede direccionar de esta forma. Ejemplo: MOV A,45H ;el contenido de la direccin de memoria 45H es transferido al Acc.

Direccionamiento indirecto.
La instruccin especifica un registro que contiene la direccin del operando. Tanto la memoria RAM interna como la externa se pueden direccionar indirectamente. Los registros para direccionar el mapa de 8 bits pueden ser 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: MOV @R0,A ;el contenido del Acc es transferido a la direccin que indica el contenido de R0. Direccionamiento por registro. Se tienen 4 bancos de registros seleccionados por los bits 3 y 4 del PSW y cada banco de registro tiene 8 registros R0 a R7. El propio cdigo de operacin de la instruccin especifica con cual registro opera, es decir, cuando la instruccin es ejecutada, se accede a uno de los 8 registros del banco seleccionado. Ejemplo: MOV R5,A ;el contenido del Acc es transferido a R5 (direccin de RAM 05H) Direccionamiento implcito. Algunas instrucciones especifican implcitamente, el registro sobre el cual van a operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando porque est implcito en el cdigo de operacin. Ejemplo: INC A ;el contenido del Acc es incrementado en 1. Direccionamiento inmediato. Al cdigo de operacin le sigue una constante en la memoria de programas. Ejemplo: MOV R1,#34H ;el dato 34H es transferido a R1 (direccin 01H de la RAM)

Pgina 13

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

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 programas) 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 acceder esta formada por la suma del acumulador y el puntero base. Ejemplo: MOVC A,@A+DPTR ;el contenido de la direccin de memoria de programa indicada por la suma del valor actual del Acumulador y el Data Pointer es transferido a el Acumulador. Se puede utilizar otro tipo de direccionamiento indexado en los saltos de instruccin. En este caso la direccin de destino del salto se computa como la suma del puntero base y el dato del acumulador.

CAPITULO 2

REGISTROS DE FUNCIONES ESPECIALES

A continuacin se describen los registros y funciones con los cuales se puede controlar en su totalidad al AT89C52. Las direcciones de los Registros de Funciones Especiales (que en lo sucesivo se denominarn SFR) se muestran en la tabla 4.

SMBOLO
ACC B PSW SP DPTR DPL DPH IP IE TMOD TCON TH0 TL0 TH1 TL1 SCON SBUF

NOMBRE
Acumulador Registro B Program Status Word Stack Pointer Data Pointer (16 bits) Byte bajo del Data Pointer Byte alto del Data Pointer Prioridad de interrupciones Habilitador de interrupciones Modo de control del Timer/Contador Control del Timer/Contador Byte alto del Timer/Contador 0 Byte bajo del Timer/Contador 0 Byte alto del Timer/Contador 1 Byte bajo del Timer/Contador 1 Control del puerto serie Buffer de datos del puerto serie

DIRECCIN
0E0H 0F0H 0D0H 81H 82H,83H 82H 83H 0B8H 0A8H 89H 88H 8CH 8AH 8DH 8BH 98H 99H

Pgina 14

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

PCON P0 P1 P2 P3

Control de potencia Puerto 0 Puerto 1 Puerto 2 Puerto 3

87H 80H 90H 0A0H 0B0H

Tabla 4. Registros de Funciones Especiales.

Cabe mencionar que estos registros se encuentran en la parte alta de la memoria RAM interna del AT89C52. A continuacin se analiza cada uno de los registros, as como los bits ms importantes de cada uno y la funcin que desempean en el control del AT89C52. En la siguiente tabla (Tabla 5) se observa el mapa de memoria de los Registros de Funciones Especiales.

8 BYTES F8 F0 E8 E0 D8 D0 C8 C0 B8 B0 A8 A0 98 90 88 80 IP P3 IE P2 SCON P1 TCON P0 TMOD SP TL0 DPL TL1 DPH TH0 TH1 PCON SBUF PSW ACC B FF F7 EF E7 DF D7 CF C7 BF B7 AF A7 9F 97 8F 87

Registros direccionados por bit

Tabla 5. Mapa de memoria de los SFR.

Pgina 15

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

2.1

ACUMULADOR

ACC es el registro Acumulador. En las instrucciones especficas que se refieren a todo el byte, el mnemnico de ste se conoce simplemente como A. Este registro es de los ms importantes, puesto que es utilizado como un registro procesador y en torno a l se realizan la mayora de las operaciones, tanto aritmticas como lgicas, es por esto que en su arquitectura es el registro ms complicado. Es importante mencionar que despus de realizada una operacin aritmtica, el resultado de esta operacin aparecer en el acumulador.

2.2

REGISTRO B

El registro B es usado durante las operaciones de multiplicacin y divisin, por lo que se toma como un acumulador auxiliar. Pero adems, puede ser utilizado como cualquier otro registro de propsito general.

2.3

STACK POINTER

El Stack Pointer es un registro de 8 bits. Contiene la direccin de memoria RAM interna, en la que se guardar el dato al utilizar la instruccin PUSH o en su defecto, de donde el dato contenido en esta direccin, ser obtenido al ejecutar la instruccin POP. Despus del reset el SP apunta a la direccin 07H, por lo que la primera direccin disponible, por default, ser la direccin 08H (R0 del segundo banco de registros). Cabe mencionar que el SP puede ser movido a cualquier direccin de memoria (RAM interna) y que en todas las llamadas a subrutina o interrupcin es usado recuperando los datos almacenados con las instrucciones de retorno RET y RETI.

Pgina 16

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

2.4

DATA POINTER

El Data Pointer (DPTR) consiste en un byte alto (DPH) y un byte bajo (DPL). Esta diseado para retener direcciones de 16 bits. Puede ser manipulado como un registro de 16 bits, o como dos registros independientes de 8 bits. Este registro se utiliza para mover datos hacia y desde la memoria ROM interna utilizando 16 bits de direccionamiento.

2.5

PUERTOS 0 AL 3

P0, P1, P2 y P3 son los latches de los SFR correspondientes a los Puertos 0, 1, 2 y 3 respectivamente. Escribir un 1 en un bit de un puerto (P0, P1, P2 o P3) causa la correspondiente salida de un estado alto por el pin del puerto. Escribir un cero causa la salida de un estado bajo por el mismo. Cuando se usan como entrada, el estado externo del pin es tomado en el registro correspondiente al puerto (por ejemplo, si el estado externo de un pin es bajo, el bit correspondiente al puerto SFR contiene un 0; si es alto contendr un 1).

2.6

BUFFER DE DATOS SERIALES

El buffer serial son, en realidad, dos registros separados, un buffer para transmitir y un buffer para recibir. Cuando un dato es movido a SBUF, este va al buffer para transmitir y es usado para la transmisin serial. Moviendo un dato al SBUF es como inicia la transmisin serial. Cuando un dato es movido desde el SBUF, viene del buffer de recepcin.

2.7

REGISTROS BSICOS DE LOS TIMER DEL AT89C52

El AT89C52 cuenta con tres registros timers (T0, T1 y T2), los cuales a su vez, estn compuestos de dos registros de 8 bits cada uno, los registros pares TH0, TL0, TH1, TL, TH2 y TL2 respectivamente.

Pgina 17

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

2.8

PROGRAM STATUS WORD (PSW)

El registro PSW (palabra de estado de programa) muestra en sus diferentes bits el estado en el que se encuentra el microcontrolador en cualquier momento. A continuacin se muestra dicho registro y la funcin de cada uno de sus bits (llamadas comnmente banderas).

CY

AC

F0

RS1

RS0

OV

--

Registro PSW (Palabra de estado del programa)

SMBOLO CY AC F0 RS1 RS0 OV -P

BIT
PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0

FUNCIN Bandera del Carry Bandera del Carry Auxiliar (operaciones en BCD) Bandera 0 disponible por el usuario Bit 1 del Selector del banco de registros Bit 0 del Selector del banco de registros Bandera de Overflow Bandera disponible por el usuario Bandera de paridad del acumulador (sta se afecta por hardware).

Este registro, reside en el espacio de los SFR. El registro contiene: el bit del Carry, el Bit de carry Auxiliar (para operaciones BCD), los dos bits de seleccin del banco de registros, la bandera de Overflow, el bit de paridad y dos banderas sin definir. El bit de Paridad refleja el nmero de 1s, en el acumulador, es decir: P = 1, si el acumulador contiene un nmero impar de 1s (paridad impar). P = 0, si el acumulador contiene un nmero par de 1s (paridad par). Si se desea programar modificar este registro, se deber utilizar la instruccin MOV PSW,#DATO donde DATO es la palabra de control en hexadecimal generada a partir de acomodar 1s y 0s en el registro PSW. Si es necesario modificar un solo bit de este registro, se utilizan las siguientes instrucciones: SETB PSW.x CLR PSW.x Donde: x = nmero de bit del registro PSW. PSW.x = 1 PSW.x = 0

La bandera de overflow (de desbordamiento) slo se activa cuando existe acarreo en el bit 6 o en el bit7 (nunca ambos a la vez) en la realizacin de operaciones aritmticas de:
Pgina 18

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

-SUSTRACCIN -MULTIPLICACIN.- Cuando el resultado sobrepasa la capacidad del acumulador (255). El carry siempre ser igual a cero. -DIVISIN.- Tanto el carry como el overflow siempre son igual a cero, slo el overflow es activado cuando el divisor es igual a cero.

2.9

REGISTRO DE CONTROL DE POTENCIA (PCON)

El registro PCON, a excepcin de la bandera SMOD, sirve para controlar, principalmente el consumo de energa el cual es utilizado slo por los dispositivos fabricados con la tecnologa CHMOS que permite disminuir dicho consumo de energa, en estados de espera. La bandera SMOD sirve para dividir la frecuencia de transmisin o de recepcin en el puerto serie, proporcionada ya sea, por la fase 2 de los estados, ( de la frecuencia del oscilador en la transmisin serie en modo 2), o bien, por el timer 1 en los modos 1 y 3.

SMOD

--

--

--

GF1

GF0

PD

IDL

Registro PCON (Registro de control de potencia).

SMBOLO
SMOD GF1 GF0 PD IDL

BIT
PCON.7 PCON.3 PCON.2 PCON.1 PCON.0

FUNCIN
Dobla el BAUD RATE para el puerto serie cuando se utiliza el timer para generar el BAUD RATE. Propsitos generales. Propsitos generales. Bajo consumo de energa. Bajo consumo de energa.

Si se desea programar este registro o modificarlo, se deber utilizar la instruccin MOV PCON,#DATO, donde DATO es la palabra de control en hexadecimal generada a partir de acomodar 1s y 0s en el registro PCON. Si especficamente un bit se desea modificar, deber usarse la instruccin siguiente: SETB PCON.x, en donde x es el nmero de bit del registro PCON (pone un 1 en el bit PCON.x); y CLR PCON.x (borra el bit PCON.x).

2.10

REGISTRO HABILITADOR DE INTERRUPCIONES (IE)

Pgina 19

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Las interrupciones son controladas mediante la escritura tanto en el registro IE (Interruption Enable) como en el registro IP (Interruption Priority): La desactivacin general de las interrupciones es efectuada mediante la escritura de un 0 lgico, en la bandera EA. Con la bandera EA = 1, el AT89C52 est en condiciones de aceptar interrupciones, aunque la verdadera aceptacin es realizada, cuando se escribe un 1 lgico, en la bandera de la interrupcin correspondiente del registro de interrupciones, IE.
EA -ET2 ES ET1 EX1 ET0 EXO

Registro IE (Registro habilitador de interrupciones).

SMBOLO
EA ET2 ES ET1 EX1 ET0 EX0 IE.7 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0

BIT

FUNCIN Desactiva todas las INTERRUPCIONES EA=0. Activa la interrupcin causada por el timer2 (ET2=1). Activa la interrupcin causada por el puerto serie. Activa la int. de sobreflujo causada por el timer1. Activa la int. causada externamente en INT 1. Activa la int. se sobreflujo causada por el timer 0. Activa la int. causada externamente en INT 0.

Si se desea programar una interrupcin o modificar este registro, se deber utilizar la instruccin MOV IE,#DATO la cual ya ha sido explicada con anterioridad en el PSW. Y de igual manera ste registro es modificable bit a bit.

Nota. Los bits de este registro as como los de todos los SFRs se les puede llamar tambin con el nombre especificado en sus tablas. Por ejemplo en este registro el bit 1 es nombrado ET0, se le podr programar si el smbolo anterior esta definido en el archivo 8051.DEF (que se estudiar ms adelante) o en el mismo programa.

2.11

REGISTRO DE PRIORIDAD (IP)

El AT89C52 tiene dos planos de prioridad para trabajar las interrupciones (figura 9), llamados alto y bajo, respectivamente. En la inicializacin, todas las interrupciones trabajan en el plano de baja prioridad. Para poder pasar del plano de baja prioridad al de alta, es necesario escribir un 1 lgico en las banderas correspondientes a las interrupciones que se desean aumentar de prioridad, ubicadas dentro del registro IP.

Pgina 20

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Fig. 9. Sistema de Interrupciones y Prioridades del AT89C52

--

--

PT2

PS

PT1

PX1

PT0

PX0

Registro IP (Registro de prioridad de interrupciones).

SMBOLO
PT2 PS PT1 PX1 PT0 PX0 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0

BIT

FUNCIN Timer 2 PT2=1 mayor prioridad. Define el nivel de prioridad de la int. puerto serie. Define el nivel de prioridad de la int. del timer 1. Define el nivel de prioridad de la int. 1 externa. Define el nivel de prioridad de la int. del timer 0. Define el nivel de prioridad de la int. 0 externa.

Si se desea programar alguna prioridad en la interrupciones o modificar este registro, ser posible con la instruccin MOV que tambin es posible modificarlo bit a bit.

2.12

TIMER/CONTADOR (T/C)

Pgina 21

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

El AT89C52 tiene 2 Timer/Contadores de 16 bits cada uno, llamados Timer 0 y Timer 1 respectivamente. Ambos pueden ser configurados para operar como temporizadores (timers) o bien, como contadores (counters). Cuando se trabaja como contador, el registro interno del contador, es incrementado cada vez que existe una transicin negativa (de 1 a 0) por el pin de entrada correspondiente a T0 o T1. En cambio, cuando funciona como temporizador (Timer), el registro es incrementado cada 12 perodos de oscilacin; es decir, su frecuencia de conteo es 1 / 12 de la frecuencia del oscilador (es decir que si se tiene un cristal de 12MHZ, el timer ser incrementado cada microsegundo). En el momento que los bits del registro del contador pasan de todos 1s a todos 0s, se activa la lnea de interrupcin interna correspondiente a TF0 o TF1, generndose, si ha sido programada, una interrupcin.

2.13

REGISTRO DE CONTROL DEL PUERTO TIMER/CONTADOR (TCON)

El registro de control del Timer/Contador, es tambin direccionable bit a bit, para activar o desactivar cada una de sus banderas.

TF1

TR1

TF0

TR0

IE1

IT1

IE0

ITO

Registro TCON (Registro de control del Timer/Contador).

SMBOLO TF1

BIT TCON.7

TR1 TF0

TCON.6 TCON.5

SMBOLO TR0
IE1

BIT TCON.4
TCON.3

IT1

TCON.2

IE0 IT0

TCON.1 TCON.0

FUNCIN Bandera de sobreflujo del registro del Timer 1. Activada por hardware cuando el registro T/C 1 incrementa su contenido pasando todos sus bits de 1s a 0s. Es limpiado por hardware cuando es atendida la interrupcin causada por sta bandera. Bit de control de activacin del timer 1. Habilitado/Deshabilitado por software para colocar el Timer/Contador en Encendido/Apagado. Bandera de sobreflujo del registro del Timer 0. Esta opera exactamente igual que la bandera TF1. FUNCIN Bit de control de activacin del Timer 0. Habilitado/Deshabilitado por software para colocar el Timer/Contador en Encendido/Apagado. Bandera de transicin de la interrupcin externa 1. Activada por hardware, cuando es detectada una transicin de 1 a 0 en el pin correspondiente a dicha interrupcin. Limpiada por hardware cuando la interrupcin es atendida (solamente se acciona, si dicha interrupcin es habilitada: IE.2=1). BIT de control de interrupcin 1. Activado y limpiado por software. Este BIT programa el tipo de transicin que activar la interrupcin externa 1. IT1=0 la interrupcin se activar al detectar un nivel bajo en el pin correspondiente; IT1=1 la interrupcin se activar al detectar un flanco de bajada. Bandera de transicin de la interrupcin externa 0. Opera exactamente igual que IE1, siendo IE.0. (Entindase por IE: registro de habilitacin de interrupciones). BIT de control de interrupcin 0. Aplica lo descrito para IT1, y se entiende que al mencionar IT1 ahora se habla de IT0.

Pgina 22

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Al igual que todos los registros de este tipo (SFR) ste puede ser modificado con la instruccin MOV o con las instrucciones SETB y CLR.

2.14

REGISTRO DE MODO DE CONTROL DEL TIMER/CONTADOR (TMOD)

Este registro permite especificar si se van a trabajar como temporizadores (times) o como Contadores (counters), los puertos denominados Timer 0 y Timer 1. Existen 4 modos de trabajo para estos puertos, los cuales son definidos por la escritura en los bits M1 y M0 de TMOD, el registro TMOD se muestra a continuacin.

GATE

C/T TIMER 1

M1

M0

GATE

C/T TIMER 0

M1

M0

Registro TMOD (Reg. del modo de control del T/C).

SMBOLO GATE

BIT TMOD.7

C/T

TMOD.6

M1 M0 GATE C/T

TMOD.5 TMOD.4 TMOD.3 TMOD.2 TMOD.1 TMOD.0

M0

FUNCIN Cuando GATE=1, no es suficiente activar TR1 (en TCON) para que el Timer/Counter 1 funcione, si no que es necesario que la lnea externa INT1 est en posicin alta (control por hardware). Cuando GATE=0, el funcionamiento del Timer/Counter 1 solamente depender de la activacin de TR1 (Control por software). Selector de funcin: Temporizador o Contador. C/T=0 activa la funcin de Temporizador (contabiliza pulsos del reloj del sistema interno).C/T=1 activa la funcin de Contador (contabiliza pulsos en la entrada externa T1). BIT selector del modo del Timer 1. BIT selector del modo del Timer 1. Aplica lo descrito para el GATE del TIMER 1 slo que ahora al hablar de TR1 e INT1, entindase que se trata de TR0 e INT0 respectivamente. Selector de funcin: Temporizador o Contador. Igual que para C/T en TIMER 1 slo cambiar T1 por T0. BIT selector del modo del Timer 0. BIT selector del modo del Timer 0.

La siguiente tabla muestra las diferentes combinaciones de los bits selectores de modo de los times y sus funciones.

M1 0

M0 0

MODO 0

ESPECIFICACIN Timer/Contador de 13 bits.

Pgina 23

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

0 1 1

1 0 1

1 2 3

Timer/Contador de 16 bits. Timer/Contador de 8 bits recargables. Timer 0, TL0 Timer/Contador de 8 bits, controlado por los bits de control del Timer 0, TH0 Timer de 8 bits controlado por los bits de control del timer1. El Timer 1 no se utiliza.

Modo 0. En este modo cualquiera de los 2 times, 0 y 1, se configuran como registros de 13 bits, que consisten en los 8 bits del registro de TH (TH1 o TH0) y los 5 bits menos significativos del registro TL (TL1 o TH1). Los 3 bits ms significativos de TL no son utilizados en este modo. Modo 1. Este modo es utilizado por cualquiera de los dos times, y los configura como Timer/Contador de 16 bits (TH y TL como contadores o times de 8 bits completan los 16 bits). Modo 2. Este modo tambin puede llegar a ser utilizado por los dos times, y los configura para un conteo de 8 bits (Tlx) con recarga automtica. Al ser sobrepasada la capacidad de TL, ste es recargado automticamente, con el contenido de TH y a su vez es activada la bandera de sobreflujo (TF). Modo 3. El Timer 1, en el modo 3 mantiene su cuenta, es decir, tiene el mismo efecto que cuando se establece la bandera TR1=0. El Timer 0, en ste modo, establece TL0 y TH0 como de contadores separados. TL0 utiliza los bits de control (C/T, GATE, TR0, INT0) del Timer 0. TH0 es bloqueado como temporizador Timer, el cual emplea las seales de control del Timer 1, TR1 y TF1. El Timer 1 puede ser activado o desactivado con slo salir o entrar al modo 3 respectivamente o puede permanecer siendo utilizado por el puerto serie cuando est generando la frecuencia de oscilacin Baud Rate, o en efecto en cualquier aplicacin que no se requiere una interrupcin. Como ya se ha visto anteriormente, este registro tambin es modificable por las instrucciones MOV, SETB y CLR.

2.15

CONTROL DEL PUERTO SERIE (SCON)

El puerto serie contenido en la familia del MCS-51, es un puerto FULL DUPLEX, lo cual significa que puede transmitir y recibir datos simultneamente. El receptor contiene un almacn Buffer, que le permite empezar a recibir un segundo dato sin necesidad de que el primero haya sido completamente ledo del registro Buffer. Sin embargo, si el primer byte permanece sin ser ledo hasta el final de la recepcin del segundo dato, ste se perder. El dato de la recepcin y la transmisin se encuentra en el registro SBUF del SFR (Registros de Funciones Especiales, anteriormente descrito). El puerto serie puede ser operado en 4 modos diferentes, que son especificados mediante la escritura en los bits SM0 y SM1 del Registro de Control del Puerto Serie SCON, que se describe a continuacin.
Pgina 24

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

Registro SCON. (Registro de Control del Puerto Serie).

SMBOLO SM0 SM1 SM2

BIT SCON.7 SCON.6 SCON.5

REN TB8 RB8 TI

SCON.4 SCON.3 SCON.2 SCON.1

RI

SCON.0

FUNCIN Especifica el modo de control del puerto serie. Especifica el modo de control del puerto serie. Habilita la comunicacin del tipo multiprocesador utilizado en los modos 2 y 3. En estos modos, si SM2=1, RI no es activado si el noveno dato recibido (RB8) es 0. En modo 1, RI no es activado si no se recibe un BIT de stop. En el modo 0, SM2 ser 0. Establece la recepcin serie, cuando REN=0 se desactiva la recepcin (por software). Almacena el 9no. BIT que ser transmitido en los modos 2 y 3. En modos 2 y 3, el 9no. BIT recibido es de datos. En el modo 1, si SM2=0, RB8 es el BIT de stop el que fue recibido. En el modo 0, RB8 no es usado. Bandera de interrupcin para transmitir. Se habilita por hardware al final del 8vo. BIT en el modo 0, al principio del BIT de stop en los otros modos. Debe ser deshabilitado por software. Bandera de interrupcin para recibir. Se habilita por hardware al final del 8vo. BIT en el modo 0, a la mitad del camino del BIT de stop en los otros modos (ver excepcin SM2). Debe ser deshabilitado por software.

Para poder seleccionar el modo en este registro, se encuentran los bits 6 y 7 (SM1 y SM0 respectivamente) y la configuracin y descripcin es como sigue:

SM0 0 0 1 1

SM1 0 1 0 1

Modo 0 1 2 3

Descripcin Shift Register 8 BIT UART* 9 BIT UART 9 BIT UART

Baud Rate FOSC /12 Variable FOSC /64 F OSC/32 Variable

*UART: Universal Asincronic Receive-Transmit.

2.16

UTILIZACIN DEL TIMER 1 COMO GENERADOR DEL BAUD RATE PARA LA TRANSMISIN SERIE

El Timer 1 es usado para generar la frecuencia de Transmisin/Recepcin de datos en serie, cuando el puerto es programado para trabajar en el modo 1 3. La frecuencia de transmisin es obtenida a partir del valor almacenado en TH1 y el valor de SMOD mediante la ecuacin siguiente:

Pgina 25

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

2SMOD FREC. DEL OSCILADOR BAUD RATE = x 32 12 x [ 256 - (TH1) ]

O en su defecto si ya se desea una velocidad en particular, con un cristal determinado la formula anterior queda: Baud Rate TH1 = 256 (32)(12) 2SMOD (Frecuencia del Oscilador) El valor 2SMOD / 32, es debido a los circuitos divisores de frecuencia que se encuentran en la etapa de control del Puerto Serie, los cuales dividen entre 16 o 32 dependiendo del BIT 7 (SMOD) del registro de control PCON y la frecuencia que nos proporciona la salida del Timer 1 (overflow). El valor 12 que divide a la frecuencia del oscilador proviene del divisor, que se encuentra en la etapa de control del Timer 1, cuando ste es utilizado como temporizador. Cabe recalcar en este momento, que el valor que se almacena en TH1 es el valor negativo de la cuenta que se desea, debido a que, el contador se incrementa cada vez que un pulso es detectado, de ah, que en la ecuacin se representa como 256 - (TH1). La interrupcin del Timer 1 en este caso no tendra mucha aplicacin por lo que se podra deshabilitar. El Timer 1 acta en modo 2, es decir, en modo recargable, el valor de conteo se encuentra fijo en el registro TH1, el cual se recarga cada vez que existe un overflow. En la tabla 6 se muestran los valores de TH1, para generar el Baud Rate, tomado en cuenta la frecuencia del oscilador o cristal.

BAUD RATE
19.2 KHz 9.6 KHz 4.8 KHz 2.4 KHz 1.2 KHz 137.5 Hz 110 Hz

F osc
11.059 MHz 11.059 MHz 11.059 MHz 11.059 MHz 11.059 MHz 11.986 MHz 6.000 MHz

SMOD C/T
1 0 0 0 0 0 0 0 0 0 0 0 0 0

TIMER 1 MODO
2 2 2 2 2 2 2

VALOR DE TH1
FDH FDH FAH F4H E8H 1DH 72H

Tabla 6. Valores para generar el Baud rate

Pgina 26

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

CAPITULO 3

INSTRUCCINES DEL C AT89C52

3.1

CICLO DE INSTRUCCIN

La ejecucin de un ciclo de instruccin comienza en el estado 1 del ciclo mquina, el cual tiene doce estados, cuando el cdigo de operacin es almacenado en el registro de instruccin. Como norma general, una instruccin requiere de uno o ms ciclos mquina, en funcin de:

a) El Cdigo de operacin.

Por ejemplo la instruccin INC A tiene 1 byte de instruccin y requiere un ciclo mquina, la instruccin INC DPTR tambin de 1 byte requiere de dos ciclos mquina y la instruccin MUL AB requiere cuatro ciclos mquina para su total ejecucin y ocupa 1 byte de memoria.

b) El nmero de bytes.

Por ejemplo la instruccin MOV A,#dato tiene 2 bytes de instruccin y requiere de un ciclo mquina. En cambio la instruccin MOV directo, #dato al constar de 3 bytes necesita de dos ciclos mquina. Esto no ocurre siempre, o sea a mas bytes mas ciclos mquina. Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento del nmero de bytes y ciclo de instruccin se han editado tablas con el set completo de instrucciones. Cada ciclo mquina se producen dos accesos a la memoria, el primero al comienzo del 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.

Pgina 27

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

3.2

SET DE INSTRUCCINES

El set o conjunto de instrucciones de la familia MCS-51 se puede dividir segn las siguientes especialidades o dedicacin de las instrucciones segn su operacin.

TIPOS DE OPERACIONES OPERACIONES ARITMTICAS OPERACIONES LGICAS TRANSFERENCIA DE DATOS SALTO O CONTROL DEL PROGRAMA

No. MNEMNICOS 5 10 7 13 11

MANIPULACIN A BIT O LGEBRA BOOLEANA

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 de control de procesos, en este campo las operaciones estn orientadas muy a menudo a 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 esta orientada a BIT. Esta particularidad, as como su inmunidad al ruido elctrico, lo hacen valioso en el mundo de control de procesos industriales.

3.3

CONJUNTO DE INSTRUCCINES DE LA FAMILIA MCS-51

A continuacin se presenta una tabla (Tabla 7) en la cual se describen todos los conjuntos de instrucciones que conforman a la familia de MCS-51, as como sus periodos de oscilacin, los bytes que ocupa cada instruccin y una breve descripcin de cada una de las instrucciones.

Pgina 28

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Instrucciones que afectan a los <<flags>>: FLAR OV AC X X X X X X X X

Instruccin ADD ADDC SUBB MUL DIV DA RRC RLC SETB C CLR C CPL C ANL C, bit ANL C./bit ORL C, bit ORL C,/bit MOV C, bit CJNE

C X X X 0 0 X X X 1 0 X X X X X X X

Notas sobre el significado de los operandos de las instrucciones que se describen a continuacin: Rn..................Registros R0-R7 del banco de registros seleccionado. Direct...........Direccion del dato de 8 bits de la memoria interna. Puede ser un dato de la RAM interna (0- 127 para el 8051 o 0-255 para el 8052) o un registro del SFR (por ejemplo, Puerto de E/S, registro de control, registro de estado (128-255). @Ri ..............Se refiere a los registros R0 y Rl, que permiten el direccionamiento indirecto para acceder a los datos de 8 bits de la RAM interna (80-FFH) solapada con el SFR para el 8052 y (00-7FH) para el 8052/8051.

# data .............Operando constante de 8 bits

#datal6 ........ Operando constante de 16 bits. Addr 16 ........ Direccin destino de 16 bits. Utilizada por las instrucciones de salto LCALL y LJMP para permitir el salto dentro del espacio de 64Kbytes de la memoria de programas.

Pgina 29

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Addr 11........... Direccin destino de 11 bits. Utilizada por las instrucciones de salto ACALL y AJMP para permitir el salto dentro de la pagina de 2Kbytes de la memoria de programas a partir del primer byte de la siguiente instruccin. rel ..................Salto relativo en formato de 8 bits en complemento a 2. Utilizado por la instruccin SJMP y todos los saltos condicionales. El rango del salto (8 bits) esta comprendido entre -128 a +127 bytes a partir del primer byte de la siguiente instruccin. BIT....................Direccionamiento directo BIT a BIT dentro del rea de la memoria RAM interna y de los registros SFR que permiten el direccionamiento por BIT. rrr...................En la columna de codificacin indica el registro implicado en la instruccin (Rn), segn la siguiente tabla: r r r registro

0 0 0 R0 0 1 1 R1 0 1 0 R2 ================== 1 1 1 R7 i.......................en la columna de codificacin indica el registro implicado en la instruccin de direccionamiento indirecto (@Ri), segn se muestra en la siguiente tabla: i 0 1 registro @R0 @R1

MNEMNICO

DESCRIPCIN

BYTE

PERIODOS DE OSCILACIN

INSTRUCCINES ARITMTICAS
ADD ADD ADD ADD ADDC ADDC ADDC A,Rn A,direct A, @Ri A, #data A,Rn A,direct A, @Ri Suma registro a Acumulador Suma un byte directo a Acumulador Suma indirectamente un registro de RAM a Acumulador Suma dato inmediato a Acumulador Suma registro a Acumulador con carry Suma un byte directo a Acumulador con carry Suma indirectamente un registro de RAM a Acumulador con carry 1 2 1 2 1 2 1 12 12 12 12 12 12 12

Pgina 30

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

MNEMNICO
ADDC A, #data SUBB A,Rn SUBB A,direct SUBB A, @Ri SUBB INC INC INC INC DEC DEC DEC DEC INC MUL DIV DA A, #data A Rn direct @Ri A Rn direct @Ri DPTR AB AB A

DESCRIPCIN
Suma dato inmediato a Acumulador con carry Substrae Registro de ACC con prstamo Substrae un byte directo de ACC con prstamo Substrae indirectamente un registro de RAM de ACC con prstamo Substrae un dato inmediato de ACC con prstamo Incrementa Acumulador Incrementa Registro Incrementa directamente un byte Incrementa indirecto un byte en RAM Decrementa Acumulador Decrementa Registro Decrementa directamente un byte Decrementa indirecto un byte en RAM Incrementa Data Pointer Multiplica A y B Divide A y B Ajuste decimal del Acumulador

BYTE
2 1 2 1 2 1 1 2 1 1 1 2 1 1 1 1 1

PERIODOS DE OSCILACIN 12 12 12 12
12 12 12 12 12 12 12 12 12 24 48 48 12

INSTRUCCINES LGICAS
ANL A,Rn ANL A,direct ANL A, @Ri ANL A, #data ANL direct,A ANL direct, #data ORL A,Rn ORL A,direct ORL A, @Ri ORL A, #data ORL direct,A ORL direct, #data XRL A,Rn XRL A,direct XRL A, @Ri XRL A, #data XRL direct,A XRL direct, #data CLR A CPL A RL A RLC A RR A RRC A SWAP A AND Registro a Acumulador AND Byte directo a Acumulador AND indirecto un byte en RAM a Acumulador AND Dato inmediato a Acumulador AND Acumulador a un byte directo AND dato inmediato a byte directo OR Registro a Acumulador OR Byte directo a Acumulador OR indirecto un byte en RAM a Acumulador OR Dato inmediato a Acumulador OR Acumulador a un byte directo OR dato inmediato a byte directo OR-Exclusiva Registro a Acumulador OR-Exclusiva Byte directo a Acumulador OR-Exclusiva indirecto un byte en RAM a Acumulad. OR-Exclusiva Dato inmediato a Acumulador OR-Exclusiva Acumulador a un byte directo OR-Exclusiva dato inmediato a byte directo Limpia Acumulador Complementa Acumulador Rota Acumulador a la izquierda Rota Acumulador a la izquierda a travs del carry Rota Acumulador a la derecha Rota Acumulador a la derecha a travs del carry Intercambio de nibbles dentro del ACC 1 2 1 2 2 3 1 2 1 2 2 3 1 2 1 2 2 3 1 1 1 1 1 1 1 12 12 12 12 12 24 12 12 12 12 12 24 12 12 12 12 12 24 12 12 12 12 12 12 12

INSTRUCCINES DE TRANSFERENCIA DE DATOS


MOV MOV MOV A,Rn A,direct A, @Ri Mueve registro a Acumulador Mueve byte directo a Acumulador Mueve indirecto un byte en RAM a Acumulador 1 2 1 12 12 12

Pgina 31

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

MNEMNICO
MOV Rn,A MOV Rn,direct MOV Rn, #data MOV direct,A MOV direct,Rn MOV direct,direc MOV direct, @Ri MOV direc,#data MOV @Ri,A MOV @Ri,direct MOV @Ri,#data MOV DPTR, #data16 MOVC A, @A+DPTR MOVC A, @A+PC MOVX A@Ri

DESCRIPCIN
Mueve Acumulador a registro Mueve byte directo a registro Mueve dato inmediato a registro Mueve Acumulador a byte directo Mueve registro a byte directo Mueve byte directo a byte directo Mueve indirecto Byte en RAM a byte directo Mueve dato inmediato a byte directo Mueve Acumulador a byte indirectamente en RAM Mueve byte directo a byte indirectamente en RAM Mueve dato inmediato a byte indirectamente en RAM Carga el Data Pointer con una constante de 16 bits Mueve Cdigo relativo byte a DPTR a Acumulador Mueve Cdigo relativo byte a PC a Acumulador Mueve de RAM externa (direccin de 8 bits) a Acumulador Mueve de RAM externa (direccin de 16 bits) a Acumulador Mueve Acumulador a RAM externa (direccin de 8 bits) Mueve Acumulador a RAM externa (direccin de 16 bits) Empuja byte directo al stack Suelta byte directo del stack Intercambia registro con Acumulador Intercambia byte directo con Acumulador Intercambia indirecto RAM con ACC Intercambia dgito de bajo orden indirecto RAM con Acumulador

BYTE
1 2 2 2 2 3 2 3 1 2 2 3 1 1 1

PERIODOS DE OSCILACIN 12 24 12 12 24 24 24 24 12 24 12 24 24 24 24

MOVX A@DPTR MOVX A, @Ri,A MOVX @DPTR,A PUSH POP XCH XCH XCH XCHD direct direct A,Rn A,direct A, @Ri A, @Ri

1 1 1 2 2 1 2 1 1

24 24 24 24 24 12 12 12 12

MANIPULACIN DE VARIABLES BOOLEANAS Nota. La palabra carry se refiere al BIT de acarreo del SFR PSW.7
CLR CLR SETB SETB CPL CPL ANL ANL ORL ORL MOV MOV JC JNC JB JNB JBC C BIT C BIT C BIT C,bit C,/BIT C,bit C,/BIT C,bit bit,C rel rel rel rel bit,rel Limpia el carry (PSW.7) Limpia BIT directo Pone un uno en el carry Pone un uno en el BIT directo Complementa el carry Complementa BIT directo AND BIT directo y el carry AND complemento de BIT directo y carry OR bit directo y carry OR complemento de BIT directo y carry Mueve BIT directo al carry Mueve carry a bit directo Salta si el carry es uno Salta si el carry no es uno Salta si el BIT directo es uno Salta si el BIT directo no es uno Salta si el BIT directo es uno y limpia el BIT 1 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 3 12 12 12 12 12 12 24 24 24 24 12 24 24 24 24 24 24

Pgina 32

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

RAMIFICANDO EL PROGRAMA MNEMNICO


LCALL addr16 RET RETI AJMP addr11 LJMP addr16 SJMP rel JMP @A+DPTR JZ rel JNZ rel CJNE A,direct,rel CJNE A, #data,rel

DESCRIPCIN
Larga llamada a subrutina Retorno de subrutina Retorno de interrupcin Salto absoluto Salto largo Salto corto (direccin relativa) Salto relativo indirecto a el DPTR Salta si el Acumulador es cero Salta si el Acumulador no es cero Compara byte directo con ACC y salta si no es igual Compara dato inmediato con ACC y salta si no es igual Compara dato inmediato con registro y salta si no es igual Compara dato inmediato con byte indirecto y salta si no es igual Decrementa registro y salta si no es cero Decrementa byte directo y salta si no es cero No operacin

BYTE
3 1 1 2 3 2 1 2 2 3 3

PERIODOS DE OSCILACIN 24 24 24 24 24 24 24 24 24 24 24

CJNE Rn, #data,rel CJNE @Ri, #data,rel DJNZ DJNZ NOP Rn,rel direct,rel

3 3 2 3 1

24 24 24 24 12

Tabla 7. Conjunto de instrucciones del C AT89C52.

3.4

DESCRIPCIN DE LAS INSTRUCCINES DEL AT89C52

En las siguientes pginas se estudiarn las instrucciones, su significado y sus acepciones de uso en un programa segn lo requiere el intrprete de instrucciones llamado ensamblador. El formato que se presenta deber ser respetado rigurosamente al escribir el programa fuente, y significa segn se indica. (PC) Ejemplo: (PC) (SP) (PC) =

(PC) + 2 (PC) + 2 (SP) +1

donde:

contenido del PC

Al ejecutarse la instruccin que tenga los dos renglones anteriores el PC se habr incrementado en 2 y el SP en 1, lo que indica que una direccin o un dato habrn sido guardados en la pila. Significa que despus de realizada la instruccin el PC de tener un valor cualquiera se encuentra en ese valor ms dos localidades de memoria ms, si existieran ms instrucciones
Pgina 33

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

con este formato en orden, sera lo que al ejecutarse la instruccin se modificara dentro del microcontrolador. Para interpretar correctamente la presencia de parntesis tomar en cuenta que: (R0) significa que se est trabajando, directamente, con el contenido de R0 y ((R0)) significa que el valor de R0 es la direccin de memoria en la cual est contenido el dato con el que se est trabajando.

esto es: (A)

(R0)

Si R0=#03BH el valor del acumulador despus de esta operacin ser de 03BH en cambio, si la operacin es: (A)

((R0))

al final de sta, el contenido del acumulador ser el dato que se encuentra en la direccin de memoria 03BH La palabra Directo se refiere a la direccin en hexadecimal segn el mapa de memoria del microcontrolador. Ejemplo: MOV 20H,90H 20H y 90H son direcciones directas de la memoria interna del microcontrolador. La palabra Relativa es una direccin normalmente mostrada con una etiqueta. Ejemplo: CJNE A,#20H,ENCENDIDO La palabra ENCENDIDO es una direccin relativa y se les llama etiqueta.

DESCRIPCIN DE LAS INSTRUCCIONES

ACALL.- (Llamada) Llama incondicionalmente a una subrutina localizada en la direccin indicada. Durante esta instruccin se realizan los siguientes eventos: El contenido del PC se incrementa dos veces y apunta la direccin de la siguiente instruccin; el stack Pointer se incrementa una vez, introduciendo el byte bajo del PC; incrementa nuevamente el SP para introducir el byte alto del PC; por ltimo, el PC es cargado con el contenido de la DIRECCIN DESTINO. La ejecucin de las instrucciones de la subrutina comienza en esta direccin, hasta que encuentre la instruccin RET, la cual restablece el PC que haba sido almacenado en el SP, continuando nuevamente con el programa inicial. ACALL (PC) (SP) ((SP)) (SP)

(PC) + 2 (SP) +1 (PC 7-0) (SP) + 1


Pgina 34

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

((SP)) Ejemplo: ACALL MOV

(PC15-8)

TIME A,R1

Esta instruccin solicita la ejecucin de la subrutina llamada TIME, para lo cual los requisitos son: 1) Que exista la etiqueta que indica el principio de la subrutina, y 2) Una instruccin que nos indique el final de la subrutina y por lo tanto el regreso a la ejecucin normal del programa (instruccin RET). As pues, al encontrarse con el ACALL el micro acudir a ejecutar la siguiente subrutina: TIME MOV DJNZ RET R1,#0FFH R1,$

Despus de haber ejecutado las dos instrucciones que componen la subrutina TIME, y al encontrarse con la instruccin RET, el micro regresa a ejecutar el programa en donde se qued, lo cual quiere decir que ejecutar la instruccin MOV A,R1 y las siguientes hasta encontrar otra desviacin. ADD.- (Suma) Esta instruccin suma el contenido del acumulador de acuerdo al modo de direccionamiento y deja el resultado en el acumulador, afectando las banderas de carry y carry auxiliar, as como la de sobreflujo. Sus modos de direccionamiento son el directo, indirecto, inmediato y de registro indirecto (A) (A) (A) (A)

ADD A, R0 ADD A, directo ADD A, @Ri ADD A, #dato Ejemplos: MOV A,#05H MOV R0,#05H ADD A,R0

(A) + (Rn) (A) + (directo) (A) + ((Ri)) (A) + #dato

Despus de la instruccin ADD el contenido del acumulador ser 0AH, esto es, el resultado de la suma del contenido, el registro R0 ms el contenido del acumulador. MOV 20H,#05H MOV A,#05H ADD A,20H Despus de la ltima instruccin, el contenido del acumulador ser de 0AH, esto es, el resultado de sumar el contenido del acumulador ms el contendido de la direccin 20H.

Pgina 35

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

MOV 3BH,#05H MOV R1,#3BH MOV A,#05H ADD A,@R1 Despus de la ltima instruccin el contenido del acumulador ser 0AH, esto es, el resultado de sumar el contenido de la direccin 3BH ms el contenido del acumulador. MOV A,#05H ADD A,#05H Despus de la ltima instruccin, el contenido del acumulador ser el resultado de la suma directa del contenido del acumulador y el nmero 05H, esto es, 0AH.

ADDC.- (Suma + carry) Esta instruccin es similar a la anterior, con la diferencia de que en la suma se incluye el valor del carry, y de la misma manera puede direccionarse de los cuatro modos anteriores: ADDC A, R0 ADDC A, directo ADDC A, @Ri ADDC A, #dato (A) (A) (A) (A)

(A) + (C) + (Rn) (A) + (C) + (directo) (A) + (C) + ((Ri)) (A) + (C) + #dato

AJMP.- (Salto absoluto) Esta instruccin transfiere la ejecucin del programa incondicionalmente hacia donde el dato lo indique, utilizando nicamente 5 bits para la codificacin de la instruccin y los otros 3 que sobran del BIT para la pgina a saltar, ya que el salto mximo por esta instruccin es dentro de una pgina de 2K. A10, A9, A8,0 0001 AJMP addr11 Ejemplo: MOV MOV AJMP DIV ADD END A,#0FH R1,#0AH FULL A,#03H A,R1 A7,A6,A5,A4,A3,A2,A1,A0 (PC) (PC) + 2

FULL

Al encontrarse con la instruccin AJMP salta incondicionalmente a ejecutar la instruccin precedida por la etiqueta FULL (la suma del acumulador y el registro 1), sin ejecutar la instruccin que, en orden sucesivo, sera la siguiente (divisin del acumulador entre el valor #03H).. ANL.- (And lgico) Esta es la instruccin lgica AND entre las variables indicadas, no afecta ninguna bandera y puede usar direccionamiento directo, indirecto, de registro o inmediato:
Pgina 36

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

ANL A, Rn ANL A, directo ANL A, @Ri ANL A, #dato ANL directo, A ANL directo, #dato Ejemplos: MOV A,#06H MOV R1,#04H ANL A,R1

(A) (A) (A) (A) (directo) (directo)

(A) ^ (Rn) (A) ^ (directo) (A) ^ ((Ri)) (A) ^ #dato (directo) ^ (A) (directo) ^ #dato

Al final de este segmento de programa, el contenido del acumulador ser = 02H, que es el resultado de la operacin AND entre el acumulador y el registro R1. MOV A,#06H MOV 020H,#04H ANL A,020H Despus de la ltima instruccin el contenido del acumulador ser 04H, que es el resultado de la operacin AND entre el acumulador y el contenido de la direccin 020H. MOV A,#06H MOV 03BH,#04H MOV R1,#03BH ANL A,@R1 Despus de haber ejecutado esta ltima instruccin el contenido del acumulador ser 04H, que es el resultado de la operacin AND entre el acumulador y el valor contenido en la direccin de memoria 03BH. ANL C.- (And lgico con carry) La misma instruccin que la anterior pero slo con el carry del acumulador, si en el ensamblaje se pone un / entonces el operando se negar slo para la operacin sin ser afectado realmente, es decir slo en la operacin lgica se ver negado; el resultado de esta operacin aparecer en el mismo BIT de carry despus de realizada la operacin: ANL C,bit ANL C,/bit Ejemplos: SETB F0 SETB PSW.7 ANL C,F0 ANL C,/F0 (C) (C) ^ (bit) (C) (C) ^ (-bit)

;Flag del usuario ;PSW.7 = direccin del carry del acumulador

Pgina 37

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Despus de la primera instruccin ANL el estado del carry ser 1, pero despus de la segunda ser 0. CJNE.- (Comparacin) Esta instruccin se encarga de hacer comparaciones con un byte completo y transfiere el control en caso de no ser igual a la referencia dada. Esta instruccin trabaja con cuatro combinaciones de direccionamiento, el acumulador puede ser comparado con cualquier byte directamente o con cualquier dato inmediatamente y cualquier direccin de RAM indirectamente o un registro puede ser comparado con una constante inmediata:

CJNE A, directo, relativa CJNE A, #dato, relativa CJNE Rn, #dato, relativa CJNE @Ri, #dato, relativa

(A) <> (directo) (A) <> #dato (A) <> #dato ((Ri)) <> #dato falso verdadero

(PC) (PC) + 3 (PC) (PC) + desplazamiento relativo Ejemplos:

Cualquiera de los siguientes fragmentos de programa mandar a ejecutar la instruccin precedida por la etiqueta FIN, sin ejecutar la instruccin de suma. MOV MOV CJNE ADD MOV END MOV CJNE ADD MOV END MOV CJNE ADD MOV END MOV MOV MOV CJNE A,#05H 03BH,#04H A,03BH,FIN A,03BH A,03BH

FIN

FIN

A,#05H A,#04H,FIN A,#04H A,#04H

FIN

R1,#05H R1,#04H,FIN A,R1 A,R1

R1,#03BH 03BH,#05H A,#04H A,@R1,FIN

Pgina 38

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

El siguiente fragmento de programa ejecutar las dos ltimas instrucciones del programa, y es aplicable a cualquiera de los cuatro tipos de direccionamiento: MOV A,#05H CJNE A,#05H,FIN ADD A,R1 FIN MOV A,R1 END COLOCAR AQU LAS CONSIDERACIONES DE SI ES MAYOR O MENOR CUANDO NO ES IGUAL EN CUANTO AL CARRY CLR A.- (borra A) Esta instruccin se encarga de limpiar el acumulador y poner ceros a todos sus bits, ejemplo: CLR A (A) 0

CLR bit.- (Borra el BIT) Limpia el BIT al igual que la instruccin anterior pero con la particularidad de actuar individualmente en las zonas de memoria direccionables BIT a BIT. CLR C CLR bit (C) 0 (bit) 0

CPL A.- (Complementa A) Cada BIT del acumulador esta lgicamente complementado (complemento a unos). Los bits que previamente contienen un 1 son cambiados a 0 y viceversa. Las banderas no son afectadas: CPL A (A)
(-A)

Ejemplo: MOV A,#06H CPL A END Al finalizar la ejecucin de este fragmento de programa el contenido del acumulador ser 0F9H, que es el complemento de 06H.

CPL BIT.- (Complementa el BIT) Al igual que la anterior complementa pero nicamente el BIT indicado, slo acta en la zona direccionable por BIT, ejemplo: (C) (-C) (bit) (-bit)

CPL C CPL bit

DA.- (Ajusta decimal) Se encarga de hacer ajustes de hexadecimal a BCD mediante sumas de 00H, 06H, 60H, o 66H de acuerdo al caso; es decir, divide el byte en 2 nibbles y si alguno es
Pgina 39

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

mayor de 9 (1010-1111) le agrega 6 para obtener el nmero de unidades en este dgito hexadecimal, ejemplo: DA A si [ (A3-A0) > 9 ] V [ (AC) =1 ] A3-A0) (A3-A0) + 6 Y si [ (A7-A4) (A7-A4) + 6 ]

DEC.- (Drecrementa) Decremento, esta instruccin puede utilizar cuatro tipos de direccionamiento, el de acumulador, registro, directo o registro indirecto, ejemplo: DEC A DEC Rn DEC directo DEC @Ri (A) (Rn) (directo) ((Ri))

(A) - 1 (Rn) - 1 (directo) - 1 ((Ri)) - 1

DIV AB.- (Divisin) Divide los bytes interpretndolos como enteros sin signo, siendo el dividendo el A y el divisor B, dejando el cociente en A y el residuo en B, la bandera de sobreflujo se limpia mediante esta instruccin, esta operacin esta restringida a que B 0: DIV AB Ejemplo: MOV A,#010H MOV B,#03H DIV AB END El contenido del acumulador y del registro auxiliar B, despus de este fragmento de programa es: A=5 y B=1

DJNZ.-(Decremento y comparacin) Decrementa el byte indicado y brinca, en caso de que ste no sea igual a cero, a la instruccin precedida por la etiqueta indicada en la instruccin. No afecta ninguna bandera, la ramificacin puede especificarse por un registro o por direccionamiento de byte directo: (PC) (Rn) DJNZ directo, relativa (PC) Directo si es verdadero (PC) DJNZ Rn, relativa

(PC) + 2 (Rn) - 1 (PC) + 2 directo - 1

(PC) + relativa

En los siguientes ejemplos se omitir la ejecucin de la instruccin que complementa el acumulador y en cambio se transferir el valor de R1 al acumulador:
Pgina 40

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

FIN

MOV DJNZ CPL MOV END MOV MOV DJNZ CPL MOV END

R1,#03H R1,FIN A A,R1

FIN

03BH,#03H R1,#02H 03BH,FIN A A,R1

INC.- (Incremento) Encargada de incrementar el valor del byte, no afecta banderas, direcciona mediante forma de registro directo o registro indirecto: INC A INC Rn INC directo INC @Ri (A) (Rn) (directo) ((Ri))

(A) + 1 (Rn) + 1 (directo) + 1 ((Ri)) + 1

INC DPTR.- (Incrementa el DPTR) Funcin similar a la anterior pero para uso exclusivo del puntero de datos (Data PoinTeR): INC DPTR (DPTR)
(DPTR) + 1

JB.- (Salto) Si el BIT indicado es 1 salta a la direccin indicada sumndola al PC: JB BIT, relativa (PC) (PC) + 3 (PC) (PC) + relativa FALSO VERDADERO

En el siguiente ejemplo se omite la instruccin que incrementa el acumulador y brinca a la etiqueta FIN en la cual le transfiere un valor numrico, cabe sealar que si en lugar de la instruccin SETB F0 se colocara una instruccin CLR F0, se ejecutaran ambas instrucciones antes de llegar al final del programa: SETB JB INC MOV END F0 F0,FIN A A,#02H

FIN

JC.- (Salto) Saltar si el carry est en 1, de otro modo contina su curso normal: JC relativa (PC) (PC) + 2 (PC) (PC) + relativa
Pgina 41

FALSO VERDADERO

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

En el siguiente ejemplo la ejecucin del programa brinca a la etiqueta FIN, al encontrar que el carry est en 1, eludiendo as la instruccin que transfiere el nmero #03H al acumulador; y quedando un valor de #0FH en ste, al final del programa: MOV ADD JC MOV ADD END A,#0FFH A,#01H FIN A,#03H A,#0FH

FIN

JMP @A + DPTR.- (Salto incondicional) Suma los ocho bits no asignados contenidos en el acumulador con los 16 bits del apuntador de datos y carga la suma resultante al contador del programa. Esta ser la nueva direccin para las siguientes bsquedas de las instrucciones: JMP @A + DPTR Ejemplo: DIRECCIN 010H DIRECCIN 012H DIRECCIN 014H MOV DPTR,#20H MOV A,#05H JMP @A+DPTR . . . MOV A,#0FFH END (PC) (A) + (DPTR)

DIRECCIN 025H

JNB.- (Salto) Si el bit indicado es cero, salta a la direccin suma del byte indicando ms el PC, de otra manera, sigue su curso normal: JNB bit, relativa (PC) (PC) + 3 (PC) (PC) + relativa FALSO VERDADERO

En el siguiente ejemplo se ejecutarn las dos ltimas instrucciones antes de llegar al final debido a que el resultado de la operacin JNB resulta falso, es importante tomar en cuenta que al utilizar CLR F0 en lugar de SETB F0 se llevar a cabo el brinco a FIN omitiendo la instruccin que incrementa el acumulador. SETB JNB INC MOV END F0 F0,FIN A A,#02H

FIN

Pgina 42

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

JNC.- (Salto) Si el bit de carry es un cero, salta a la direccin formada por la suma algebraica del PC incrementado y del byte de desplazamiento relativo; de otra manera procede con la siguiente instruccin. La bandera de carry no es modificada (ver ejemplo de JC). JNC relativa (PC) (PC) + 2 (PC) (PC) + relativa FALSO VERDADERO

JNZ relativa.- (Salto) Si cualquier bit del acumulador es un 1, salta a la direccin formada por la suma algebraica del PC incrementado y del byte de desplazamiento relativo, REL; de otra manera procede con la siguiente instruccin. La bandera de carry no es modificada. JNZ relativa (PC) (PC) + 2 (PC) (PC) + relativa FALSO VERDADERO

En el siguiente ejemplo al ejecutar la segunda instruccin brincar a la instruccin precedida por la etiqueta FIN omitiendo la suma de A y #02H. MOV A,#04H JNZ FIN ADD A,#02H NOP END

FIN

JZ relativa.- (Salto) Salta si el acumulador tiene todos sus bits en cero, el acumulador no se modifica y las banderas no son afectadas. JZ relativa (PC) (PC) + 2 (PC) (PC) + relativa FALSO VERDADERO

En el siguiente ejemplo se forzara un salto a la etiqueta FIN: MOV A,#0H JZ FIN MOV R0#04H NOP END

FIN

LCALL addr16.- (Llamada) Llama a una subrutina mediante el uso de 2 bytes. La instruccin suma 3 al PC para que apunte a la direccin de la siguiente instruccin, luego incrementa el SP introduciendo el byte bajo del PC e incrementa nuevamente el SP para introducir el byte alto del PC. El PC se carga con el segundo y tercer byte de la instruccin LCALL. La ejecucin de las instrucciones de la subrutina comienza en esta direccin, hasta encontrar la instruccin RET, la cual restablece el PC que haba sido almacenado en el SP, continuando nuevamente con el programa inicial. Las banderas no son afectadas.

Pgina 43

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

LCALL addr (15-8) addr (7-0)

(PC) (SP) ((SP)) (SP) ((SP)) (PC)

(PC) + 3 (SP) + 1 (PC 7-0) (SP) + 1 (PC 15-8) (addr 15-0)

Ejemplo: En este ejemplo se supone que la subrutina TIME se encuentra en localidades altas de memoria, con esto se justifica el uso de la instruccin LCALL, se observa que el procedimiento es exactamente el mismo que con las instrucciones ACALL Y SCALL. As al encontrarse con la instruccin LCALL ejecutar la subrutina TIME y regresar al flujo normal para dar por terminado el programa (END). LCALL TIME END MOV DJNZ RET R1,#0FFH R1,$

TIME

LJMP addr16.- (Salto) Ramificacin incondicional del programa mediante dos bytes. El PC se carga con los dos ltimos bytes de la instruccin y salta para continuar con la ejecucin del programa a partir de esa direccin. Las banderas no son afectadas. LJMP addr (15-8) addr (7-0) Ejemplo: Al igual que la instruccin anterior, es importante tener en cuenta que si el salto se realiza a localidades de memoria altas, es necesario el empleo de esta instruccin, por lo dems, el uso de sta es el mismo que con las instrucciones SJMP y AJMP. LJMP FIN MOV R1,#09H NOP END (PC) addr (15-0)

FIN

MOV.- (Mover) Esta instruccin permite la modificacin de un registro o direccin mediante los modos de direccionamiento usados pudiendo ser inmediato, directo, indirecto, de registro ndice y de registro. 1 2 3 4 MOV A, #dato MOV A, Rn MOV A,directo MOV A,@Ri (A) (A) (A) (A)

#dato (Rn) (directo) ((Ri))

Comment [DdCA1]:

Pgina 44

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

5 6 7 8 9 10 11 12 13 14 15

MOV Rn,A MOV Rn,directo MOV Rn, #dato MOV directo,A MOV directo,Rn MOV directo,directo MOV directo, @Ri MOV directo, #dato MOV @Ri,A MOV @Ri,directo MOV @Ri, #dato

(Rn) (Rn) (Rn) (directo) (directo) (directo) (directo) (directo) ((Ri)) ((Ri)) ((Ri))

(A) directo #dato (A) (Rn) (directo) ((Ri)) #dato (A) directo #dato

Nota. Destino, origen. Quiere decir Byte origen, donde inicialmente tomar el valor a mover y Byte destino la direccin donde lo colocar. Es importante comprender los siguientes conceptos:
@Ri significa que Ri contiene la direccin de donde se encuentra el dato con el cual se est trabajando. #dato el nmero que se escriba en el espacio que dice dato ser directamente el valor con el que se quiere trabajar. directo ste ser una direccin de memoria.

Es importante no perder de vista que el operando de la derecha es el origen de la transferencia de informacin, y a su vez, el operando de la izquierda es el destino de esta informacin, as, el siguiente segmento de programa tiene el objetivo de mostrar todas las combinaciones de direccionamiento que se pueden utilizar con la instruccin MOV, en el espacio designado a comentarios (esto es despus del smbolo ;) de cada instruccin se explicar el efecto de la misma (DIRECCIN DE MEMORIA=DATO): ;transfiere al acc un 6CH. A=#06CH ;transfiere a R1 un 03BH. R1=#03BH ;transfiere el contenido de R1 a la direccin de ;memoria 0FCH. 0FCH=#03BH MOV A,R1 ;transfiere al acc el contenido de R1. A=#03BH MOV 03BH,#0AFH ;transfiere un 0AFH a la direccin de memoria 03BH. ;3BH=#0AFH MOV 0FCH,#0B5H ;transfiere un 0B5H a la direccin de memoria 0FCH. ;FCH=#0B5H MOV A,03BH ;transfiere al acc el dato contenido en la direccin de ;memoria 03BH o sea A=#0AFH MOV A,@R1 ;R1 contiene la direccin de donde se encuentra el ;dato que ser transferido al acc A=#0AFH MOV 03BH,0FCH ;transfiere el contenido de la direccin de memoria ;FCH, a la tambin direccin de memoria 3BH. ;3BH=#0B5H MOV A,#06CH MOV R1,#03BH MOV 0FCH,R1

Pgina 45

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

MOV 0FCH,@R1

MOV R1,A MOV R1,03BH MOV 0FCH,A MOV R1,#03BH MOV @R1,A MOV @R1,0FCH MOV @R1,#021H

;R1 contiene la direccin en la cual se encuentra el ;dato que ser transferido a la direccin de memoria ;FCH;FCH=#0B5H ;transfiere a R1 el contenido del acc R1=#0AFH ;transfiere a R1 el contenido de la direccin de ;memoria 03BH. R1=#0B5H ;transfiere el dato contenido en el acc a la direccin ;de memoria FCH. FCH=#0AFH ;transfiere un 3BH a R1. R1=#03BH ;transfiere el contenido del acc a la direccin 03BH ;03BH=#0AFH ;transfiere el contenido de la direccin de memoria ;0FCH a la tambin direccin de memoria 03BH. ;03BH=#0B5H ;transfiere un 21H a la direccin de memoria 03BH ;03BH=#021H

MOVC.- (Mover) Esta instruccin se utiliza para la lectura de tablas contenidas en la memoria de programa (move constant) y cabe sealar que estas tablas slo pueden ser ledas ms no modificadas: MOVC A,@A+DPTR MOVC A,@A+DPTR Ejemplo: Al finalizar el siguiente fragmento de programa el acumulador contendr el nmero 5, obtenido de una tabla que comienza en la direccin 05BH: MOV DPTR,#05BH MOV A,#04H MOVC A,@A+DPTR END DIRECCIN 05BH DB DB DB DB DB 01H 02H 03H 04H 05H (A) (A)
((A+DPTR)) ((A+DPTR))

DIRECCIN 05BH+04H

MOV C,bit MOV bit,C.- (Mover bit) En forma anloga a la instruccin anterior pero operando con el carry del acumulador y cualquier otro bit. MOV C,bit MOV bit,C (C) (bit) (bit) (C)

En el siguiente ejemplo se transferir el bit 0 del puerto 1 al carry del acumulador:


Pgina 46

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

MOV C,P1.0 END MOV DPTR,dato16.- (Mover) Carga al DPTR con el dato de dos bytes, ejemplo: MOV DPTR,dato(15-8),dato(7-0) (DPTR) dato(15-0)

MOVX destino,origen.- (Mover a/de RAM Externa) Esta instruccin permite la carga de un byte desde o hacia la memoria RAM externa, esta instruccin se divide en dos tipos: la accesada por los registros ndice (Ri) y la accesada por el puntero de datos (DPTR). En el primer tipo puede accesar slo hasta 256 localidades generalmente usada para entradas/salidas y el segundo caso para accesar a 64 Kb de memoria RAM externa, ejemplo: MOVX A, @Ri MOVX A, @DPTR MOVX @Ri,A MOVX @DPTR,A (A) (A) ((Ri)) ((DPTR))

((Ri)) ((DPTR)) (A) (A)

NOP.- (No operacin) Esta instruccin no realiza ninguna funcin, utilizada principalmente para hacer retardos, ejemplo: NOP Ejemplo: En el siguiente fragmento de programa, despus de transferir un dato al acumulador, se llegar al final del programa sin realizar ninguna otra operacin, pero s, logrando un retraso: MOV A,#09H NOP NOP NOP NOP END MUL AB.- (Multiplicacin) Multiplica los bytes enteros sin signo, dejando el byte ms significativo de la respuesta en B y el byte menos significativo en A, ejemplo: MUL AB (A) 7-0 (B) 15-8 (A) * (B) (PC)
(PC) + 1

En el siguiente ejemplo se ejecutar la multiplicacin de 50D * 50D dando como resultado C409H (2500D en decimal) y quedando el resultado organizado de la siguiente manera:

Pgina 47

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

MOV A,#050D MOV B,#050D MUL AB END ORL destino,origen.- (Or lgica) Realiza la operacin lgica OR entre los dos bytes dejando el resultado en el byte destino. ORL A,Rn ORL A,directo ORL A, @Ri ORL A, #dato ORL directo.A ORL directo, #dato Ejemplo: El resultado de las siguientes operaciones ser igual a #067H, quedando ste en el acumulador. Tomar en cuenta que son fragmentos de programas diferentes, es decir que no existe relacin entre ellos. MOV A,#042H MOV R1,#025H ORL A,R1 END MOV A,#042H MOV 03BH,#025H ;SIENDO 03BH UNA DIRECCIN DE ORL A,03BH ;MEMORIA END MOV MOV MOV ORL END A,#042H R1#03BH 03BH,#025H A,@R1 (A) (A) (A) (A) (directo) (directo)

(A) o (Rn) (A) o (directo) (A) o ((Ri)) (A) o #dato (directo) o (A) (directo) o #dato

MOV A,#042H ORL A,#025H END MOV A,#042H MOV 03BH,#025H

Pgina 48

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

ORL 03BH,A END MOV 03BH,#042H ORL 03BH,#025H END ORL C,bitdestino.- (Or lgica) Operacin lgica OR realizada con el bit de prueba y el del carry, ejemplo: ORL C,bit ORL C,/bit (C) (C) o (bit) (C) (C) o (-bit)

POP directo.- (Sacar) Operacin de byte de la pila (stack). El contenido de la localidad de la RAM interna direccionada por el SP es ledo, y posteriormente el SP es decrementado por 1. El valor ledo es transferido al byte indicado por el direccionamiento directo. Las banderas no son afectadas: POP directo Ejemplo: (ver instruccin PUSH). (directo) ((SP)) (SP) (SP) - 1

PUSH directo.- (Guardar) Operacin contraria a la anterior, pone un byte a la pila (stack): PUSH directo (SP) ((SP))
(SP) + 1 (directo)

Ejemplo: El siguiente fragmento de programa aplica las dos ltimas instrucciones. Primero se mover el SP a la direccin 028H, despus se cargar en la direccin 010H el dato #045H se guarda en la pila, quedando ste en la direccin 029H e inmediatamente despus, se recupera de la pila para transferirlo a la direccin 011H. MOV MOV PUSH POP END SP,#028H 010H,#045H 010H 011H

RET.- (Regreso) Instruccin encargada de regresar el control de una subrutina llamada previamente:

Pgina 49

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

RET

(PC15-8) (SP) (PC7-0) (SP)

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

Ejemplo:

(ver instrucciones de llamado de subrutina: ACALL)

RETI.- (Regreso de interrupcin) Instruccin similar a la anterior pero con la diferencia de que este regreso es de una subrutina de una peticin de interrupcin. RETI (PC15-8) (SP) (PC7-0) (SP)

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

Ejemplo: RL A.- (Rotacin) Los ocho bits en el acumulador son trasladados un bit a la izquierda. El bit 7 es rotado a la posicin del bit 0. Las banderas no son afectadas. RL A (An + 1) (An) (A0) (A7) n=0-6

Ejemplo: En este ejemplo se transfiere al acumulador un valor de 082H y al finalizar el programa, el acumulador contiene un valor de 05H. MOV A,080H RL A END ;A= 1000 0010 ;A= 0000 0101

RLC A.- (Rotacin) Los ocho bits en el acumulador y la bandera de carry son rotados un bit a la izquierda. El bit 7 se mueve a la bandera de carry; el valor original de la bandera de carry se mueve a la posicin del bit 0. Las otras banderas no son afectadas. (An + 1) (An) (A0) (C) (C) (A7)

RLC A

n=0-6

Ejemplo: Esta instruccin incluye el carry del acumulador siendo bsicamente igual que la anterior. C MOV A,#082H
Pgina 50

;A= 0 1000 0010

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

SETB C RLC A END

;A= 1 1000 0010 ;A= 1 0000 0101

RR A.- (Rotacin) Los ocho bits en el acumulador son rotados un bit a la derecha. El bit 0 es rotado a la posicin del bit 7. Las banderas no son afectadas. RR A (An) (A7)
(An + 1) (A0)

n=0-6

Ejemplo: En este ejemplo se transfiere el nmero 05H al acumulador y al finalizar el programa se tiene el nmero 082H. MOV A,#05H RR A ;A=0000 0101 ;A=1000 0010

RRC A.- (Rotacin) Los ocho bits en el acumulador y la bandera de carry son rotados un bit a la derecha. El bit 0 se mueve a la bandera de carry; el valor original de la bandera de carry se mueve a la posicin del bit 7. Las otras banderas no son afectadas. RRC A (An) (A7) (C)
(An + 1) (C) (A0)

n=0-6

Ejemplo: MOV A,#081H RRC A END ;A=0 1000 0001 ;A=1 0100 0000

SETB bit.- (Coloca el bit) Coloca el bit indicado en uno. SETB puede operar sobre la bandera de carry cualquier bit direccionable directamente. Las otras banderas no son afectadas, ejemplo: SETB C (C) 1 ( bit ) 1

Ejemplo: Supngase que el estado en el que se encuentra el carry es 0. MOV A,#00H SETB C END ;A= 0 0000 0000 ;A= 1 0000 0000

Pgina 51

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

SJMP relativa.- (Salto) El programa de control salta incondicionalmente a la direccin indicada. El destino del salto es calculado por la suma del desplazamiento REL, ms el contenido del Contador de Programa. El rango de destinaciones permitido es de 128 bytes hacia atrs y 127 bytes hacia adelante. Esta instruccin utiliza 11bits para la direccin destino. SJMP relativa (PC) (PC) + 2 (PC) (PC) + relativa

Ejemplo: (ver instruccin LJMP). MOV A,#09H SJMP FIN NOP END

FIN

SUBB A,destino.- (Resta) Resta con prstamo del carry, resta 2 bytes signados y afecta al carry y a la bandera de sobreflujo, ejemplo: SUBB A,Rn SUBB A,directo SUBB A, @Ri SUBB A,#dato (A) (A) (A) (A)

(A) - (C) - (Rn) (A) - (C) - (directo) (A) - (C) - ((Ri)) (A) - (C) - #dato

SWAP A.- (Intercambio) Intercambia los nibbles del acumulador. La operacin puede tambin ser vista como una instruccin de rotacin de 4 bits sin carry, las banderas no son afectadas. Ejemplo: SWAP A (A3-0) (A7-4)

Ejemplo: MOV A,#063H SWAP A END ;A= 0110 0011 ;A= 0011 0110

XCH A, byte.- (Intercambio) Carga el acumulador con el contenido de la variable indicada, al mismo tiempo que escribe el contenido original del acumulador a la variable indicada. El operando fuente/destino puede usar direccionamiento por registro, directo registro indirecto. (A) (Rn) (A) (directo) (A) ((Ri))

XCH A,Rn XCH A,directo XCH A, @Ri

Pgina 52

TEORA Y PROGRAMACON DEL MICROCONTROLADOR AT89C52

Ejemplo: MOV MOV XCH MOV XCH MOV XCH END A,#045H R1,#09H A,R1 03BH,#067H A,03BH 045H,#0FCH A,@R1 ;A=#045H ;R1=#09H ;A=#09H y R1=#045H ;03BH=#067H ;A=#067H y 03BH=#09H ;045H=#0FCH ;A=0FCH y 045H=#067H

XCHD A, @Ri.- (Intercambio) Intercambia nicamente el nivel menos significativo entre el acumulador y el contenido de la direccin indicada en Ri, las banderas no son afectadas. XCHD A, @Ri Ejemplo: MOV R1,#03BH MOV 03BH,#63H MOV A,#81H XCHD A,@R1 END ;R1=#03BH ;03BH=#063H ;A=#081H ;A=#083H y 03BH=#061H (A3-0) ((Ri3-0))

XRL destino,origen.- (Or exclusiva) XRL ejecuta la operacin lgica OR-Exclusiva entre las variables indicadas, guardando el resultado en el destino. Las banderas no son afectadas. Los dos operandos permiten 6 combinaciones de modos de direccionamiento. Cuando el destino es el Acumulador, la fuente puede usar direccionamiento directo, por registro, por registro indirecto, e inmediato; cuando el destino es una direccin directa, la fuente puede ser el acumulador un dato inmediato. Ejemplo: XRL A,Rn XRL A,directo XRL A, @Ri XRL A,#dato XRL directo,A XRL directo,#dato (A) (A) (A) (A) (directo) (directo)

(A) XOR (Rn) (A) XOR (directo) (A) XOR ((Ri)) (A) XOR #dato (directo) XOR (A) (directo XOR #dato

Pgina 53

También podría gustarte