Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

La Familia MCS51 Modulo I.

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 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.
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 ROM RAM TIMERS INTERRUPCIONES


EPROM BYTES BYTES 16 BITS
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

256 Bytes en el
8052

Timer 0
Control de 128 Bytes Entradas
ROM Timer 0
Interrupciones RAM del Contador
Timer 0

CPU

Bus de Puerto Serial


Oscilador 4 Puertos I/O
Control

0V

0V 0V P0 P1 P2 P3 TxD RxD
Direcciones / Datos
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

MEMORIA DE PROGRAMA MEMORIA DE DATOS


(SOLO DE LECTURA) (LECTURA / ESCRITURA)

FFFFh
FFFFh

EXTERNA

EXTERNA

1FFFh
FFh
EA = 1
SFR
EA = 0
8052 0FFFh
EXTERNA 8052 7Fh
8051 INTERNA
8051
0000
00 00

PSEN 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

(2) VECTOR DE
INTERRUPCION

(1) INTERRUPCION
(4) RETORNO DE PROGRAMA PRINCIPAL
INTERRUPCION

(3) RUTINA DE SERVICIO

DE INTERRUPCIÓN

RTI

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.
Fig.1.7.D Vectores de Interrupción en la memoria de programa

0000h

Interrupción Externa 0 0003h

Timer 0 000Bh

Interrupción Externa 1 0013h

Timer 1 001Bh

Puerto Serial 0023h

Timer 2 002Bh

0FFFh

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

MCS-51 ROM EXTERNA

P0 INSTR
P1
EA
0V LATCH
P3 ALE
ADDR

P2

PSEN OE

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


S1 S2 S3 S4 S5 S6

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

CICLO DE MAQUINA

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.
Fig.1.7.G Configuración del MCS-51 con memoria externa de Datos

MCS-51 RAM EXTERNA

P0 DATOS
P1
+5V

EA
LATCH
ALE
ADDR

RD P3 P2
WR
I/O Bits de Página WE OE

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

FFh

ACCESIBLE SOLAMENTE
ACCESIBLE MEDIANTE
MEDIANTE
DIRECCIONAMIENTO
DIRECCIONAMIENTO
DIRECTO
INDIRECTO

80h
7Fh

ACCESIBLE MEDIANTE
Registros de Propósito
DIRECCIONAMIENTO
Especia:l
DIRECTO E INDIRECTO
Puertos
Bits de Estado
00h y de Control
Timers
Registros
Puntero de Pila
Acumulador

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

Direcciones/Datos

Direcciones/Datos

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

20
5 1
XTAL1 VCC RST
4
XTAL2
AT89C2051
2 12
(RXD) P3.0 (AIN0) P1.0
3 13
(TXD) P3.1 (AIN1) P1.1
6 14
( INT0 ) P3.2 P1.2
7 15
( INT1 ) P3.3 P1.3
8 16
(T0) P3.4 P1.4
9 17
(T1) P3.5 P1.5
11 18
P3.7 P1.6
19
P1.7
GND
10

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

40
19
XTAL1 VCC
18 9
XTAL2 RST
31
EA /VPP
30
ALE/ PROG
29
PSEN
1 39
(T2) P1.0 (AD0) P0.0
2 38
(T2 EX) P1.1 (AD1) P0.1
3 37
P1.2 (AD2) P0.2
4 36
P1.3 (AD3) P0.3
5 35
P1.4 (AD4) P0.4
6 34
P1.5 (AD5) P0.5
7 33
P1.6 (AD6) P0.6
8 32
P1.7 (AD7) P0.7
AT89C52
10 21
(RXD) P3.0 (A8) P2.0
11 22
(TXD) P3.1 (A9) P2.1
12 23
( INT0 ) P3.2 (A10) P2.2
13 24
( INT1 ) P3.3 (A11) P2.3
14 25
(T0) P3.4 (A12) P2.4
15 26
(T1) P3.5 (A13) P2.5
16 27
( WR ) P3.6 (A14) P2.6
17 28
( RD ) P3.7 (A15) P2.7
GND
20

También podría gustarte