La Familia MCS51 Modulo I.

29
1.7 Introducción a la Familia de Microcontroladores MCS-51 1.7.1 Breve reseña histórica INTEL fue la compañía que desarrolló el primer microprocesador en el mundo, el 4004 en el año 1971. Este microprocesador, con solo 2300 transistores, fue el origen de una gran cantidad de dispositivos que se desarrollaron posteriormente, los cuales integran actualmente más de un millón de transistores en un encapsulado. Tampoco podemos olvidar el hecho que INTEL ha desarrollado microprocesadores tan exitosos como el 8086, el 80286, el 80386, el 80486 y más recientemente el Pentium; INTEL es, hoy por hoy, uno de los mayores productores de microprocesadores en el mundo, con un mercado tan amplio como codiciado, ya que millones de computadores PC tienen instalado un microprocesador con su marca. INTEL también fabrica microcontroladores de 8 y de 16 bits; cada uno de ellos tiene amplias posibilidades de utilización y prestaciones que los hacen adecuados para gran cantidad de aplicaciones. Los microcontroladores INTEL han tenido una gran aceptación, hasta el punto que otros fabricantes han optado por producir sus propias versiones de estos dispositivos, como es el caso de SIEMENS, ATMEL, y PHILIPS. Estos microcontroladores son la parte inteligente en una gran cantidad de sistemas como: Control de procesos automáticos, de máquinas herramientas, aparatos de maniobra, de posición, de velocidad, etcétera. Sistemas de alarma de todo tipo: indicadores y control de nivel, regulación de caudal, apertura automática de dispositivos, etcétera. Controladores de periféricos como impresoras, modems, teclados, unidades de disco, plotters, etcétera. Equipos de sonido y televisores donde son tratadas las señales de audio y video. Sistemas industriales para el conteo de elementos, la generación de bases de tiempo, etcétera. Dentro de los microcontroladores de 8 bits existen dos generaciones: la primera es la constituida por la familia MSC-48 la cual dio origen a las demás familias; mientras que la segunda es la conformada por la familia MCS-51 la primera generación aún está disponible, aunque es un poco más limitada en cuanto a capacidades que la segunda.

description

programación de microcontrolador intel

Transcript of La Familia MCS51 Modulo I.

1.7 Introducción a la Familia de Microcontroladores MCS-51

1.7.1 Breve reseña histórica INTEL fue la compañía que desarrolló el primer microprocesador en el

mundo, el 4004 en el año 1971. Este microprocesador, con solo 2300 transistores, fue el origen de una gran cantidad de dispositivos que se desarrollaron posteriormente, los cuales integran actualmente más de un millón de transistores en un encapsulado. Tampoco podemos olvidar el hecho que INTEL ha desarrollado microprocesadores tan exitosos como el 8086, el 80286, el 80386, el 80486 y más recientemente el Pentium; INTEL es, hoy por hoy, uno de los mayores productores de microprocesadores en el mundo, con un mercado tan amplio como codiciado, ya que millones de computadores PC tienen instalado un microprocesador con su marca.

INTEL también fabrica microcontroladores de 8 y de 16 bits; cada uno de

ellos tiene amplias posibilidades de utilización y prestaciones que los hacen adecuados para gran cantidad de aplicaciones. Los microcontroladores INTEL han tenido una gran aceptación, hasta el punto que otros fabricantes han optado por producir sus propias versiones de estos dispositivos, como es el caso de SIEMENS, ATMEL, y PHILIPS. Estos microcontroladores son la parte inteligente en una gran cantidad de sistemas como:

Control de procesos automáticos, de máquinas herramientas, aparatos de maniobra, de posición, de velocidad, etcétera.

Sistemas de alarma de todo tipo: indicadores y control de nivel, regulación de caudal, apertura automática de dispositivos, etcétera.

Controladores de periféricos como impresoras, modems, teclados, unidades de disco, plotters, etcétera.

Equipos de sonido y televisores donde son tratadas las señales de audio y video.

Sistemas industriales para el conteo de elementos, la generación de bases de tiempo, etcétera.

Dentro de los microcontroladores de 8 bits existen dos generaciones: la

primera es la constituida por la familia MSC-48 la cual dio origen a las demás familias; mientras que la segunda es la conformada por la familia MCS-51 la primera generación aún está disponible, aunque es un poco más limitada en cuanto a capacidades que la segunda.

1.7.2 La familia MCS-51 Los miembros más populares de los microcontroladores de la familia MCS-51

son: los 8XX1, y más concretamente, los 8X51. Las diferencias entre estos dos miembros se muestran en la tabla Tab.1.7.A. Como se puede observar, existen tres versiones para cada uno: una versión sin ROM, cuyo prefijo es 80 y sufijo 31; y versiones con ROM, con sufijo 51; la versión EPROM tiene el prefijo 87. Existe un miembro un poco más completo de esta familia, el cual cambia el número 1 por el 2 y posee mayor capacidad de ROM, de RAM y de temporizadores/contadores.

Tab.1.7.A. Miembros de la familia MCS-51

SIN ROM CON ROM CON EPROM

ROM BYTES

RAM BYTES

TIMERS 16 BITS

INTERRUPCIONES

8031 8051 8751 4K 128 2 5

8032 8052 8752 8K 256 3 6

1.7.3 Características de los microcontroladores 8X51 La arquitectura básica de esta familia de microcontroladores se muestra en la

figura Fig.1.7.A. Fig.1.7.A Configuración básica de la familia MCS-51

Control deInterrupciones

CPU

Oscilador

0 V

0 V0 V

0 V

ROM128 Bytes

RAM

Bus deControl

4 Puertos I/O

256 Bytes en el

8052

Timer 0

Timer 0

Timer 0

Entradasdel Contador

Direcciones / Datos

P0 P1 P2 P3

Puerto Serial

TxD RxD

Sus características más importantes son:

CPU de 8 bits, optimizado para aplicaciones de control.

Procesador Booleano (operación sobre bits).

Espacio de memoria de programas de 64 KBytes.

Espacio de memoria de datos de 64 KBytes.

4 Kbytes de memoria interna de programa.

128 bytes de memoria RAM interna.

32 líneas de entrada salida, direccionables bit a bit.

2 temporizadores/contadores de 16 bits.

Comunicación asíncrona full duplex.

5 fuentes de interrupción.

Oscilador interno. 1.7.4 Organización de la memoria Todos los dispositivos de la familia MCS-51 tienen separados los espacios de

direcciones de datos y de programas, como se muestra en la figura Fig.1.7.B. La separación lógica de ambas memorias permite que a través de la memoria de datos se acceda a direcciones de 8 bits, lo cual permite que los datos puedan ser manipulados y almacenados más rápidamente por las CPU de 8 bits.

Fig.1.7.B Organización de las memorias de Datos y Programa

EA = 0

EXTERNA

INTERNA

EA = 1

0000

0FFFh

1FFFh

8051

8052

EXTERNA

FFFFh

PSEN

MEMORIA DE PROGRAMA (SOLO DE LECTURA)

SFR

00

7Fh

FFh

8051

8052

EXTERNA

00

FFFFh

MEMORIA DE DATOS (LECTURA / ESCRITURA)

RD WR

La Memoria de Programa solamente puede ser leída, no escrita, se pueden acceder hasta 64 Bytes en las versiones ROM y EPROM los más bajos 4 KBytes u 8 KBytes están dentro del chip, dependiendo del tipo de dispositivo. En la versión sin ROM, toda la memoria de programa es externa. La sincronización de la lectura para la memoria de programa externa es la señal PSEN (Program Store Enable).

La memoria externa de datos puede ser direccionada hasta 64 KBytes y

puede ser escrita o leída, para lo cual la CPU genera las señales WR y RD, respectivamente.

Las memorias externas de datos y de programa pueden coexistir, si se

desea, aplicando las señales RD y PSEN a las entradas de una compuerta AND y utilizando la salida de la compuerta como señal de sincronización a la memoria externa de Programa/Datos.

1.7.5 Memoria de programa La Memoria de Programa puede ser una combinación de interna y externa o

totalmente externa. En cualquiera de los dos casos anteriores, en la parte baja de la memoria de programas se encuentra una serie de posiciones de memoria, especiales para el tratamiento de las interrupciones.

Una interrupción se describe como una señal que genera un dispositivo, para

indicarle a la CPU que se requiere su atención. Las interrupciones nacen de la necesidad de ejecutar un proceso en un instante preciso y ante la existencia de varias, pueden crearse prioridades entre ellas, de tal forma que una interrupción de baja prioridad puede ser interrumpida por una de más alta, pero no se presenta el proceso inverso

Las CPU atiende la interrupción mediante una rutina especial, realizada en el

programa, la cual es llamada rutina de servicio; una vez que la interrupción es atendida, la CPU regresa al punto en el cual había suspendido sus labores, figura Fig.1.7.C este proceso se lleva a cabo con la ayuda de la memoria RAM interna, en la cual se almacena provisionalmente la posición de la instrucción que estaba por ejecutarse antes del llamado de interrupción.

Como pueden existir un buen número de interrupciones, generadas por

diferentes condiciones de los dispositivos, cada una de ellas debe tener su propia rutina de servicio localizada en una posición específica de la memoria de programa. Las interrupciones pueden ser internas o externas, dependiendo de si la fuente que lo origina estar dentro del microcontrolador o por fuera de este.

Como se muestra en la figura Fig.1.7.D, a cada interrupción se le asigna una

dirección fija de la memoria de programa. La interrupción hace que la CPU salte a esta localidad, donde comienza la ejecución de una rutina de servicio. La posición 0003H, por ejemplo, está asociada a la interrupción Externa 0 si la interrupción externa va a ser utilizada, la rutina de servicio debe empezar en esta dirección. Si

la rutina no se utiliza, la posición de memoria puede ser empleada como memoria de programa

Fig.1.7.C Esquema de una interrupción

Las rutinas de servicio de las interrupciones están separadas por intervalos

de 8 bytes; si éstas no son lo suficientemente cortas, las rutinas pueden utilizar instrucciones de salto a una zona más amplia de la memoria de programas, con capacidad para contener el tratamiento completo a la interrupción.

Como se ha indicado, la parte baja de la memoria de programa puede ser de

4 KBytes u 8 KBytes, la cual se puede seleccionar dentro de la memoria interna o la externa. La selección se puede realizar mediante la conmutación del pin EA (External Access) a Vcc o Gnd; si este pin se conecta a Vcc, la parte baja se buscará en la memoria interna del microcontrolador; si se conecta a Gnd, lo hará en la memoria externa; en ambos casos, la parte superior de la memoria de programas (60 KBytes o 56 KBytes) se buscará en la memoria externa. En los dispositivos sin ROM, este pin debe conectarse a Gnd para que el programa se ejecute apropiadamente. Una señal de lectura de la ROM externa, PSEN (Program Store Enable), se utiliza para todas las búsquedas de memoria externa y no es activada en ningún caso para búsquedas en la memoria interna.

(2) VECTOR DE

INTERRUPCION

PROGRAMA PRINCIPAL

(3) RUTINA DE SERVICIO

DE INTERRUPCIÓN

RTI

(1)

INT

ER

RU

PC

ION

(4)

RE

TO

RN

O D

E

INT

ER

RU

PCIO

N

Fig.1.7.D Vectores de Interrupción en la memoria de programa

En la figura Fig.1.7.E se muestra la configuración a utilizar para la ejecución del programa de memoria externa. Se puede observar que 16 líneas de I/O (puertos P0 y P2) son dedicados a las funciones de bus durante la ejecución de la memoria externa. El puerto P0 es multiplexado en el tiempo como bus de direcciones y de datos. Este emite la parte baja del contador de programas (PCL) como una dirección y luego pasa un estado flotante, esperando la llegada del código proveniente de la memoria de programas.

Fig.1.7.E Configuración del MCS-51 con memoria externa de Programa

Durante el tiempo en el cual el byte bajo del contador de programas es

estable en P0, la señal ALE (Address Latch Enable) fija este byte en el cerrojo de direcciones. Mientras tanto, el puerto P2 emite la parte alta del contador de programas (PCH). Finalmente, se emite el pulso de sincronización PSEN y el código es leído por el microcontrolador. El direccionamiento de programas es siempre de 16 bits de ancho, aunque el total disponible de memoria de programas

0000h

0003hInterrupción Externa 0

000Bh

0013h

001Bh

0023h

002Bh

Timer 0

Timer 1

Interrupción Externa 1

Timer 2

Puerto Serial

0FFFh

P1

P3

MCS-51

LATCH0 V

P0

EA

ALE

P2

PSEN

ROM EXTERNA

INSTR

ADDR

OE

sea menor a esta cantidad. La ejecución de programas externos sacrifica dos de los cuatro puertos de 8 bits, P0 y P2, para dirección a la memoria de programas.

Las secuencias de búsqueda y ejecución de las instrucciones no dependen

de la utilización de la memoria interna o externa lo que quiere decir que, en ambos casos, los tiempos de ejecución serán los mismos.

1.7.6 Ciclo de máquina En esta familia de microcontroladores, un ciclo de máquina consiste en una

secuencia de seis estados, numerados desde S1 hasta S6. Cada estado está formado por dos períodos de la señal del reloj, y se denominan fases, P1 y P2; por lo tanto, un ciclo de máquina, toma 12 periodos de reloj, (figura Fig.1.7.F). Si la frecuencia de reloj es de 12 MHz, el ciclo máquina tendrá una duración de un microsegundo.

Fig.1.7.F Ciclo de máquina

1.7.7 Memoria de datos La familia MCS-51 puede acceder hasta 64 Kbytes de memoria externa de

datos. La figura Fig.1.7.G muestra la configuración para utilizar hasta dos KBytes de memoria externa.

En este caso, la ejecución se está realizando desde la ROM interna. De

nuevo, el puerto P0 está siendo multiplexado como bus de direcciones y datos de la RAM, y tres líneas del puerto P2 se utilizan para paginarla. La CPU genera la señales RD y WR necesarias durante el acceso de la RAM externa. El direccionamiento de la memoria externa puede ser de uno o dos bytes de ancho. El direccionamiento de un byte se logra por el puerto P0, en conjunto con una o más líneas de I/O para paginar la RAM, como se muestra en la figura Fig.1.7.G. También se puede utilizar el direccionamiento de dos bytes, en cuyo caso el byte alto de la dirección es emitido por el puerto P2.

P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2

S1 S2 S4S3 S5 S6

CICLO DE MAQUINA

Fig.1.7.G Configuración del MCS-51 con memoria externa de Datos

El mapa de memoria interna se puede observar en la figura Fig.1.7.H. El

espacio de memoria se muestra dividido en tres bloques, los cuales son llamados por lo general como los 128 bajos, los 128 altos y el espacio de los SFR (Special Function Registers) o Registros de Propósito Especial.

Fig.1.7.H Memoria de Datos Interna

El direccionamiento de la memoria es siempre de un byte de ancho, lo que implica que el espacio de direcciones es de solamente 256 bytes. Sin embargo, los modos de direccionamiento pueden de hecho acomodar 384 bytes, usando dos diferentes modos de direccionamiento de las instrucciones. El direccionamiento directo más alto que 7FH utiliza un espacio de memoria, mientras que un direccionamiento indirecto más alto que 7FH accede a un espacio diferente de memoria. Debido a esto, la figura Fig.1.7.H muestra los 128 bytes altos y el espacio de los SFR compartiendo el mismo bloque de direcciones 80H hasta FFH, aunque ellos son físicamente entidades separadas. Se de aclarar que el área de direccionamiento sólo indirecto (posiciones de RAM 80H a FFH) está

P1

P3

MCS-51

LATCH

P0

EA

ALE

P2

RAM EXTERNA

DATOS

ADDR

WE OEWR

RD

I/O Bits de Página

+5V

ACCESIBLE SOLAMENTE

MEDIANTE

DIRECCIONAMIENTO

INDIRECTO

ACCESIBLE MEDIANTE

DIRECCIONAMIENTO

DIRECTO E INDIRECTO

ACCESIBLE MEDIANTE

DIRECCIONAMIENTO

DIRECTO

Registros de Propósito

Especia:l

Puertos

Bits de Estado

y de Control

Timers

Registros

Puntero de Pila

Acumulador

00h

7Fh80h

FFh

presente únicamente en los microcontroladores 8XX2. Los 128 bytes bajos están presentes en todos los dispositivos MCS-51 y su

mapa se encuentra en la figura Fig.1.7.I. Como se puede observar, se ha dividido en tres segmentos principales:

Fig.1.7.I Los 128 bytes bajos de RAM interna

1.7.7.1 Banco de registros Los 32 bytes más bajos (00H a1FH) se agrupan en cuatro bancos de 8

registros. Las instrucciones del programa llaman a estos registros R0 hasta R7. Dos bits en la palabra de estado (PSW) seleccionan cual banco de registros está en uso. Esto permite un uso más eficiente del espacio de código, así como instrucciones que involucran registros, más cortas que aquellas que utilizan

direccionamiento indirecto. Por defecto cuando se aplica un RESET al microcontrolador, el banco en uso es el 0.

1.7.7.2 Areas direccionables bit a bit Los 16 bytes siguientes (20H a 2FH), conforman un bloque en el que se

puede direccionar directamente bit por bit. El conjunto de instrucciones de los MCS-51 incluyen una amplia variedad de instrucciones orientadas hacia bits, y los 128 bits de esta área se pueden manejar directamente por estas. Las direcciones de los bits de esta área van desde 00H hasta7FH.

1.7.7.3 Área de RAM del usuario Las posiciones restantes de la memoria RAM interna (30H al 7FH)

conforman la RAM de trabajo del usuario o Scratch Pad. La tabla Tab.1.7.B muestra la disposición de los registros de propósito

especial o SFR (Special Function Registers), los cuales se pueden acceder solamente por direccionamiento directo. Aquellos registros que se encuentran en la columna izquierda de la tabla también son direccionables bit a bit. Los registros encerrados entre paréntesis existen en los 8XX2, y no en los 8XX1. Véase que no todas las direcciones están ocupadas; las direcciones desocupadas no están implementadas en el integrado. Al realizar lecturas en estas direcciones se obtendrán datos aleatorios, mientras que escribir en ellas no tendrán efecto alguno. Estas posiciones se reservan para futuros productos MCS-51, que poseerán nuevas características.

Tab.1.7.B Área de Registros de Propósito Especial SFR

F8 FF

F0 B F7

E8 EF

E0 ACC E7

D8 DF

D0 PSW D7

C8 (T2CON) (RCAP2L) (RCAP2H) (TL2) (TH2) CF

C0 C7

B8 IP BF

B0 P3 B7

A8 IE AF

A0 P2 A7

98 SCON SBUF 9F

90 P1 97

88 TCON TMOD TL0 TL1 TH0 TH1 8F

80 P0 SP DPL DPH PCON 87

La función de cada uno de los registros de propósito especial se describe a continuación

1.7.7.3.1 Registros direccionables bit a bit

ACC. Es el registro acumulador, sobre el cual se realizan las operaciones lógicas, aritméticas, de transferencia, etcétera.

B. Se usa durante operaciones de multiplicación y división. Para

otras instrucciones, este puede ser tratado como cualquier otro registro del Scratch Pad.

PSW. Program Status Word o Palabra de Estados del Programa.

Contiene información del estado del programa y las banderas que son afectadas como resultados de operaciones.

P0, P1, P2, y P3. Puertos 0 a 3 son los cerrojos de los puertos 0,1,2 y 3

respectivamente. IE. Interrupt Enable o Habilitador de Interrupciones. Permite que se

atiendan las interrupciones que el usuario considere convenientes.

IP. Interrupt Priority o Prioridad de Interrupciones. Cada interrupción

puede programarse con un grado de prioridad, de tal manera que una interrupción con alta prioridad no pueda ser interrumpida por otra de prioridad más baja, pero si se presenta el efecto inverso.

SCON. Serial Port Control o Control del Puerto Serial. Establece los

parámetros para la transmisión o recepción de datos a través del puertos serial (ancho del dato, bits de inicio y parada, velocidad, etcétera.)

TCON. Timer/Counter Control o Control de Temporizador/Contador.

Controla dos modos de operación de los temporizadores y maneja las interrupciones asociadas, así como los bancos de activación.

1.7.7.3.2 Registros no direccionables bits a bit

SBUF. Serial Buffer o Buffer Serial de datos. Son dos registros que se utilizan para la transmisión y recepción de datos a través del puerto serial.

TMOD. Timer/Counter Mode Control o Control de Modo de Temporizador/Contador. Selecciona los modos de operación de los timers, si actúan como temporizadores o como contadores, etcétera.

SP. Stack Pointer o Puntero de Pila. Este se incrementa antes que

un dato sea almacenado a causa de una instrucción PUSH o CALL. La pila es un área de la memoria RAM, que se utiliza para almacenar temporalmente información básica del programa, antes de atender una interrupción la pila puede residir en cualquier sitio de la memoria RAM pero el puntero se inicializa después del RESET con 07H. Esto ocasiona que la pila se inicie en la dirección 08H.

DPTR. Data Pointer o Puntero de Datos. Está constituido por una arte

alta (DPH) y una parte baja (DPL) y contiene una dirección de 16 bits. Se puede manejar como un registro de 16 bits o como dos registros independientes de 8 bits.

T0 y T1. Timers o Temporizadores. Son registros de 16 bits que pueden

actuar como temporizadores o contadores e incluyen dos registros de 8 bits TH0, TL0, TH1 y TL1.

PCON. Power Control o Control de Poder. Posee un bit que cambia la

velocidad de comunicación serial y en versiones CHMOS de esta familia, puede modificar el régimen de trabajo del microcontrolador, reduciendo el consumo de energía.

1.7.7.3.3 Registros exclusivos de los microcontroladores 8XX2

T2CON. Lo mismo queTMOD yTCON, pero aplicado al timer adicional que posee esta versión de microcontrolador.

RCAP2. Capture Register o Registros de Captura. Incluye dos registros

de 8 bits (RCAP2H y PCAP2L) que trabajan en conjunto con el TIMER2.

TH2. La misma función de T0 y T1 descritos anteriormente.

En la figura Fig.1.7.J se tiene una estructura más detallada de la familia de

microcontroladores MCS-51. Se pueden observar, además de los bloques y los buses, los pines de conexión. Estos pines se muestran en la figura Fig.1.7.K y corresponden uno a uno con la figura anterior. La siguiente es la descripción de estos pines:

Fig.1.7.J Estructura interna del microcontrolador 8051

Vcc. Es la alimentación del integrado y se debe conectar por tanto a +5

voltios dc. Aunque la familia Atmel permite una rango de alimentación entre +2volt a +6 volt.

Gnd. Tierra o referencia del circuito. ALE/PROG. Address Latch Enable o Habilitador del Cerrojo de

Direcciones. Por este pin se emite la señal para enclavar el byte bajo de las direcciones, cuando se accede a la memoria externa. También es la entrada de los puntos de programación de la memoria EPROM

Direcciones/Datos

Direcciones/Datos

Fig.1.7.K Configuración de pines del microcontrolador 8051

PSEN. Program Store Enable o Habilitador de Almacenado de Programa. Es la señal de sincronización para leer la memoria externa del programa. PSEN sólo se origina cuando se lee la memoria externa.

EA/VPP. External Address o Dirección Externa. Cuando se mantiene en

un nivel lógico alto, sólo se ejecuta el programa de la memoria interna, a menos que contador de programa exceda de 0FFFH para los 8X51 o 1FFFH para los 8X52. Si este pin se mantiene a un nivel bajo, el programa que se ejecuta es el de la memoria externa, independientemente de la dirección del programa durante la programación de la memoria PROM, este pin recibe un voltaje que oscila entre 5 voltios y la tensión de programación.

XTAL1 y XTAL2. Entrada y salida del oscilador, respectivamente se

puede utilizar un cristal de cuarzo un resonador cerámico. RESET. Entrada para la reinicialización del sistema. El RESET se

produce cuando se coloca este pin a un nivel alto, por lo menos durante dos ciclos de máquina.

Puertos. Todos son bidireccionables de 8 bits. Cuando se escribe “1” a

los pines, estos se pueden usar como entradas de alta impedancia. Como salida, cada pin del puerto P0 puede manejar 8 cargas TTL-LS, el resto de los puertos puede manejar sólo cuatro cargas TTL-LS. Estos puertos también pueden actuar de la siguiente manera:

Puerto 0 (P0. ) Es multiplexado como la parte de baja de la dirección y del bus de datos durante el acceso a la memoria externa. Además, emite los códigos durante la programación de la EPROM y los recibe en la verificación del programa.

Puerto 1 (P1). Durante la programación y verificación de la EPROM

recibe la parte baja de las direcciones. Dos bits más bajos tienen una función adicional en los 8 XX2:

P1.0:T2 Timer2 o Temporizador2. Entrada externa para este

temporizador/contador (solamente en los 8XX2). P1.1:T2EX. Captura y recarga de disparo para el Timer2. Puerto 2 (P2). Emite la parte alta de las direcciones durante el acceso

externo de memoria y cuando el acceso de datos tiene 16 bits; asimismo durante la programación y verificación de la EPROM.

Puerto 3 (P3). Este tiene funciones alternas especiales bien

determinadas, tales como:

P3.0:RXD. Entrada del puerto serial.

P3.1:TXD. Salida del puerto serial.

P3.2:INT0. Entrada de la interrupción externa 0.

P3.3:INT1. Entrada de la interrupción externa 1.

P3.4:T0. Entrada externa del temporizador/contador 0.

P3.5:T1. Entrada externa del temporizador/contador 1. P3.6:WR. Señal de escritura para elementos externos. P3.7:RD. Señal de lectura para elementos externos.

1.7.8 Temporizadores / Contadores Un timer trabaja como temporizador cuando incrementa o decrementa su

cuenta con base en los impulsos recibidos por reloj de instrucción del equipo. Lo hará como contador, cuando su cuenta cambia ante la variación de una condición externa al dispositivo. Los dos estados son excluyentes y pueden ser programados por el usuario con varias opciones de operación y activación.

Si se ha de usar el puerto serial, uno de los timers debe proveer la base de tiempo requerida para la comunicación serial asíncrona.

1.7.9 Comunicaciones En puerto serie trabaja el modo full duplex, lo que significa que puede

transmitir y recibir datos simultáneamente. La familiaMCS-51 posee cuatro modos de comunicación, dentro de los cuales se encuentran sincrónicos y asíncronicos, con velocidades variables por usuario.

En estos modos de comunicación no solamente le permiten dialogar con

otros microcontroladores de la misma familia, sino con la de otros fabricantes, con memoria seriales e incluso con computadores personales tipo PC.

1.7.10 Microcontrolador 8051 Todos los miembros de la familia MCS-51 ejecutan del mismo conjunto de

instrucciones, las cuales están orientadas hacia aplicaciones de 8 bits. Estas instrucciones disponen de una amplia variedad de modos de direccionamiento para acceder a la RAM interna, facilitando las operaciones de byte sobre una pequeña estructura de datos. También, estas permiten la manipulación directa de bits para sistemas lógicos y de control que requieran procesamiento Booleano.

1.7.10.1 Modos de direccionamiento Los modos de direccionamiento son las formas en las cuales se puede

acceder a la información existente, bien sea dentro de la RAM interna, la externa, la zona de registros de propósito especial o la ROM de programa. Existen varias clases de direccionamiento:

1.7.10.1.1 Direccionamiento inmediato El operando fuente es un valor constante que sigue al operando destino. El

símbolo # indica este tipo de direccionamiento. Ejemplo:

MOV SP,#34H ;carga al puntero de pila con el número hexadecimal 34) ANL A,#101B ;realiza operación AND entre el acumulador y el binario 101

1.7.10.1.2 Direccionamiento directo. El operando se localiza por un campo de dirección de 8 bits; sólo la RAM

interna y las zona de los registros de propósito especial (SFR) pueden ser direcciónados directamente.

Ejemplo:

MOV SP,34H ;carga al puntero de pila con lo existente en la posición ;hexadecimal 34 de la RAM interna

1.7.10.1.3 Direccionamiento indirecto La instrucción especifica un registro que contiene la dirección del operando;

ambas memorias (RAM y ROM) pueden ser direcciónadlas indirectamente. El signo @ identifica este tipo de direccionamiento.

El direccionamiento de 8 bits se consigue a través de registro SP o de los

registros R0 y R1 del banco de registros seleccionado (por medio de los bits 3 y 4 del PSW), mientras que el direccionamiento de los 16 bits sólo se puede realizar por medio del puntero de datos (DPTR).

Ejemplo:

MOV A,@R0 ;carga al acumulador con lo existente en la posición de ;memoria descrita por el contenido del registro R0 activo.

Para aclarar lo anterior, supongamos que R0 contiene el valor 40H y en la

posición 40H se tiene un valor 55H; después de la instrucción, el acumulador quedará con el valor 55H. Esta forma de direccionamiento es muy útil para situaciones en las cuales se requiere el manejo de tablas y traslado continuo de datos, por ejemplo.

1.7.10.1.4. Direccionamiento por registro La instrucción especifica uno de los registros del banco el uso. Como se

describió, los 8X5X poseen cuatro bancos de registros, los cuales se direccionan a través de los bits 3 y 4 del PSW; cada banco contiene a su vez, 8 registros, desde R0 hasta R7.

Ejemplo:

MOV R1,#34 ;el registro R1 activo se carga con el número decimal 34

En algunas instrucciones, este modo de direccionamiento tiene un código

más eficiente que el direccionamiento directo o inmediato (ocupan menos bytes en la memoria de programa).

1.7.10.1.5 Direccionamiento implícito Algunas instrucciones son específicas en cuanto al registro involucrado en la

operación; no necesitan mencionar el operando porque está implícito en el código de operación.

Ejemplo:

CLR A ;todos los bits de registro acumulador se colocan en 0 INC R7 ;se incrementa el contenido de registro R7

1.7.10.1.6 Direccionamiento indexado Sólo es posible con la memoria de programas y únicamente permite la

lectura; es útil para acceder a tablas de datos que se encuentran en la memoria de programas. Un registro de 16 bits (el DPTR o contador programa) debe apuntar a la fase de la tabla y el acumulador se utiliza como desplazamiento para acceder al dato de interés. En otras palabras, al dato se accede por la suma de los contenidos del acumulador y el puntero base.

Otro tipo de direccionamiento indexado se utiliza en el caso de "saltos" de

instrucción, en donde la dirección destino del salto es la suma del puntero base y el acumulador.

1.7.10.2 Conjunto de instrucciones En la familia de microcontroladores MCS-51, el conjunto de instrucciones

está formado por 69 de ellas, aunque algunas poseen distintos modos de direccionamiento, lo que proporciona un total de 111 códigos diferentes. El conjunto de instrucciones se puede dividir en los siguientes tipos:

Instrucciones aritméticas

Instrucciones lógicas

Instrucciones para la transferencia de datos en memoria interna

Instrucciones para la transferencia de datos en memoria externa

Instrucciones para el tratamiento de tablas

Instrucciones Booleanas

Instrucciones de salto 1.7.10.2.1 Instrucciones aritméticas Tab.1.7.C Instrucciones aritméticas Memónico Operandos Ciclos Descripción

ADD A,Rn 1 Add register to Accumulator ADD A,direct 2 Add direct byte to Accumulator ADD A,@Ri 1 Add indirect RAM to Accumulator ADD A,#data 2 Add immediate data to Accumulator

ADDC A,Rn 1 Add register to Accumulator with Carry ADDC A,direct 2 Add direct byte to Accumulator with Carry ADDC A,@Ri 1 Add indirect RAM to Accumulator with Carry ADDC A,#data 2 Add immediate data to Acc with Carry SUBB A,Rn 1 Subtract Register from Acc with borrow SUBB A,direct 2 Subtract direct byte from Acc with borrow SUBB A,@Ri 1 Subtract indirect RAM from ACC with borrow SUBB A,#data 2 Subtract immediate data from Acc with borrow INC A 1 Increment Accumulator

INC Rn 1 Increment register INC direct 2 Increment direct byte INC @Ri 1 Increment direct RAM DEC A 1 Decrement Accumulator DEC Rn 1 Decrement Register DEC direct 2 Decrement direct byte DEC @Ri 1 Decrement indirect RAM INC DPTR 1 Increment Data Pointer MUL AB 1 Multiply A & B DIV AB 1 Divide A by B DA A 1 Decimal Adjust Accumulator En la tabla Tab.1.7.C se tienen las instrucciones aritméticas. En ella se

indican los modos de direccionamiento que se pueden utilizar para acceder al operando y los ciclos de máquina que tarda la ejecución de cada instrucción.

. De la tabla Tab.1.7.C se observan algunas cosas importantes:

Existen dos operaciones para la suma; una de ellas considera el acarreó o carry, mientras que la otra no.

En la sustracción siempre participa el acarreo.

Se pueden incrementar o decrementar algunos bytes de la memoria RAM sin la participación del acumulador.

Una de las operaciones de incremento se realiza sobre el registro DPTR de 16 bits.

Existen un par de instrucciones (MUL y DIV) que utilizan como fuentes y destinos o registros A y B, con lo cual se permite la multiplicación y división de operándose 8 bits.

Existe la operación DAA, dedicada a realizar el ajuste de la suma de numerosas BCD.

1.7.10.2.2 Instrucciones lógicas La tabla Tab.1.7.D contiene las instrucciones lógicas y los modos de

direccionamiento permitidos. Se observa que las operaciones Booleanas se pueden realizar sobre cualquiera de los 128 byte bajos de la RAM y el espacio de los SFR, utilizando direccionamiento directo, sin necesidad de utilizar el acumulador. Las rotaciones solo son posibles sobre el acumulador y lo desplazan un bit, bien sea a través del carry o no. La instrucción SWAP intercambia los nibbles del acumulador, siendo una instrucción muy utilizada en manipulación de números BCD. De este conjunto de instrucciones, las únicas que afectan el carry son RLC A y RRC A.

Tab.1.7.D Instrucciones Lógicas

Memónico Operandos Ciclos Descripción

ANL A,Rn 1 AND Register to Accumulator ANL A,direct 2 AND direct byte to Accumulator ANL A,@Ri 1 AND indirect RAM to Accumulator ANL A,#data 2 AND immediate data to Accumulator ANL direct,A 2 AND Accumulator to direct byte ANL direct,#data 3 AND immediate data to direct byte ORL A,Rn 1 OR register to Accumulator ORL A,direct 2 OR direct byte to Accumulator ORL A,@Ri 1 OR indirect RAM to Accumulator ORL A,#data 2 OR immediate data to Accumulator ORL direct,A 2 OR Accumulator to direct byte ORL direct,#data 3 OR immediate data to direct byte XRL A,Rn 1 Exclusive-OR register to Accumulator XRL A,direct 2 Exclusive-OR direct byte to Accumulator XRL A,@Ri 1 Exclusive-OR indirect RAM to Accumulator XRL A,#data 2 Exclusive-OR immediate data to Accumulator XRL direct,A 2 Exclusive-OR Accumulator to direct byte XRL direct,#data 3 Exclusive-OR immediate data to direct byte CLR A 1 Clear Accumulator CPL A 1 Complement Accumulator RL A 1 Rotate Accumulator Left RLC A 1 Rotate Accumulator Left through the Carry RR A 1 Rotate Accumulator Right RRC A 1 Rotate Accumulator Right through the Carry SWAP A 1 Swap nibbles within the Accumulator 1.7.10.2.3 Instrucciones de transferencia de datos La tabla Tab.1.7.E muestra las instrucciones disponibles para movimiento de

datos y los modos de direccionamiento que se puede utilizar con cada uno de ellas.

La instrucción MOV <dest>,<src> permite transferir datos entre la RAM interna y el área de registros SFR, sin la participación del acumulador. Se debe recordar que los 128 bytes altos de la RAM sólo pueden ser direcciónados indirectamente, mientras que el área de los SFR sólo se puede acceder por direccionamiento directo.

La instrucción MOV DPTR,#dato permite transferir datos de 16 bits para

inicializar del puntero de datos en el tratamiento de tablas de la memoria de programa, o para acceder a los datos de la memoria externa. La instrucción PUSH <src> incrementa inicialmente en puntero de pila (SP o Stack Pointer) y posteriormente copia de datos dentro de la pila. La instrucción POP <dest> copia de datos desde la pila hacia registro destino y posteriormente decrementa el

puntero de pila. Se debe recordar que la pila está situada dentro de la memoria RAM interna y el puntero de pila está señalando hacia el banco 1 de registros pero puede reubicarse, de tal manera que se localice en el área del Scratch Pad.

La operación XCH A,<byte> hace que el acumulador y el byte direcciónado

intercambien sus datos. La instrucción XCHD A,@Ri es similar, pero solamente los nibbles bajos participan en el intercambio.

Tab.1.7.E Instrucciones de Transferencia de datos

Memónico Operandos Ciclos Descripción

MOV A,Rn 1 Move register to Accumulator MOV A,direct 2 Move direct byte to Accumulator MOV A,@Ri 1 Move indirect RAM to Accumulator MOV A,#data 2 Move immediate data to Accumulator MOV Rn,A 1 Move Accumulator to register MOV Rn,direct 2 Move direct byte to register MOV Rn,#data 2 Move immediate data to register MOV direct,A 2 Move Accumulator to direct byte MOV direct,Rn 2 Move register to direct byte MOV direct,direct 3 Move direct byte to direct MOV direct,@Ri 2 Move indirect RAM to direct byte MOV direct,#data 3 Move immediate data to direct byte MOV @Ri,A Move 1 Accumulator to indirect RAM MOV @Ri,direct 2 Move direct byte to indirect RAM MOV @Ri,#data 2 Move immediate data to indirect RAM MOV DPTR,#data 3 Load Data Pointer with a 16-bit constant MOVC A,@A+DPTR 1 Move Code byte relative to DPTR to Acc MOVC A,@A+PC 1 Move Code byte relative to PC to Acc MOVX A,@Ri 1 Move External RAM (8-bit addr) to Acc MOVX A,@DPTR 1 Move External RAM (16-bit addr) to Acc MOVX @Ri,A 1 Move Acc to External RAM (8-bit addr) MOVX @DPTR,A 1 Move Acc to External RAM (16-bit addr) PUSH direct 2 Push direct byte onto stack POP direct 2 Pop direct byte from stack XCH A,Rn 1 Exchange register with Accumulator XCH A,direct 2 Exchange direct byte with Accumulator XCH A,@Ri 1 Exchange indirect RAM with Accumulator XCHD A,@Ri 1 Exchange low-order Digit indirect RAM with Acc En la tabla Tab.1.7.E se muestran las instrucciones para acceder a la

memoria externa de datos. Solamente se puede utilizar el direccionamiento indirecto para lograrlo. El acceso a la memoria externa se puede obtener mediante dos alternativas: por direccionamiento de un byte, @Ri, donde Ri es cualquiera de los registros R0 o R1 del banco de registro seleccionado, o el direccionamiento de 2 bytes, @DPTR.

Se debe recordar que el direccionamiento de 16 bits dedica los puertos P0 y

P2 para generar la dirección de acceso; por este motivo, cuando se pretende acceder a un banco pequeño de memorias RAM, lo más ventajoso es utilizar el direccionamiento de un byte, ya que permite utilizar algunas de las líneas del puerto dos para otras aplicaciones. El direccionamiento de 2 byte sólo se justifica en caso de poseer una memoria RAM de 64 Kbytes.

Observe que en todas las instrucciones, el acumulador es siempre el destino

o la fuente del dato. Las señales de sincronización de lectura y escritura (RD y WR) se activan únicamente durante la instrucción MOVX; normalmente estas señales permanecen inactivas. Cuando no se posee memoria externa, los pin correspondientes se utilizan como líneas extras de entrada/salida.

La tabla Tab.1.7.E también muestra las dos instrucciones disponibles para la

lectura de tablas en la memoria de programa. Como éstas instrucciones acceden solamente a la memoria de programas, las tablas sólo pueden ser leídas, no actualizadas. El memónico es MOVC, para mover constante. Si la tabla que se accede está en la memoria externa de programa, entonces la señal para la sincronización de la lectura que es PSEN.

La primera instrucción MOVC puede acomodar una tabla de hasta 256

entradas, enumeradas desde 0 hasta 255. El número de la entrada deseaba se carga en el acumulador y el puntero de datos señala el comienzo de la tabla; la ejecución de la instrucción copiará el valor deseado de la tabla en el acumulador.

La otra instrucción MOVC trabaja de la misma manera, excepto que el

contador de programa (PC) se ajusta como base de la tabla y a ésta se accede a través de una subrutina. De nuevo, el acumulador contiene la entrada deseada y las subrutina se llama, de manera similar a esto:

MOV A,#Entrada CALL Tabla

Las subrutina Tabla debe ser algo como lo siguiente:

Tabla: MOVC A,@A+PC RET DB 5 DB 7 DB 8

La instrucción siguiente a la base de la tabla, en la memoria de programa,

debe ser RET (retorno de interrupción). Este tipo de tabla puede tener hasta 255 entradas, numeradás desde 1 hasta 255. La entrada número 0 no se puede utilizar, porque una vez que la instrucción MOVC se ejecuta, el contador de programa se actualiza con la dirección de la instrucción RET. Una entrada

numerada como 0 retornará el código de la operación de la instrucción RET. 1.7.10.2.4 Instrucciones Booleanas La familia MCS-51 contiene un procesador Booleano (orientado hacia

operaciones sobre bits) muy completo. La memoria RAM contiene 128 bits direcciónables y el espacio de los SFR puede soportar otros 128 bits direcciónables , como se describió anteriormente. Los bits direccionados desde 00H hasta 7FH pertenecen al área de los 128 bits bajos, mientras que los direccionados desde 80H hasta 0FFH pertenecen al espacio de los SFR.

Todas las líneas de los puertos son direccionables bit a bit, de manera que

cada una puede ser tratada como puerto de un bit. Las instrucciones se muestran en la tabla Tab.1.7.F y se observa que éstas no solamente acceden a los bits para saltos condicionales; también hay un conjunto de cargas, activaciónes, limpiezas, complementos y operaciones AND y OR.

En cuanto a los saltos condicionales, las instrucciones verifican el estado de

los bits direcciónados y ejecutan un salto relativo al contador del programa, si la condición se cumple. El rango del salto relativo está localizado entre las -128 a + 127 posiciones, con relación al valor del contador de programa (la instrucción actual + 1 byte).

Tab.1.7.F Instrucciones Booleanas Memónico Operandos Ciclos Descripción

CLR C 1 Clear Carry LR bit 2 Clear direct bit SETB C 1 Set Carry SETB bit 2 Set direct bit CPL C 1 Complement Carry CPL bit 2 Complement direct bit ANL C,bit 2 AND direct bit to CARRY ANL C,/bit 2 AND complement of direct bit to Carry ORL C,bit 2 OR direct bit to Carry ORL C,/bit 2 OR complement of direct bit to Carry MOV C,bit 2 Move direct bit to Carry MOV bit,C 2 Move Carry to direct bit JC rel 2 Jump if Carry is set JNC rel 2 Jump if Carry not set JB bit,rel 3 Jump if direct Bit is set JNB bit,rel 3 Jump if direct Bit is Not set JBC bit,rel 3 Jump if direct Bit is set & clear bit

1.7.10.2.5 Instrucciones de salto La tabla Tab.1.7.G muestra la lista de saltos incondicionales y condicionales

disponibles para la familia de microcontroladores MCS-51. Tab.1.7.G Instrucciones de salto Memónico Operandos Ciclos Descripción

ACALL addr11 2 Absolute Subroutine Call LCALL addr16 3 Long Subroutine Call RET 1 Return from Subroutine RETI 1 Return from interrupt AJMP addr11 2 Absolute Jump LJMP addr16 3 Long Jump SJMP rel 2 Short Jump (relative addr) JMP @A+DPTR 1 Jump indirect relative to the DPTR JZ rel 2 Jump if Accumulator is Zero JNZ rel 2 Jump if Accumulator is Not Zero CJNE A,direct,rel 3 Compare direct byte to Acc and Jump if Not

Equal CJNE A,#data,rel 3 Compare immediate to Acc and Jump if Not

Equal CJNE Rn,#data,rel 3 Compare immediate to register and Jump if Not Equal CJNE @Ri,#data,rel3 Compare immediate to indirect and Jump if Not

Equal DJNZ Rn,rel 2 Decrement register and Jump if Not Zero DJNZ direct,rel 3 Decrement direct byte and Jump if Not Zero NOP 1 No Operation Las instrucciones de salto (JuMP) muestran tres variantes:SJMP, AJMP y

LJMP - que difieren en el formato de la dirección destino. La instrucción SJMP codifica la dirección destino como una constante de 8 bits, tratándola como un desplazamiento relativo, similar al descrito en el punto anterior. Así, la longitud del salto se limita en el rango entre -128 y 127 byte relativos a la instrucción que sigue a la instrucción SJMP. La instrucción ocupa dos bytes en la memoria de programas.

La instrucción LJMP codifica la instrucción destino como una dirección de 16

bits; por lo tanto, la dirección destino puede estar localizada en cualquier sitio de la memoria de programa de 64 Kbytes. La instrucción tiene una longitud de 3 bytes.

La instrucción AJMP codifica la dirección destino como una constante de 11 bits; cuando se ejecuta esta instrucción, los 11 bits correspondientes a la dirección destino se copian en los 11 bits más bajos del contador de programa. Así, la dirección destino puede ser un punto cualquiera de la memoria de programa situado en el mismo bloque de 2 KBytes de la instrucción siguiente al salto. La instrucción tiene dos bytes de largo.

En todos los casos, el programador especifica la dirección destino en el

ensamblador de la misma manera: como una etiqueta o como una dirección de 16 bits. El ensamblador colocará la dirección destino en el formato correcto para la instrucción dada. La instrucción JMP @A+DPTR está diseñada para el caso de saltos. La dirección destino se calcula al momento de ejecución, como las suma del registro de 16 bits DPTR y el acumulador. Típicamente, el DPTR contiene la dirección de la base de la tabla y el acumulador el índice de acceso. Supongamos, por ejemplo, que se leerá de un teclado un valor comprendido entre 0 y 4 y este valor se carga en el acumulador.

Como cada valor debe tener un tratamiento diferente, las instrucciones que

permite esto tienen, más o menos la siguiente estructura:

MOV DPTR,#Tabla MOV A, Indice RL A JMP @A+DPTR

La tabla respectiva tendría la forma:

Tabla: AJMP CASO_0 AJMP CASO_1 AJMP CASO_2 AJMP CASO_3

La instrucción RL A multiplica por dos el valor índice, ya que cada instrucción

en la tabla de saltos ocupa dos byte de la memoria de programa. La tabla Tab.1.7.G muestra también una instrucción las variantes de la

instrucción de llamada a subrutina (CALL): LCALL y ACALL. Ambas se tratan de la misma manera a como sucedía en el caso de los saltos. La instrucción LCALL utiliza un formato de 16 bits, mientras que ACALL lo hace con un formato de 11 bits.

El programador especifica una etiqueta o una dirección de 16 bits y el

ensamblador se encarga de colocarle el formato correcto a la dirección. Las subrutinas deben finalizar con una instrucción RET, la cual obliga a que

el programa retorne a la instrucción siguiente a la que hizo la llamada con la instrucción CALL. La instrucción RETI se utiliza para regresar de la rutina de servicio a una interrupción.

La tabla Tab.1.7.G contiene la lista de las instrucciones disponibles para los

saltos relativos en la familia MCS-51. todos los saltos especifican el destino como un desplazamiento relativo al byte siguiente de la instrucción, los saltos están limitados al rango comprendido entre -128 y 127 bytes. Como se describió en los casos anteriores, el programador especifica la dirección destino como una etiqueta

una constante de 16 bits. Si el salto está por fuera del rango descrito, el ensamblador escribirá el mensaje "Destination out of Range" (Destino fuera de rango) en el listado de errores del programa.

Las instrucciones JZ y JNZ verifican directamente el acumulador, ya que no

se posee una bandera de cero en el registro PSW. La instrucción DJNZ (Decrement and Jump if Not Zero - decremento y salto si no es cero) se utiliza para controlar bucles. Para ejecutar unas instrucciones N número de veces, se carga un contador con N y se termina el bucle con la instrucción DJNZ , como se muestran el siguiente ejemplo:

MOV Contador,#10 Loop: ;comienzo del bucle ;Instrucciones ;Fin del bucle DJNZ contador,Loop

Las instrucciones contenidas en el bucle se ejecutarán, en este caso diez

veces. La instrucción CJNE (Compare and Jump if Not Equal - compare y salte si no

es igual) también se puede utilizar para operaciones de control de bucles. El salto se realiza solamente si los dos bytes no son iguales.

Otra aplicación de estas instrucciones es la comparación entre dos

cantidades sin signo: si el primero es menor que el segundo, el carry se activa (se ponen 1); si es mayor o igual, el carry se coloca en 0.

1.7.11 El microcontrolador ATMEL AT89C2051 1.7.11.1 Descripción del AT89C52 El AT89C2051 es un microcontrolador CMOS de 8-bits de alto rendimiento y

bajo voltaje de trabajo que contiene 2 Kilobytes de memoria PEROM (Flash programmable and erasable read only memory). Este dispositivo se fabrica usando la tecnología de memoria no volátil de alta densidad y es compatible a nivel de conjunto de instrucciones y distribución de pins con el standard industrial MCS-51.

Al combinar el versátil CPU de 8-bits con la memoria Flash en un solo chip, el

AT89C2051 de Atmel es un microcontrolador potente que provee una solución altamente flexible y efectiva en costo para la realización de aplicaciones de control.

El AT89C2051 provee las siguiente opciones standard: 2 Kbytes de Flash,

128 bytes de RAM, 15 líneas I/O, dos timer/counter de 16 bits, cinco vectores de

arquitectura de interrupción de dos niveles, puerto serial full-duplex, un comparador análogo de precisión, oscilador en el propio chip y circuitería de reloj.

En adición, el AT89C2051 esta diseñado con lógica estática lo que permite

una operación con frecuencia cero. Soporta además dos modos de ahorro de poder seleccionables por software. El modo Idle detiene el CPU mientras permite que la RAM, timer/counter, el puerto serial y el sistema de interrupción continúen funcionando. El modo Power Down mantiene los contenidos de la RAM pero detiene el oscilador deshabilitando, por lo tanto, todas las otras funciones del chip hasta que ocurra el siguiente Reset por hardware.

1.7.11.2 Características del AT89C2051

Compatible con la familia MCS-51

2 Kbytes de Memoria Flash reprogramable

Permite 1000 ciclos de Grabación/Borrado del Flash

Rango de operación desde 2.7 a 6.0 voltios DC.

Operación estática completa: 0 [Hz] a 24 [MHz]

Protección contra lectura de Memoria de Programa (Cerrojo) de dos niveles

128 bytes de RAM interna

15 lineas I/O programambles

2 Timer/Counter de 16 bits

6 Fuentes de interrupción

Canal UART Serial programable

Salidas en corriente con capacidad directa de manejo de LEDS

Comparador análogo interno

Modos de ahorro de energia Power Idle y Power Down

1.7.11.3 Configuración de Pins para el AT89C2051 El AT89C2051 viene en un encapsulado de 20 pins (DIP 20) y la ditribución

del patillaje se muestra en la figura Fig.1.7.L. Fig.1.7.L AT89C2051:Configuracion de Pins

1.7.12 El microcontrolador ATMEL AT89C52 1.7.12.1 Descripción del AT89C52 El AT89C52 es un microcontrolador CMOS de 8-bits de alto rendimiento y

bajo voltaje de trabajo que contiene 8 Kilobytes de memoria PEROM (Flash programmable and erasable read only memory). Este dispositivo se fabrica usando la tecnología de memoria no volátil de alta densidad y es compatible a nivel de conjunto de instrucciones y distribución de pins con el standard industrial 80C51 y 80C52.

Al combinar el versátil CPU de 8-bits con la memoria Flash en un solo chip, el

AT89C2051 de Atmel es un microcontrolador potente que provee una solución altamente flexible y efectiva en costo para la realización de aplicaciones de control.

El AT89C52 provee las siguiente opciones standard: 8 Kbytes de Flash, 256

bytes de RAM, 32 líneas I/O, tres timer/counter de 16 bits, seis vectores de arquitectura de interrupción de dos niveles, puerto serial full-duplex, oscilador en el propio chip y circuitería de reloj.

En adición, el AT89C2051 esta diseñado con lógica estática lo que permite

una operación con frecuencia cero. Soporta además dos modos de ahorro de poder seleccionables por software. El modo Idle detiene el CPU mientras permite

XT AL15

RST1

VCC

20

(RXD) P3.02

(T XD) P3.13

6(INT0) P3.2

7(INT1) P3.3

(A IN0) P1.0

(A IN1) P1.1

P1.2

P1.3

12

13

14

15

XT AL24

(T 0) P3.48

(T 1) P3.59

11P3.7

P1.4

P1.5

P1.6

P1.7

16

17

18

19

GND

10

AT89C2051

que la RAM, timer/counter, el puerto serial y el sistema de interrupción continúen funcionando. El modo Power Down mantiene los contenidos de la RAM pero detiene el oscilador deshabilitando, por lo tanto, todas las otras funciones del chip hasta que ocurra el siguiente Reset por hardware.

1.7.12.2 Características del AT89C52

Compatible con la familia MCS-51

8 Kbytes de Memoria Flash reprogramable

Permite 1000 ciclos de Grabación/Borrado del Flash

Rango de operación desde 2.7 a 6.0 voltios DC.

Operación estática completa: 0 [Hz] a 24 [MHz]

Protección contra lectura de Memoria de Programa (Cerrojo) de dos niveles

256 bytes de RAM interna

32 lineas I/O programambles

3 Timer/Counter de 16 bits

8 Fuentes de interrupción

Canal UART Serial programable

Modos de ahorro de energia Power Idle y Power Down 1.7.12.3 Configuración de Pins para el AT89C52 El AT89C2051 viene en un encapsulado de 40 pins (DIP 40) y la ditribución

del patillaje se muestra en la figura Fig.1.7.M. Fig.1.7.M AT89C52:Configuracion de Pins

XT AL119

VCC

40

XT AL218

EA/V PP31

30ALE /PROG

29PS EN

RS T9

(T 2) P 1.01

(T 2 EX ) P 1.12

3P1.2

4P1.3

(A D0) P0.0

(A D1) P0.1

(A D2) P0.2

(A D3) P0.3

39

38

37

36

P1.45

P1.56

7P1.6

8P1.7

(A D4) P0.4

(A D5) P0.5

(A D6) P0.6

(A D7) P0.7

35

34

33

32

AT89C52

(RXD) P 3.010

(T XD) P 3.111

12(INT0) P3.2

13(INT1) P3.3

(A 8) P 2.0

(A 9) P 2.1

(A 10) P2.2

(A 11) P2.3

21

22

23

24

(T 0) P 3.414

(T 1) P 3.515

16(W R) P3.6

17(RD) P3.7

(A 12) P2.4

(A 13) P2.5

(A 14) P2.6

(A 15) P2.7

25

26

27

28

GND

20