Vous êtes sur la page 1sur 35

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

MICROCONTROLADORES BASADOS EN EL CPU 80C51


DESCRIPCION GENERAL El microcontrolador original de 8 bits con cpu 80C51 fue fabricado por Intel. Es obvio que la patntenle tiene algo as como una caducidad, por lo que una vez pasado el periodo de produccin exclusiva del microcontrolador por parte de Intel de acuerdo a la proteccin de patentes, se liber su fabricacin y otras compaas tales como Phillips y Atmel crearon nuevos microcontroladores de 8 bits con el cpu del 80C51. Del lado izquierdo, se muestra la distribucin de pines del ms bsico de los microcontroladores basados en el 80C51: el 80C31. El que se muestra es la versin en empaque DIP, aunque existen versiones para montaje superficial. Cada nuevo fabricante de estos microcontroladores le ha ido agregando caractersticas adicionales tales como memoria EPROM interna, o ms puertos seriales, o convertidores A/D, cosas que obviamente el microcontrolador original no tiene. Una de las caractersticas mas atractivas sea quizs que el conjunto de instrucciones es bastante reducido y muy parecido a la programacin de los microprocesadores Intel x86. Esto es, las instrucciones e incluso los modos de direccionamiento son muy similares por lo que personas que acostumbran programar en lenguaje ensamblador para x86 no tienen mucha complicacin para programar estos microcontroladores. En la actualidad, el 8031, para entrar en materia, es un microcontrolador muy verstil para aplicaciones de control no tan especializado dado su bajo costo y facilidad de programacin. Es por eso que puede tomarse como un dispositivo con el cual puede aprenderse lenguaje ensamblador y comprender de manera ms sencilla como funciona un microcontrolador para despus adentrarse al manejo de microprocesadores. Esperando que este material sea de ayuda, se describir en primera instancia el hardware que constituye al microcontrolador; posteriormente se describirn el conjunto de instrucciones y finalmente se expondrn ejercicios de programacin bsica en ensamblador. ORGANIZACIN DE MEMORIA Toda la familia 8051 tiene separados los espacios de memoria de programa y memoria de datos como se muestra en las figuras 1 y 2. La separacin lgica de ambos tipos de memoria permite que la memoria de datos pueda ser accesada con un direccionamiento de 8 bits con lo cual se puede almacenar y manipular fcilmente. Sin embargo, tambin se pueden generar direcciones de 16 bits utilizando el registro DPTR. La memoria de programa (ROM, EPROM, etc...) nicamente puede ser leda, como cualquier ROM. Se pueden tener hasta 64KB de programa de memoria. En el 8051, los 4KB ms bajos de memoria de
1 Pines del 8031

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

programa son internos (on-chip). En las versiones sin ROM, toda la memoria de programa es externa. El pulso que permite la lectura de memoria de programa externa es PSEN (program store enable). La memoria de datos (RAM) ocupa direccionamiento separado de la memoria de programa. En el 8051, los 128 bytes ms bajos de memoria de datos son internos (on-chip). Se puede direccionar hasta 64KB de memoria de datos externa (RAM). El CPU genera seales de lectura y escritura ( RD y WR ) durante los accesos de memoria RAM externa.

Figura 1.- Diagrama a bloques del 8051

Figura 2.- estructura de memoria del 80C51

Las memorias de programa o datos externas pueden ser combinadas si as se desea al aplicar las seales RD y PSEN a las entradas de una compuerta AND y usar la salida de esta compuerta como pulso de lectura para memoria de programa/datos externa.

MEMORIA DE PROGRAMA
2

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

En la figura 3 se muestra la parte baja de la memoria de programa. Despus de un reset, el CPU comienza su ejecucin de la localidad 0000H. Como se muestra en la figura 3, cada interrupcin tiene una localidad de memoria fija dentro de la memoria de programa. Cuando ocurre una interrupcin, entonces el CPU brinca a la localidad de memoria de programa correspondiente al inicio de dicha interrupcin en donde a su vez, debe haber una instruccin de salto a la rutina de servicio a la interrupcin.

Figura 3.- parte mas baja de la memoria de programa

Por ejemplo, la interrupcin externa 0 tiene asignada la localidad de memoria de programa 0003H como inicio de dicha interrupcin; si se va a utilizar esta interrupcin, entonces en la direccin 0003H de la memoria de programa debe iniciar la rutina de servicio a dicha interrupcin; muchas de las veces, como las rutinas son grandes, en la localidad 0003H se encuentra una instruccin de salto que redirecciona el flujo de programa al lugar en donde se encuadra como tal la rutina de servicio a la interrupcin. A partir de la direccin inicial reservada para cada interrupcin se disponen de 8 bytes de distancia hasta la prxima direccin de inicio de otra interrupcin. Entonces los inicios de interrupciones estn espaciados entre s 8 bytes. Cabe sealar que si no se utiliza alguno de los espacios de memoria de programa reservados para el manejo de las interrupciones, stos se pueden utilizar como memoria de programa de propsito general. Los 4Kb mas bajos de la memoria de programa pueden residir dentro del microcontrolador o fuera de el. Esta seleccin se hace va hardware al poner a uno o cero el pin EA / Vpp . Si este pin est a cero, entonces se le indica al CPU que tiene que general las seales necesarias para leer el programa desde una memoria ROM externa; Si este pin est a uno, entonces se le indica al CPU que el programa est dentro de el y no tiene que generar las seales de control para un acceso externo a memoria de programa. En las versiones sin ROM interna siempre se debe poner a cero este para que el programa se pueda leer desde una memoria ROM externa como es el caso del 8031. Una vez seleccionado el lugar desde donde el CPU debe ejecutar el programa y suponiendo que el programa est en una memoria externa, es necesario conocer el proceso que el CPU sigue para poder leer el programa. En la figura 4 se muestra como debe realizarse la interfaz entre el microcontrolador y la memoria ROM externa para ejecutar el programa desde sta ltima.

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Cuando el CPU debe leer una instruccin desde la memoria, ejecuta una seria de operaciones antes de leer la instruccin. Este proceso se describe a continuacin: a) Se genera el byte bajo de la direccin a travs del puerto P0 y mediante la seal ALE se graba en el latch. b) En un segundo tiempo, se genera el byte alto de la direccin a travs del puerto P2. c) En un tercer tiempo se genera la seal PSEN que habilita el dato direccionado y

Figura 4.- conexin externa del P con una memoria ROM externa

lo pone a la salida de la memoria ROM externa. d) Por ultimo, la instruccin almacenada en la ROM es leda a travs del puerto P0. Por cada instruccin que debe leer el CPU de la ROM externa se ejecuta el mismo proceso descrito anteriormente. Se puede notar que el puerto P0 sirve para generar direcciones as como para transferir datos; a esto se le llama que el puerto P0 est multiplexado. Utilizando un diagrama de tiempos, en la figura 5 se puede ver como se van ejecutando cada una de las seales para poder leer la memoria de programa. Tambin se puede notar, que la direccin generada por el CPU es de 16 bits, por lo que el microcontrolador puede ser conectado a una memoria de hasta 64KB. En caso de tener una memoria ms pequea, los bits ms altos, por as decirlo, sobrantes se pueden utilizar para direccionamiento de otros dispositivos externos.

Figura 5.- Diagrama de tiempos de la lectura de memoria de programa

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

MEMORIA DE DATOS Ya se mencion que la memoria de datos y programa se manejan en forma independiente aunque de manera sincronizada. Es obvio que mientras se lee la memoria de programa no se puede leer la memoria de datos. Para acceder a la memoria de datos externa, el CPU realiza las siguientes operaciones: a) genera la direccin baja a travs del puerto 0 y a mediante la seal ALE es grabada en el latch. b) Se genera la parte alta de la direccin en el Figura 6.- Conexin con memoria de datos externa. puerto P2. R c) Se genera la seal RD o W segn sea el caso de leer o escribir en la memoria RAM de datos externa respectivamente. d) El microcontrolador escribe o lee los datos, segn sea el caso, a travs del puerto P0. Hay que puntualizar que la direccin de la memoria externa de datos puede tener un ancho de 1 o 2 bytes segn el tipo de instruccin utilizada. Si la direccin es de 1 byte, entonces solo se utilizar el puerto P0 para generarla. Para direcciones de 2 Bytes, es obvio que la parte alta o segundo byte alto de la direccin se genera a travs del puerto P2. Al igual que para la memoria de programa, en la memoria de datos interna hay que respetar cierta organizacin que el CPU necesita tener para su correcto funcionamiento. En general, el espacio (mapeo) de memoria est dividido en tres secciones: 128 bytes bajos, 128 bytes altos y espacio SFR. Esta memoria de datos se refiere a la memoria interna del microcontrolador. No se debe confundir con el acceso a datos externos de una memoria RAM o dispositivos de entrada y salida. Sin embargo, la memoria interna de esta familia tiene algunos aspectos interesantes que deben tomarse en cuenta. La arquitectura bsica de la familia C51 tiene 128 bytes de RAM interna. Algunos otros como el 80C32 tienen 256 bytes de RAM interna siendo esta capacidad la mxima encontrada en la gama de la familia C51. La memoria interna de datos siempre se direcciona con 1 byte. Esto implica que el espacio de memoria Figura 7.- Organizacin de memoria RAM interna de interna que puede direccionar el microcontrolador datos. solo puede ser de hasta 256 bytes. Esto explica la figura 7 la cual mapea direcciones de memoria interna desde 00H hasta FFH; sin embargo se puede ver una particin de memoria a partir de la direccin 80H.

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

El espacio que comprende de la direccin 00H hasta la 7FH puede ser direccionado de forma directa o indirecta. Pero del espacio que comprende de la direccin 80H hasta la FFH tiene un comportamiento distinto; si se utiliza direccionamiento indirecto se estar apuntando a la memoria RAM interna de propsito general y si se utiliza direccionamiento directo entonces se estar accesando al espacio SFR. Esto es, a pesar que se tiene el mismo rango de memoria, fsicamente son dos espacios de memoria distintos. Con lo anterior se puede ver como se pueden utilizar los tres espacios de memoria interna descritos anteriormente: los 128 bytes ms bajos se pueden direccionar de forma directa o indirecta; los 128 bytes ms altos solo se pueden acceder mediante direccionamiento indirecto y el espacio SFR solo puede ser accesado mediante direccionamiento directo. Y si se preguntan que cosa es el espacio SFR, se puede decir que es el espacio de memoria que ocupan todos los registros de propsito especial que utiliza el microcontrolador para poder realizar todas sus operaciones; en este espacio se guardan datos de configuracin del mismo microcontrolador. Por ello en la figura 7 se muestra que la mitad alta del direccionamiento directo contiene a registros tales como: puertos, timers, contadores, puntero de pila etc.

Figura 8.- Del lado izquierdo, los 128 bytes bajos de memoria RAM interna de datos. Del lado derecho, los 128 bytes altos de la memoria RAM interna de datos. .

A su vez, los 128 bytes bajos de la memoria RAM interna tiene su propia organizacin tal como se muestra en la figura 8. Los 32 bytes ms bajos estn agrupados en 4 bancos de 8 bytes cada uno. Las instrucciones del programa llaman a estos registros como R0, R1,.. R7. Estos bancos son utilizados para direccionamientos indirectos y solo se puede tener seleccionado a uno de los cuatro bancos como banco de utilizacin actual. Para indicarle al CPU cual de estos cuatro bancos se va a utilizar para direccionamiento indirecto se utiliza el registro llamado PSW (Program status Word) el cual tiene 2 bits que indican cual es el banco que se tiene que utilizar para este fin.

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Los siguientes 16 bytes, es decir, de la direccin 20H hasta la 2FH forman un bloque de memoria que es direccionable bit a bit. A su vez este espacio se subdirecciona desde la 00H hasta 7F. El uso de este espacio se ver en algunas instrucciones que permiten acceder a bits en lugar de bytes. A partir de la direccin 80H comienza los 128 bytes altos de memoria RAM interna (solo en las versiones que tiene 256 bytes de RAM). Esta parte de la memoria solo puede utilizarse con direccionamiento indirecto. Recordar que si se intenta entrar a una direccin arriba de 80H con direccionamiento directo se estar accediendo al bloque de SFR y no a la memoria RAM interna superior. La figura 9 muestra el espacio SFR y algunas de las localidades ms utilizadas en las instrucciones de estos microcontroladores. Finalmente, cuando se realiza un RESET, el apuntador de pila contiene la direccin 7H, con lo que se estara apuntando al registro R7 del banco 0; Esto puede cambiarse al modificar el apuntador de pila a algn valor superior que apunte a algn lugar de memoria en los 128 bytes bajos que se sepa no estorbar para nuestra programacin.

Figura 9.- Espacio de memoria correspondiente a SFR.

CONJUNTO DE INSTRUCCIONES DE LA FAMILIA 80C51 Las instrucciones de estos microcontroladores estn optimizadas para aplicaciones de control de 8 bits. Se tienen varios modos de direccionamiento para el acceso rpido de la RAM interna y facilitar las operaciones en estructuras de datos pequeas. Tambin se tienen instrucciones que soportan direccionamiento de un solo bit para aplicaciones de lgica booleana. Para poder programar, es necesario conocer algunos conceptos referentes a los modos de direccionamiento as como los registros que pueden intervenir en las instrucciones as como los registros que configuran como deben interpretarse algunas de las instrucciones. En primer lugar, se tiene el registro PSW el cual contiene varios bits de estado que reflejan el estado actual del CPU. Este contiene un bit de acarreo, un bit de acarreo auxiliar, dos bits que indican el banco de memoria interna a utilizar para direccionamientos indirectos, un bit de overflow (desbordamiento), un bit de paridad y dos banderas de estado definibles por el usuario. El orden del registro PSW se muestra en la figura 10.

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Figura 10.- Registro PSW en la familia 80C51

El bit de acarreo a parte de utilizarse en las operaciones aritmticas, tambin sirve como acumulador para varias operaciones booleanas. Los bits RS0 y RS1 son usados para seleccionar uno de los cuatro bancos de registros que se mencionan en la figura 8. Varias instrucciones se refieren a estas localidades de memoria como R0, R1, hasta R7. La seleccin de cual banco se va a utilizar se basa en estos dos bits en tiempo de ejecucin. El bit de paridad refleja el numero de 1s en el acumulador. Si P=1 significa que el acumulador tiene un numero impar de 1s, y si P=0 el acumulador tiene un numero par de 1s. Existen 6 modos de direccionamiento para la familia 80C51 y son: a) Direccionamiento directo. d) Instrucciones a registros especficos. b) Direccionamiento indirecto. e) Direccionamiento inmediato. c) Instrucciones entre registros. f) Direccionamiento indexado. DIRECCIONAMIENTO DIRECTO En este direccionamiento, el operando est especificado por una direccin de 8 bits contenido en el cdigo de operacin de la instruccin. nicamente la memoria RAM interna y la zona de SFRs se pueden direccionar directamente. Un ejemplo de este tipo de direccionamiento es el siguiente: MOV A,50H La instruccin anterior indica que el contenido de la posicin de memoria 50H debe ser copiado al registro A. Ntese que el sentido de asignacin den la instruccin es de derecha a izquierda. Es decir, del lado derecho de la coma se tiene la fuente y de lado izquierdo se encuentra el destino. DIRECCIONAMIENTO INDIRECTO En el direccionamiento indirecto la instruccin especifica una registro el cual contiene la direccin del operando. Es decir, no se da directamente la direccin del operando y en su lugar se hace referencia a algn registro R0-R7 de alguno de los 4 bancos de la memoria baja de RAM interna. Un ejemplo de este tipo de direccionamiento es el siguiente: MOV A,@R0

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

La instruccin anterior indica que la direccin apuntada por el registro R0 se copia al registro A. Se puede usar este tipo de direccionamiento tanto para RAM interna como para RAM externa. INSTRUCCIONES ENTRE REGISTROS Este tipo de instrucciones se refiere a la posibilidad de poder mover datos entre el espacio RAM interno o externo y alguno de los 4 bancos de memoria que a su vez cada banco tiene 8 registros (de R0 a R7). En cuanto a la instruccin de cdigo fuente no se ve mucha diferencia con respecto al direccionamiento directo, sin embargo, a bajo nivel, el cdigo de operacin de la instruccin es ms corto y optimiza el cdigo de programa. Un ejemplo es el siguiente: MOV A,R0 La instruccin anterior indica que el contenido del registro R0 se copia al registro A. Ntese la diferencia con el direccionamiento indirecto al no tener @ antes de especificar el registro R0.

INSTRUCCIONES A REGISTROS ESPECFICOS Este direccionamiento se refiere al acceso a registros especficos del SFR. Con esto, la instruccin como tal no necesita un byte de direccin o registro R0-R7, si que la instruccin por si misma implica que se tiene que acceder a este espacio de memoria. De hecho este tipo de direccionamiento se parece al direccionamiento de registros. La diferencia, insistiendo en el punto, el cdigo de operacin que tiene la instruccin. DIRECCIONAMIENTO INMEDIATO Este direccionamiento se utiliza cuando se quiere copiar o asignar a algn registro un numero constante. Incluso, en el cdigo de operacin de la instruccin se incluye el numero constante como parte del mismo. El ejemplo es: MOV A,#50H Esta instruccin copia el nmero 50 hexadecimal al registro A. Ntese que se utiliza el smbolo de almohadilla (#) para indicar que se utiliza una constante y no una direccin de memoria de datos. DIRECCIONAMIENTO INDEXADO Este tipo de direccionamiento se utiliza para leer tablas o listas desde la memoria de programa. Se utiliza un registro tal como el DPTR o PC para apuntar al inicio de la tabla y al acumulador como ndice de la misma. El ejemplo para este tipo de direccionamiento seria: MOVC A,@A+PC

Ntese que la direccin apuntada se forma al sumar el contenido del registro A y PC. A su vez funciona como un direccionamiento indirecto ya que con la suma de ambos registros se obtiene una direccin que a su vez contiene el dato que se necesita. Tambin ntese que nemnico es MOVC y no MOV; la C al final del nemnico significa que se van a mover datos de cdigo de programa y no de cdigo de datos. Entonces este tipo de direccionamiento solo puede ser utilizado para entrar a la memoria de programa y no a la memoria de datos.

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Las instrucciones de la familia 80C51 pueden dividirse en grupos: a) Instrucciones aritmticas. e) Instrucciones booleanas. b) Instrucciones lgicas. f) Instrucciones de salto condicional y no c) Instrucciones de transferencia de datos. condicional. d) Instrucciones para accesos de memoria externas. A continuacin, de la tabla 1 a la tabla 8 se presenta una lista de todas las instrucciones agrupadas de acuerdo a la lista anterior. Se describe los modos de direccionamiento que soporta cada instruccin as como el tiempo de ejecucin de cada una de ellas suponiendo que se utiliza un cristal (u oscilador externo) de 12MHz.
Tabla 1.-Instrucciones aritmticas

Tabla 2.- Instrucciones lgicas

10

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Tabla 3.- Instrucciones de transferencias de datos

Tabla 4.- instrucciones para accesos de memorias externas (datos y programa)

Tabla 5.-Instrucciones booleanas

11

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Tabla 6.- instrucciones de salto con

A continuacin se presenta en forma alfabtica un resumen de todas las variantes posibles que se tienen dependiendo del modo de direccionamiento utilizado. Se presenta tambin el tamao en bytes de cada instruccin as como los pulsos necesarios (periodo de oscilacin) para la ejecucin de la misma.

12

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Tabla 7.- Resumen de instrucciones

13

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Tabla 7.- Resumen de instrucciones (cont)

14

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Tabla 7.- Resumen de instrucciones (cont)

15

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Tabla 7.- Resumen de instrucciones (cont)

TIMING DEL CPU Todos los microcontroladores de la familia 80C51 tienen un oscilador integrado que puede utilizarse si as se desea como fuente de reloj para el CPU Para usar este oscilador interno conecte un cristal o un resonador cermico entre los pines XTAL1 y XTAL2 del microcontrolador adems de capacitores hacia tierra como se muestra en la figura 11. En la figura 12 se muestra como conectar una seal de reloj externo. Esto particularmente se utiliza cuando se van a conectar varios microcontroladores o se har una Figura 11.- conexin de un cristal para usar el red de microcontroladores y se desea que estn oscilador interno y generar el reloj para el CPU. sincronizados a un solo reloj. Es bastante raro ver este tipo de configuraciones sin embargo se importante sealar que se pueden sincronizar varios microcontroladores a una misma seal de reloj.

16

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Figura 12.- Conexin externa de una seal de reloj

Una vez visto como generar la seal de reloj para el CPU se debe explicar el concepto de ciclos de mquina. Un ciclo de maquina puede considerarse como el tiempo que utiliza el CPU para poder realizar la instruccin ms simple de su set de instrucciones. Para la familia 80C51, un ciclo de maquina consiste en 6 estados, nombrados de S1 a S6. cada estado utiliza dos periodos del reloj. De esta forma, un ciclo de maquina utiliza 12 periodos de reloj o visto desde el punto de vista de tiempo, un ciclo de maquina se realiza en 1s utilizando un oscilador de 12 MHz. La figura 13 es un esquema de la divisin del tiempo que hace el CPU con respecto a la seal de reloj.

Ciclo de maquina

Figura 13.- Ciclo de maquina para la familia 80C51

17

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

INTERRUPCIONES La familia de microcontroladores tiene como mnimo 5 fuentes de interrupcin: 2 interrupciones externas, 2 interrupciones de Timers y 1 interrupcin del puerto serie. Para configurar el comportamiento de las interrupciones es necesario utilizar el registro IE (interrup enable). Este registro permite habilitar el reconocimiento de las interrupciones cuando estas se generan as como habilitar en forma individual la cada una de las interrupciones. Ntese que el bit utiliza lgica negada. En otras palabras, de acuerdo a la figura 14, el bit EA del registro IP le indica al microcontrolador que se utilizaran las interrupciones, mas no le indica cual de ellas se utilizar. Para indicar a cual de las interrupciones se atender (una vez habilitada la posibilidad de atender Figura 14.- registro IE (interrup enable) interrupciones con el bit EA ) se utilizan los bits EX0, ET0, EX1, ET1 y ES. Respectivamente, activaran: interrupcin externa 0, interrupcin del timer 0, interrupcin externa 1, interrupcin del timer 1 e interrupcin del puerto serial. Todos estos activan su interrupcin al colocar un 1 o la desactivan si se coloca un 0. Vase la figura 14. Cada fuente de interrupcin puede tambin ser colocada en una prioridad alta o baja configurando el registro IP (interrup priority) mostrado en la figura 15. Una interrupcin de baja prioridad puede ser interrumpida por una interrupcin de alta prioridad pero no al revs. Sin embargo, interrupciones del mismo nivel no pueden interrumpirse entre si. Si dos interrupciones son requeridas en forma simultanea y ambas son de distinta prioridad, la interrupcin de prioridad alta ser atendida antes de la interrupcin de prioridad baja. En caso de que dos interrupciones sean requeridas y estas sean del mismo nivel, entonces internamente
18 Figura 15.- Registro IP (interrupt priority)

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

se elegir cual de ellas se atender comprobando cual de ellas lleg primero. En la figura 16 se muestra el sistema de control de interrupciones. En operacin, todas las banderas de interrupcin son latcheadas dentro del sistema de control de interrupciones durante 5 estados del ciclo de mquina y en el estado 6 es verificado para ver si hay alguna interrupcin pendiente. Si alguna de las banderas de interrupcin est activa entonces el sistema de interrupcin genera una instruccin LCALL hacia la localidad apropiada de memoria de programa siempre y cuando no se est atendiendo a una interrupcin de alta prioridad. Para que una interrupcin pueda ser detectada correctamente, se debe procurar que el pulso de interrupcin dure al menos 12 ciclos de reloj. En caso de que no se utilice el registro de prioridad (registro IP) existe una prioridad por default en caso de que las interrupciones lleguen en forma simultanea; en este caso se considera que todas las interrupciones estn en prioridad 2. la tabla 8 muestra la prioridad cuando todas las interrupciones son de baja prioridad (o nivel 2).
Tabla 8.- Prioridades cuando no se especifica una interrupcin de nivel 1 (alta prioridad) FUENTE PRIORIDAD Mas alta IE0 : TF0 : IE1 : TF1 : RI+TI Mas baja

La instruccin LCALL generada por hardware al recibir una interrupcin provoca que el contenido del contador de programa (PC) sea colocado en la pila y carga al PC con la direccin de inicio de la rutina del servicio de interrupcin. Se debe recordar que el inicio de cada servicio de interrupcin tiene una direccin fija en la memoria de programa al inicio de la misma (ver figura 3). nicamente el PC es automticamente colocado en la pila durante el servicio a una interrupcin. Ningn otro registro es colocado en la pila por lo que el programador tiene la libertad de decidir que registro se colocar en la pila y as optimizar su programa.

19

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Figura 16.- Sistema de control de interrupciones.

Respecto a las direcciones de inicio de cada una de las interrupciones, que de paso cabe mencionar que a estas direcciones de inicio se les llama vectores de interrupcin, se sabe que tienen una direccin fija. Estas direcciones fijas se muestran en la tabla 9
Tabla 9.- Vectores de interrupcin FUENTE DIRECCIN (VECTOR) RST 0000H IE0 0003H TF0 000BH IE1 0013H TF1 001BH RI+TI 0023H

. Fsicamente las interrupciones son manejadas por el hardware mostrado en la figura 16. De acuerdo a T esta figura, se puede ver que cada una de las interrupciones externas ( IN 0 INT 1 ) tienen dos alternativas de entrada lo cual se ver mas adelante en la descripcin de los registros que configuran tanto a estas interrupciones como a lo timers. Aunque no es muy comn considerar al reset como una interrupcin, ste debe ser tratado como tal; cuando llega un pulso de reset a travs del pin RST, se detiene cualquier ejecucin que se est realizando en el microcontrolador. Por ello se puede considerar que el reset es la interrupcin de mas alta prioridad y que est por sobre todo el sistema. Adems que el reset tambin tiene su vector de interrupcin como se muestra en la 9. Cuando sucede un reset el microcontrolador pone en todos sus registros de funcionamiento (o de configuracin si as se le quiere decir) en valores conocidos (valores por default). Estos valores se muestran en la figura 17.

20

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Figura 17.- valores de los SFRs en un reset

Figura 18.- circuito power-on reset

Para asegurar que el microcontrolador haga un reset al conectar la alimentacin del sistema normalmente se utiliza un circuito denominado power-on reset. Este circuito mostrado en la figura 18 asegura que el microcontrolador haga un reset y a su vez que alteraciones o ruido de la alimentacin provoquen un reset falso. Se puede conectar un push buton en paralelo con el capacitor para crear un circuito que tambin permita hacer resets en forma manual con solo presionar dicho botn. REGISTROS DE FUNCION ESPECIAL (SFR) En la figura 19 se ve el mapa de memoria interna (los 128 bytes altos de RAM interna) correspondiente a los SFRs. Ntese que no todos los espacios de memoria tienen asignado algn nombre. Los espacios sin nombre implementados fsicamente microcontrolador. Leer localidades retornar un valor escribir a esas localidades ningn efecto.
Figura 19.- Mapeo de los SFRs en la memoria interna de programa

no estn en el de esas aleatorio y no tendr

Se debe tener cuidado de ingresar a las localidades de memoria no implementadas ya que pueden ser utilizadas por otros microcontroladores que se basen en el 80C51 para funcionalidades extendidas. En la tabla 10 se describen los registros de funcin especial bsicos de la familia 80C51.
Tabla 10.- Registros de funcin especial (SFR) REGISTRO FUNCION Es el registro acumulador. Muchas instrucciones lo utilizan para operar. Las ACC instrucciones solo hacer referencia a el como registro A. 21

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

B PSW (Program Status Word) SP (Stack Pointer) DP (Data Pointer) Puertos 0 al 3 SBUF (Serial Data Buffer) Timers bsicos Registros de control

Es un registro que se utiliza en operaciones de multiplicacin y divisin. Para otras instrucciones este registro puede ser usado como de propsito general. Palabra de estado de programa. Este registro contiene informacin del status del programa como se detallo en secciones anteriores. Es el apuntador de pila. Es un registro de 8 bits que apunta a la pila del programa. Por default, este registro apunta a la direccin 08H. Es el apuntador de datos. Es un registro de 16 bits el cual puede ser utilizado en parte alta (DPH) o parte baja (DPL) o como un registro de 16 bits (DPTR). El uso de este registro es para direccionamiento de memoria de datos o programa externo. Son registros usados como buffer de los puertos P0 al P3 externos. El estado de estos registros internos es reflejado en los pines externos. Es el buffer del puerto serie. Fsicamente est formado por dos registros: un registro de recepcin de datos seriales y un registro de transmisin de datos. Son cuatro registros que manipulan a los timers/counters. Estos son TH0-TL0 para el timer 0 y TH1-TL1 para el timer 1. Estos registros configuran el funcionamiento de los timers, energa del microcontrolador, puerto serial e interrupciones. Estos registros son IP, IE, TMOD, TCON, SCON y PCON.

22

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

CONTADORES / TEMPORIZADORES El 80C51 tiene dos timers/contadores de 16 bits: timer 0 y timer 1; Ambos pueden ser configurados para operar ya sea como timers o contadores de eventos. Se tienen tambin 2 registros para configurar a los timers/contadores los cuales son TMOD y TCON y que sern descritos en breve. Cuando se esta utilizando la funcin de timer (temporizador), el registro que lo maneja es incrementado cada ciclo de maquina. De esta forma, se puede pensar que funciona como contador de ciclos de mquina. Como cada ciclo de maquina consiste en 12 periodos de oscilacin del reloj, la frecuencia de conteo es 1/12 de la frecuencia del oscilador. Cuando se est utilizando la funcin de contador, el registro que lo maneja es incrementado en respuesta a una transicin de 1 a 0 en el pin T0 o T1. Es muy comn utilizar esta funcin como contador de eventos externos. En la figura 20 se muestra al registro TMOD. Se puede ver que el registro esta dividido en dos secciones (dos nibles): el nible bajo indica el funcionamiento del timer 0 y el nible alto indica el funcionamiento para el timer 2; El registro TMOD se utiliza particularmente para especificar que modo de operacin tendr cada uno de los timers (se tienen 2). De all el nombre del registro: Timer MODe (TMOD). Cada nible contiene 3 campos: Arranque (Gate), operacin (C/ T ) y modo (M0, M1). El campo de operacin (C/ T ) se utiliza para especificar si los registros asociados a los timers sern utilizados como timers o como contadores. Si C/ T =1, entonces los registros funcionaran como contadores; si C/ T =0, entonces los registros funcionarn como timers. Se debe recordar que contador se refiere a que los registros incrementarn su cuenta a travs de los pines externos Tx, y timers se refiere a que los registros incrementarn su cuente a travs del reloj interno.

Figura 20.- Registro TMOD

El campo Gate indica el modo de arranque de los timers/contadores; Si Gate=1 y el campo TRx=1 (el campo TRx est en el registro TCON que se ver en la siguiente seccin) entonces los registros asociados a los timers solo funcionaran si el pin externo INTx tiene un nivel alto; Est seria como un control por hardware del arranque de los timers, es decir, los timer incrementaran su cuenta ya sea en forma externa (a travs del pin Tx) o de forma interna (con el reloj interno) siempre y cuando el pin
23

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

externo INTx tenga un nivel alto. Si Gate=0 y TRx=1, entonces los timers/contadores funcionarn sin importar que nivel tenga el pin externo INTx . Se debe tener cuidado con la asociatividad de los pines y los registros internos. Al hablar del campo TRx, se est haciendo referencia ya sea a TR0 o TR1; al hablar del pin externo Tx, se est haciendo referencia ya sea a T0 o T1; al hablar del pin externo INTx , se est haciendo referencia ya sea a IN 0 o IN 1 . Lo anterior es para aclarar que si se desea configurar al timer 0, entonces los campos T T y pines externos que intervienen en ello deben ser coincidentes en el numero, es decir, para el timer 0 T pueden estar involucrados T0, TR0 o IN 0 o los tres, y para el timer 1 pueden estar involucrados T1, IN 1 o los tres. Se debe tener especial cuidado en los registros, campos y pines que T TR1 o intervienen en cada timer para poder realizar una configuracin exitosa de los mismos. Por ltimo, existen 4 modos de operacin de los timers especificados en el campo (M0, M1); Es obvio que los modos de funcionamiento son modo 0, modo 1, modo 2 y modo 3 los cuales se describen a continuacin: a) Modo 0 (timer/contador de 13 bits) Este modo de operacin se implement en el 8031 para mantener la compatibilidad con su predecesor el 8048, generalmente en nuevos diseos no se emplea este modo de operacin. En este modo de operacin los timers se pueden configurar como un contador de 13 bits, los 5 bits mas bajos de TLx son un contador de 0-31 (preescalador) y THx es un contador de 8 bits. Los 3 bits ms altos de TLx son aleatorios y deben de ignorarse. Cuando en la cuenta TLx llega a 31 y se incrementa, se resetea a cero e incrementa a THx. Recordando que los timers son una fuente de interrupcin, cuando en este modo se pasa de todos 1s a todos 0s (cuentan los 13 bits), se generar una interrupcin (se activa la bandera TFx) que puede o no ser atendida. En la figura 21 se muestra el diagrama a bloques de este modo de funcionamiento.

Figura 21.- Funcionamiento del timer 1 en el modo 0

b) Modo 1 (timer/contador de 16 bits) Este modo de operacin funciona igual que el modo cero, excepto que la cuenta se extiende hasta FFFFH (65535). Es el modo de operacin ms utilizado en los diseos actuales. TLx se incrementa desde 0 hasta 255 y al siguiente incremento se resetea e incrementa a THx en uno.
24

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Cuando en este modo se pasa de todos 1s a todos 0s (cuentan los 16 bits), se generar una interrupcin (se activa la bandera TFx) que puede o no ser atendida. c) Modo 2 (timer/contador de 8 bits con autorecarga) Este modo de operacin funciona igual que el modo cero, excepto que el registro TLx se utiliza como un contador de 8 bits y el registro THx se utiliza como valor de recarga. Cuando el contenido de TLx cambia de todos 1 a todos 0 se genera la interrupcin respectiva y se transfiere a TLx el valor de THx, el contenido de THx permanece sin cambio. La figura 22 muestra esquemticamente este modo de funcionamiento.

Figura 22.- Funcionamiento del timer 1 en el modo 2

d) Modo 3 (Doble timer/contador de 8 bits) En este modo de operacin el timer 1 mantiene su cuenta y se deshabilita. El timer 0 se divide en dos contadores separados; TL0 hace las veces de timer 0 y es TH0 hace las veces de timer 1.
T Con lo anterior, TL0 utiliza los bits T0, TR0, IN 0 , Gate y C/T. A su vez, TL0 generar la interrupcin correspondiente al timer 0. Entonces, TL0 Puede ser configurado para funcionar como timer o como contador.

TH0 a pesar de que funciona como otro contador de 8 bits, es asegurado para funcionar exclusivamente como timer y no como contador. De esta forma, TH0 utilizar solo el bit TR1 para empezar su funcionamiento sin importar C/T y Gate. Ahora, TH0 manejara la interrupcin correspondiente al timer 1. En la figura 23 se muestra el esquema de funcionamiento de este modo de operacin.

25

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Figura 23.- Funcionamiento del timer 0 en el modo 3

Existe otro registro que configura a los timers: El registro TCON. En la figura 23 se muestran los campos y la descripcin del registro TCON.

Figura 24.- Registro TCON

El registro TCON tiene cuatro campos para el control de los timers y las interrupciones externas: ITx, IEx, TRx y TFx (donde x puede ser 0 o 1). El campo ITx se utiliza para definir el tipo de interrupcin atendida. Si ITx=1, entonces la interrupcin externa se reconocer por flanco de bajada, es decir, solo una interrupcin ser detectada cuando exista una transicin de 1 a 0 no importando cuanto tiempo se quede en 0. Si ITx=0, entonces la interrupcin externa se reconocer por nivel bajo, es decir, en una transicin de 1 a 0 se pueden detectar mltiples interrupciones dependiendo del tiempo que la seal de interrupcin se quede en nivel bajo en relacin con los ciclos de mquina. El campo IEx es manejado por hardware; es la bandera de deteccin de interrupcin externa. Cuando se genera una interrupcin este bit automticamente se pone a 1 y al pasar a la rutina de servicio a la interrupcin se pone a 0 en forma automtica.
26

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

El campo TRx se utiliza para habilitar o deshabilitar los timers. Si TRx=0, entonces el timer correspondiente se apaga (deshabilita). Si TRx=1, entonces el timer correspondiente se enciende (habilita). Aplica independientemente si el timer funciona como timer o como contador. El campo TFx es manejado por hardware; es la bandera de deteccin de sobreflujo de los timers. Esto a su vez generar una interrupcin del timer en cuestin. Cuando hay un sobreflujo del timer, TFx se pone a 1. Al atender dicha interrupcin, esta bandera se pone a 0 en forma automtica. INTERFAZ SERIAL ESTANDAR La familia 80C51 tiene un puerto serial full duplex, lo que significa que se pueden transmitir y recibir datos en forma simultanea. Otra caracterstica interesante es que la recepcin de datos tiene un buffer lo que implica que despus de haber recibido un dato, inmediatamente se puede comenzar a recibir otro dato sin perder el anterior. El nico cuidado que se debe tener es guardar el primer dato antes de que se termine de recibir el segundo dato ya que de no hacerlo, el primer dato se perder al ser sustituido por el segundo dato. Se tienen dos SFRs asociados al puerto serial y aunque tienen el mismo nombre a nivel programacin son dos registros diferentes a nivel hardware, es decir, tienen direcciones de memoria distintos. El SFR al cual se est haciendo referencia es el SBUF. Cuando se recibe un dato por el puerto serie, ste se escribe en el registro SBUF; al terminar la recepcin se genera una interrupcin para avisar que se tiene listo un dato y que hay que recuperarlo, leerlo o guardarlo en alguna posicin de memoria para evitar la perdida de ste, lo que se hace leyendo al registro SBUF. Entonces, ya sea para enviar o recibir datos por el puerto serial, se escribe o lee respectivamente al registro SBUF. El puerto serial de la familia 80C51 puede operar de 4 formas descritas a continuacin: a) Modo 0 (registro de corrimiento): Operacin Half Duplex, los datos se envan y reciben (pero no simultneamente) a travs de la terminal RXD mediante frames de 8 bits, el LSB (bit menos significativo) primero. La velocidad es fija a la doceava parte de la frecuencia del oscilador. La frecuencia de corrimiento, que es igual a la velocidad de transmisin se presenta en la terminal TXD durante la transmisin y recepcin, esta seal se utiliza para sincronizar el receptor o transmisor. En este modo se inicia la recepcin cuando el bit REN es uno y el bit RI es cero (en el registro SCON). b) Modo 1 (8 bits): Operacin Full Duplex Asncrono de 10 bits. Los datos seriales se envan a travs de la terminal TXD y se reciben a travs de la terminal RXD. Un frame completo consta de un bit de start tambin llamado de inicio (siempre un cero), seguido de ocho bits de datos comenzando por el LSB (bit menos significativo) y un bit de stop tambin llamado de paro (siempre un uno). Los bits de START y STOP se adicionan por hardware, el software escribe o lee el dato de ocho bits en el registro SBUF. La velocidad de transmisin se puede variar utilizando el timer 1 como generador de baud rate (velocidad de transmisin/recepcin). c) Modo 2 (9 bits): Este modo de operacin es similar al modo 1, con dos excepciones. Primero, el nmero de bits del frame es once ya que se inserta un noveno bit antes del bit de STOP. Cuando se transmite, el noveno bit se obtiene del bit TB8 en el registro SCON y se asume que
27

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

TB8 fue escrito antes de iniciar la transmisin de datos. Cuando se recibe, el noveno bit de datos se puede leer de RB8 en el registro SCON. Segundo, que el baud rate (velocidad de transmisin/recepcin) no es programable a travs del timer 1 si no que es programable a dos velocidades fijas ya sea a 1/32 o 1/64 la frecuencia del oscilador (cristal o resonador utilizado). El noveno bit transmitido comnmente es utilizado como bit de paridad. Recordando que la paridad es un mtodo de deteccin de errores de transmisin. d) Modo 3 (9 bits): La forma de operar en modo tres es la misma que el modo dos, excepto que la velocidad de transmisin se puede variar como en el modo uno. Dentro de los modos de operacin se ha hablado del registro SCON (serial-control). Este registro es utilizado precisamente para configurar al puerto serial. Este registro, como se muestra en la figura 25, contiene tambin banderas de interrupcin y el bit de paridad (noveno bit de transmisin) en caso de que ste sea utilizado.

Figura 24.- Registro SCON

El campo RI es la bandera de interrupcin de recepcin del puerto serial. Se pone a uno cuando termina de llegar el octavo bit en el modo 0, o a la mitad del bit de stop en los dems modos (excepto cuando se utiliza el campo SM2). El bit RI debe ser limpiado por software. El campo TI es la bandera de interrupcin de transmisin del puerto serial. Se pone a uno cuando termina de enviarse el octavo bit en el modo 0, o a la mitad del bit de stop en los dems modos. El bit RI debe ser limpiado por software. El campo RB8 en los modos 2 y 3, es el noveno bit que ha sido recibido (posiblemente paridad). En el modo 1, si SM2=0, RB8 es el bit de stop que ha sido recibido. En el modo 0 RB8 no se utiliza.

28

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

El campo TB8 es el noveno bit que ser transmitido en los modos 2 y 3. Este bit se puede manipular por software a como el programador lo desee ponindolo a uno o cero. El campo REN se utiliza para habilitar la recepcin serial. Para habilitar la recepcin REN debe estar puesto a uno. Para deshabilitar la recepcin REN debe ponerse a cero. Este bit puede considerarse como el switch de la recepcin independientemente de la habilitacin de la interrupcin del puerto serial el cual se configura en el registro IE. El Campo SM2 habilita la caracterstica de comunicacin multiprocesador en los modos 2 y 3. En el modo 2 o 3, si SM2=1 entonces RI no ser activado (puesto a 1 para generar la interrupcin del puerto serial) si el noveno bit recibido (RB8) es 0. En el modo 1 , si SM2=1entonces RI no ser activado si un bit de stop valido no ha sido recibido. En el modo 0, SM2 debe ser cero. Por ltimo, los campos SM0 y SM1 se utilizan para especificar el modo de operacin del puerto serial, esto es, selecciona el modo 0, 1, 2 o 3 de funcionamiento.

Configuracin de velocidades de transmisin (baud rate) Dependiendo del modo de operacin del puerto serial existen varias opciones de configuracin para las velocidades de transmisin. La velocidad de transmisin en el modo 0 es fija a 1/12 de la frecuencia del oscilador. La velocidad de transmisin en el modo 2 depende del valor del bit SMOD en el registro PCON. Si SMOD=0 entonces la velocidad de transmisin es de 1/64 de la frecuencia del oscilador; si SMOD=1 entonces la velocidad de transmisin es de 1/32 de la frecuencia del oscilador. Para el modo 2, la ecuacin 1 determina la velocidad de transmisin del puerto serial.
baud rate = 2 SMOD frecuencia 64 del oscilador
Ec. 1

Las velocidades de transmisin para los modos 1 y 3 son determinados por la velocidad de sobreflujo del timer 1 y por el bit SMOD del registro PCON. La ecuacin 2 determina la velocidad de transmisin del puerto serial
baud rate = 2 SMOD frecuencia 32 de sobreflujo timer 1
Ec. 2

El timer 1 debe ser deshabilitado para esta aplicacin. El timer por si mismo puede ser configurado como timer o contador y en cualquiera de sus tres modos de operacin. En la mayora de la aplicaciones, el timer se configura en el modo de auto recarga (modo 2 de operacin como timer). En este caso, la velocidad de transmisin est dada por la ecuacin 3.
baud rate = 2 SMOD frecuencia del oscilador 32 12 [ 256 ( TH 1) ]
Ec. 3

29

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

La ecuacin 3 muestra como determinar la velocidad de transmisin; pero en ocasiones en mas til despejar a TH1 para saber cual debe ser el valor de recarga para una velocidad determinada. La ecuacin 4 muestra el despeje de TH1 para generar una velocidad de transmisin determinada en los modos 1 y 3 del puerto serial.
2 SMOD frecuencia del oscilador TH 1 = 256 384 baud rate
Ec. 4

Tambin se pueden generar velocidades de transmisin muy bajas habilitando la interrupcin del timer 1 y configurando el timer para funcionar en el modo de 16 bits (modo 1). Al generarse la interrupcin del timer 1 se manipula al puerto serial y as se tiene un generador de velocidades de transmisin con recargas de 16 bits. En la tabla 11 se muestran las formas de generar velocidades de transmisin comunes as como las configuraciones que deben tener lo bits de control y registros que intervienen para este fin.
Tabla 11.- configuraciones de bits y registros para velocidades de transmisin serial comunes

Aunque el registro PCON es utilizado en la comunicacin serial, su funcin es ms para controlar la energa que utiliza el microcontrolador. Como se muestra en la figura 25, solo 1 de los 5 campos del registro PCON es utilizado en la comunicacin serial. Por lo tanto se har la descripcin de este registro en esta seccin.

30

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Figura 25.- Registro PCON

El campo SMOD como ya se vio anteriormente, se utiliza para determinar la velocidad de transmisin del puerto serial. El campo IDL se utiliza para poner el microcontrolador en un modo que se puede denominar como ocioso. Si IDL=0 entonces el funcionamiento del microcontrolador es normal; si IDL=1 el microcontrolador entra en modo ocioso. En este modo de funcionamiento, el reloj interno es desconectado de casi todos los circuitos internos con lo que no se seguirn ejecutando instrucciones de la memoria de programa. Sin embargo, las funciones de los timers, interrupciones y puerto serial siguen funcionando. Tambin, el contenido de la memoria RAM interna lo cual incluye a los SFRs se mantiene intacta. La forma de salir del modo ocioso es de dos formas: al generarse una interrupcin o al generarse un reset. El campo PD se utiliza para poner al microcontrolador en el modo de bajo consumo. Si PD=0, el microcontrolador funciona en forma normal; si PD=1 entonces el microcontrolador entra en el modo de bajo consumo de energa. A diferencia del modo ocioso, el modo de bajo consumo detiene las interrupciones, los timers y el puerto serial. Todo el contenido de la memoria RAM interna incluyendo los SFRs se mantienen intactos. La nica forma de salir de este modo es generando un pulso de reset. Los campos GF0 y GF0 son banderas de propsito general y el usuario puede utilizarlos segn sea su conveniencia. Como comentario final del registro PCOM si los campos PD y IDL son puestos al mismo tiempo PD toma precedencia. Para los bits 6 al 4 se debe procurar no fijarlos a uno. Un Reset los coloca a cero.

BIBLIOGRAFA Este documento est basado en el Data HandBook IC20 de Phillips de los microcontroladores basados en el 80C51.

31

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

COMO PROGRAMAR A LA FAMILIA 80C51 Se debe recordar que la familia 80C51 es una especie de subconjunto de los microprocesadores x86; con ello, es de esperarse que la mayor parte de las instrucciones as como la forma en que operan sea muy similar a la familia x86. Lo que hay que aprender es cmo hacer la distribucin de nuestro programa dentro de la memoria de programa; esto depende del compilador a utilizar. Se utilizar el ensamblador de Avocet Systems el cual provee un ensamblador y un linker e incluso un simulador. Para poder generar un programa que el microcontrolador entienda desde la E/EPROM se realizan dos pasos en particular: a) Traducir los nemonicos a lenguaje de maquina.
32

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

b) Colocar el programa en lenguaje de maquina dentro de un frame o marco de datos adicionales para su transferencia a la memoria ROM de programa. a) Ensamblar el programa: El cdigo fuente escrito en nemonicos debe estar en un archivo con extensin .asm. Este archivo debe editarse en algn editor de tipo ASCII, cualquiera que ste sea. Una vez editado el programa se debe escribir en la lnea de comandos desde la carpeta donde se encuentre el programa ensamblador de la siguiente forma: < ruta >\ avmac51 < archivo.asm > Este comando crear un archivo .obj el cual es la traduccin de los nemonicos a cdigo de maquina y tiene el mismo nombre que el archivo .asm. Cabe mencionar que puede omitirse la extensin del archivo .asm a la hora de compilar el programa. El ensamblador tiene la capacidad de detectar errores de sintaxis por lo que si existe alguno, no se generar el archivo .obj hasta que el error halla sido corregido. b) Linkear el programa: Este proceso significa colocarle al archivo .obj un frame o marco de datos que se utilizan para la transmisin de los mismos desde el programador que es el que se encarga de grabar el programa en la memoria E/EPROM hasta sta ltima. Este frame tiene informacin a cerca de la direccin a partir de la cual se inicia la grabacin del programa, datos para deteccin de errores, informacin de nmero de bytes a grabar y otros datos que por el momento no nos detendremos a estudiar. El frame utilizado depende del microcontrolador a utilizar. Intel utiliza un frame distinto a motorota o Texas Instruments. La familia 80C51 al ser creada por Intel, utiliza un frame especfico para microprocesadores y microcontroladores Intel. El programa linkeador genera entre otros, un archivo con extensin .hex. Este archivo es el que se cargar posteriormente en el software del programador y es el que se grabar en la memoria E/EPROM. El nombre del archivo .hex normalmente es el mismo del archivo .obj a partir del cual se crea y del .asm a partir del cual se genera el .obj aunque si se desea se pueden generar archivos con distintos nombres. Para generar el archivo .hex se debe escribir en la lnea de comandos lo siguiente: < ruta >\ avlink < archivo.abj=archivo.hex > Se puede omitir la extensin de los archivos de tal forma que puede queda <archivo=archivo>. Una vez realizado esto, el archivo generado .hex es el que se debe cargar hacia la memoria E/EPROM mediante algn programador de memorias. DIRECTIVAS DEL ENSAMBLADOR AVMAC51 Las directivas son una especie de palabras reservadas que utiliza el ensamblador para saber como debe ensamblarse el programa. A continuacin se presentan algunas de esas directivas.
33

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

DEFSEG: Esta directiva sirve para definir el nombre de algn segmento de programa que se utilizar dentro del mismo. Se puede tomar la equivalencia en C o C++ al prototipo de una funcin. Esta directiva se utiliza en conjunto con la directiva START. Por ejemplo: DEFSEG RST, START=0H Lo anterior indica al ensamblador que existir un segmento llamado RST. START: Le indica a la directiva DEFSEG en que direccin de memoria de programa debe colocar el segmento definido por DEFSEG. Por ejemplo: DEFSEG RST, START=0H Lo anterior indica que el segmento denominado RST debe iniciar (debe colocarse) en la direccin de memoria de programa 00H. EQU: Se utiliza para asignar valores numricos a etiquetas. Por ejemplo: PUERTO: EQU 20 Lo anterior significa que cada vez que el ensamblador encuentre la palabra (o cadena) PUERTO debe ser tomado como un nmero 20. En el sentido estricto, se estara asignando el numero a la cadena PUERTO. El uso de la etiqueta PUERTO puede variar. En ocasiones puede usarse como una mera constante o bien, se puede utilizar como una variable. Por ejemplo la instruccin: MOV A,#PUERTO Esta instruccin hace que en el registro A tenga un valor 20 ya que PUERTO mediante la directiva EQU tom ese valor y se est utilizando direccionando inmediato. Ahora veamos las siguientes dos instrucciones: MOV A,PUERTO MOV PUERTO,#A En las instrucciones anteriores, puerto en realidad estara funcionando como una variable. Si recordamos el concepto de variable de C o C++, sta es una localidad de memoria a la cual se la ha asignado una identificador (nombre). Estas variables pueden ser de tipo entero, real o carcter. Entonces en el caso de la primera instruccin, se estara moviendo el contenido de PUERTO que en este caso es tomado como una direccin y colocado en el registro A. La segunda instruccin seria lo contrario, el contenido de A es colocado en PUERTO. Ntese que al usar direccionamiento directo, PUERTO se utiliza para guardar o extraer datos de la localidad 20 de memoria de datos. Por ello es que se dice que en este caso PUERTO puede ser utilizado como un identificador (variable) con la limitante que seria el equivalente a una variable entera o de carcter de C o C++

34

Universidad Autnoma del estado de Mxico Arquitectura bsica de microcontroladores basados en el 80C51

Es obvio que con las dems formas de direccionamiento, PUERTO tendr otras connotaciones. La facilidad de uso del direccionamiento directo hace que podamos asignar nombres a posiciones de memoria de datos lo cual es ampliamente utilizado en lenguaje ensamblador para no tener que estar aprendindose las direcciones de los datos utilizados en el programa. Es mas fcil aprenderse un nombre de una posicin de memoria que su direccin misma. SEG: Indica el inicio de un segmento previamente definido por la directiva DEFSEG. Por ejemplo:
SEG RST CICLO: MOV P1,#01 ACALL DELAY MOV P1,#02 ACALL DELAY

En el listado anterior todas las instrucciones y etiquetas despus de la directiva SEG RST pertenecern al segmento RST hasta que no se encuentre otra directiva SEG que indique el inicio de otro segmento. El equivalente de C o C++ sera escribir el cuerpo de una funcin la cual ya ha sido definida como prototipo al inicio del programa (en ensamblador con la directiva DEFSEG). DB: END: ORG:

35

Vous aimerez peut-être aussi