Download Arquitectura de Microcomputadoras

Document related concepts
no text concepts found
Transcript
Arquitectura de Microcomputadoras
Arquitectura Comp JJVS/10
1
1
Plan de estudio – Parte 1
1. Microcontroladores (8031).
– Hardware.
– Temporizador.
– Puerto Serie.
– Interrupciones.
Arquitectura Comp JJVS/10
2
2
Plan de estudio – Parte 2
1.
Microcontroladores
a.
Definición.
b. Arquitectura interna.
d. Recursos.
e.
Uso del simulador MPLAB
2.
Microcontroladores de 8 bits: Pics
a. Selección
b. Familia de pics
c. Descripción general y aplicaciones
Arquitectura Comp JJVS/10
3
3
Plan de estudio – Parte 2, cont.
3. El PIC 16X8X
a. Diferentes tipos y diferencias
b. Pines externos
c. El reloj
d. Reset
4. Procesador
a. Arquitectura
b. Memoria de código
c. Memoria de datos
d. Registro de estado
5. Temporizadores, puertos y EEPROM
a. Empleo de temporizadores
b. Temporizador/contador
c. El perro guardián (WDT)
d. Puertos de E/S
e. Configuración
f.
Memoria EEPROM de datos
Arquitectura Comp JJVS/10
4
4
Plan de estudio – Parte 2 cont.
6.
Interrupciones, reset y recursos auxiliares
a. Empleo de las interrupciones
b. Causas de interrupción
c. Reset
d. Modo de bajo consumo
7.
Circuitos útiles:
a. Manejador de teclado
b. Convertidores DAC y ADC
c. Display de cristal líquido
d. Comunicación serial
8.
Proyecto final.
Arquitectura Comp JJVS/10
5
5
Bibliografía
• THE 8051 MICROCONTROLLER
MACKENZIE, I. SCOTT
USA : PRENTICE-HALL , 1999
• MICROCONTROLADORES "PIC" : DISEÑO PRACTICO DE
APLICACIONES
ANGULO USATEGUI, JOSE MARIA \ ANGULO MARTINEZ,
IGNACIO. ESPAÑA : MCGRAW-HILL/INTERAMERICANA,
2002.
– PIC IN PRACTICE
SMITH, DAVE W.
INGLATERRA : NEWNES , 2003
– DIGITAL SIGNAL PROCESSING AND MICROCONTROLLER
GROVER, DALE \ DELLER JACK
USA : PRENTICE-HALL PTR , 1999
– DESIGN WITH MICROCONTROLLERS
PEATMAN, JOHN B.
USA : MCGRAW-HILL , 1988
Arquitectura Comp JJVS/10
6
MICROCONTROLADORES
RESEÑA HISTÓRICA
En 1971 Intel Corporation introduce el 8080
Poco después
Motorola, RCA, MOS Technology
introducen: 6800,1801,6502 y Z80 respectivamente.
El microcontrolador 8748 es introducido por Intel en 1976.
Intel en 1980 saca al mercado el 8051, el primer elemento en la familia
de microcontroladores MCS-51TM .
Arquitectura Comp JJVS/10
y
Zilog
7
INTRODUCCIÓN
Este circuito integrado está alcanzando sus 30 años de aparición. Es difícil
imaginarse este mundo de herramientas y juguetes electrónicos sin él microprocesador. Se encuentra en aplicaciones como: hornos, lavadoras, relojes,
termostatos, juguetes, vídeocaseteras, equipos de sonido, instrumentos musicales,
fotocopiadoras, tableros de instrumentos, sistemas de ignición y una gran variedad
de equipos industriales.
Pequeña Reseña histórica
En 1971 Intel Corporation introduce el 8080, el cual es considerado el primer
microprocesador exitoso. Poco después Motorola, RCA, MOS Technology y Zilog,
introducen al mercado elementos similares: 6800,1801,6502 y Z80 respectivamente.
Un dispositivo similar al microprocesador es el microcontrolador, el 8748 es e1
primer elemento de la familia de microcontroladores MCS-48TM , que es introducido
en 1976 por Intel. Sin embargo, la potencia, tamaño y complejidad de estos
elementos avanzan en orden de magnitud con el anuncio de Intel en 1980 del 8051,
el primer elemento en la familia de microcontroladores MCS-51TM .
7
SISTEMA DE COMPUTO
Unidad central de procesamiento (CPU). El CPU administra todas
las actividades del sistema y realiza todas las operaciones sobre los datos. En
general realiza 2 operaciones : Trae las instrucciones de memoria de código y
las ejecuta.
Memoria. Existe una memoria de acceso aleatorio (RAM) y una de solo
lectura (ROM). Los programas y los datos son almacenados en memoria.
Estos elementos que son controlados directamente por el CPU, son circuitos
integrados llamados RAM y ROM.
Elementos periféricos (ENTRADA/SALIDA). Los elementos de
entrada/salida o periféricos, dan la trayectoria para la comunicación del
sistema de computo y el mundo real. Existen tres clases de estos elementos:
Elementos de almacenamiento masivo, elementos de interfaz con el humano
y elementos de control/supervisión.
Arquitectura Comp JJVS/10
8
UNIDAD CENTRAL DE PROCESAMIENTO
El CPU administra todas las actividades del sistema y realiza todas las operaciones sobre los datos.
Principalmente realiza 2 operaciones : “Trae” las instrucciones de memoria de código y las ejecuta.
Estas instrucciones usualmente son aritméticas, lógicas, movimientos de datos, saltos y están
representadas por un conjunto de códigos binarios llamados conjunto de instrucciones.
MEMORIA: RAM y ROM
Los programas y los datos son almacenados en la memoria de código y de datos respectivamente.
Estos circuitos integrados son direccionados por el CPU, son llamados RAM y ROM. Las
computadoras tienen un disco duro de gran almacenamiento y una ROM pequeña. Los programas de
usuario se almacenan en disco y después son cargados en RAM para ejecutarlos.
8
El CPU, la RAM, la ROM y los periféricos están interconectado a través
del bus de direcciones, bus de datos y bus de control.
Arquitectura Comp JJVS/10
9
Un bus de direcciones de 16-bits puede tener acceso a 2 ^16 =65,536 locaciones.
El bus de datos lleva información del CPU a la memoria o entre el CPU y los
elementos de Entrada/salida (I/O). Este bus de datos es bidireccional, mientras que el
bus de direcciones es unidireccional.
El bus de control es un conjunto de señales, donde cada una de estas tienen un papel
específico en el control de la actividad del sistema. Estas señales se sincronizan a
través del CPU para sincronizar los movimientos de información en los buses de
datos y de direcciones.
9
MICROPROCESADORES VS.
MICROCONTROLADORES
Arquitectura de hardware. Un microprocesador es un circuito
integrado. Un microcontrolador contiene un CPU y muchos de los otros
circuitos que forman una computadora.
Aplicaciones. Los microprocesadores son usados como el CPU de una
computadora. Los micro-controladores, son usados en pequeños diseños
con un mínimo de componentes realizando actividades orientadas al
control.
Características del conjunto de instrucciones. El conjunto de
instrucciones del microprocesador es mucho más poderoso que el
conjunto de instrucciones de un microcontrolador.
Arquitectura Comp JJVS/10
10
Diferencias entre un microcontrolador y un microprocesador.
Existen tres diferencias principales: arquitectura de hardware, aplicaciones y características del
conjunto de instrucciones.
Arquitectura de hardware.
Un microprocesador es el circuito integrado que forma el CPU. Un microcontrolador contiene en
un circuito integrado el CPU y muchos de los otros circuitos que forman un sistema completo de
una microcomputadora, como: el CPU, RAM, ROM. interfaz serial, interfaz paralela,
temporizadores, y circuitos para interrupciones estratificadas. Una característica importante del
microcontrolador es la incorporación del sistema de interrupciones.
Aplicaciones.
Los microprocesadores comúnmente son usados como el CPU de las computadoras. Los
microcontroladores, sin embargo son usados en pequeños diseños con un mínimo de
componentes realizando actividades orientadas al control.
Conjunto de instrucciones
El conjunto de instrucciones del microprocesador son de procesado intensivo, implicando que
tienen modos de direccionamiento potentes con alimentación de instrucciones para operar sobre
grandes volúmenes de datos. Sus instrucciones operan sobre nibbles, bytes, palabras, o dobles
palabras. Los modos de direccionamiento dan acceso a grandes arreglos de datos, usando
apuntadores de dirección y offsets. Modos de auto-incremento y auto-decremento simplifican los
pasos a través de arreglos sobre bytes, palabra, o dobles palabras. Instrucciones privilegiadas no
pueden ejecutarse dentro del programa del usuario. El conjunto de instrucciones es mucho más
poderoso en un microprocesador que un microcontrolador.
10
Arquitectura Comp JJVS/10
11
DIAGRAMA A BLOQUES DE UNA COMPUTADORA
Por otra parte los microcontroladores tienen un conjunto de instrucciones para
alimentar el control de entradas y salidas. Estos tiene instrucciones que activan o
desactivan bits individuales, entre otras operaciones relacionadas con bits. Estas
características generalmente no se encuentran en microprocesadores, los cuales
usualmente son diseñados para operar sobre bytes o unidades grandes de datos.
Los microcontroladores incluyen circuitos e instrucciones para operaciones de
entrada/salida, eventos temporizados y habilitar o deshabilitar interrupciones
causadas por pulsos externos. Los microprocesadores generalmente requieren
circuitos externos adicionales para realizar operaciones similares.
Todas las ventajas del microcontrolador en un solo chip tiene grandes ventajas, sin
embargo, las instrucciones deben ser extremadamente compactas generalmente
implementadas en un simple byte.
11
HARDWARE
LA FAMILIA MCS-51
Características del microcontrolador 8051 :
4K bytes de ROM
128 bytes de RAM
4 puertos de entrada/salida (E/S) de 8 bits
2 temporizadores de 16 bits
Interfaz serial
64K de espacio de memoria para código externo
64K de espacio de memoria para datos externos
Procesador que permite realizar operaciones lógicas
210 lugares que soportan el modo de bit
4µs para multiplicar/dividir.
Arquitectura Comp JJVS/10
12
La familia MCS-51™ es una familia de circuitos integrados, fabricados y
comercializados por Intel Corporation.
El circuito que distingue a esta familia es el 8051, el primer elemento ofrecido
comercialmente. Sus características principales se indican en la diapositiva.
12
DIAGRAMAABLOQUESDEL8051
Arquitectura Comp JJVS/10
13
Existen una diversidad de dispositivos que componen a esta familia. A continuación
se hace una comparación de los principales microcontroladores de la familia MCS51.
MICROCONTROLADOR
MEMORIA
DE CODIGO
MEMORIA
DE DATOS
TIMERS
8051
4K ROM
128 bytes
2
128 bytes
2
8031
0K
8751
4K EEPROM
128 bytes
2
8052
8K ROM
256 bytes
3
8032
0K
256 bytes
3
8752
8K EPROM
256 bytes
3
13
TERMINALES DEL 8051
Micro 8051
19
30pF
X1
18
X2
12MHz
29
30pF
ALE/P
31
EA/VP
9
P3.0
17
16
15
14
12
13
11
10
39
38
37
36
35
34
33
32
PSEN
30
P3.7
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
RESET
RD
WR
T1
T0
INT0
INT1
TXD
RXD
Arquitectura Comp JJVS/10
1
2
3
4
5
6
7
8
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
AD7-AD0
21
22
23
24
25
26
27
28
A8-A15
14
Terminales. 32 de las 40 terminales del 8051 funcionan como puertos de Entrada/Salida
(E/S). Sin embargo 24 de estas terminales tienen un doble propósito. Además de funcionar
como terminales de E/S, también funcionan como líneas de control o como parte del bus
(de direcciones o datos). Los diseños requieren un mínimo de memoria externa u otros
componentes externos para lo cual se emplean estas líneas.
Cada puerto puede ser tratado de forma individual en la conexión de elementos
paralelos como: impresoras, desplegadores de cristal líquido, convertidores digitalanalógicos, etc. O bien cada terminal del puerto puede operar como un bit individual en
interruptores, diodos emisores de luz (LED), transistores, motores, bocinas, etc.
Puerto 0. Este puerto es de doble propósito. Para microcontroladores con ROM interna
sirve como E/S, y en aquellos que necesitan memoria externa se transforma en un bus
multiplexado de direcciones y de datos.
Puerto 1. Este es un puerto exclusivo para E/S.
Puerto 2. Este puerto es de doble propósito, sirve como E/S de propósito general o como
el byte más alto del bus de direcciones, para microcontroladores que necesitan memoria
externa de datos o de código.
14
ORGANIZACIÓN DE LA MEMORIA
Arquitectura Comp JJVS/10
15
Muchos microprocesadores utilizan un espacio de memoria compartida para datos y
programas. Esto es razonable ya que los programas usualmente son almacenados en
discos y después cargados en RAM para ejecutarlos, así los datos y programas
residen en esta memoria.
El 8051 utiliza un espacio de memoria separada de código y datos, las cuales se
pueden expandir usando componentes externos a un máximo de 64K. También
cuenta internamente con una memoria RAM pequeña, que en la siguiente página se
describe.
15
Memoria de datos interna
Arquitectura Comp JJVS/10
16
La RAM interna contiene registros de almacenamiento de propósito general, de
almacenamiento por bit, bancos de registros y registros de funciones espaciales.
Existen dos características importantes, los registros y los puertos E/S están
mapeados en memoria y se puede acceder a estos como si se tratará de otra localidad
de memoria. La pila reside dentro de la RAM interna, a diferencia de los
microprocesadores que se ubica en la RAM externa.
En la figura se presentan detalles de la memoria de datos. Como se muestra el
espacio de memoria está dividido entre el banco de registros (00H-1FH), direcciones
accesibles por bit (20H-2EF), registros de propósito general (30H-7FH) y registros
de funciones especiales (80H-FFH).
Las localidades de propósito general pueden ser accesadas libremente usando
modos de direccionamiento directo.
Existen 128 localidades de propósito general, 32 son bancos de registros, 21
registros de propósito general y 128 localidades direccionables por bit.
Del lado derecho de la figura se puede observar que existen registros con
nombres específicos, estos tienen la finalidad de activar y configurar algunas
características del microcontrolador como: interrupciones, temporizadores y
comunicación serial.
16
Ejemplo 1
/* Ejemplo No. 1
Programa que genera una señal de reloj en el pin 0 del puerto 2 */
#include <c8051f200.h>
especiales
// Declaración del registro de funciones
sbit LED = P2^4;
void delay(unsigned int
tiempo)
{
unsigned int i=0;
void delay(unsigned int);
void main()
{
for (i=0; i<tiempo; i++);
}
// deshabilita el watchdog timer
WDTCN = 0xde;
WDTCN = 0xad;
PRT2CF |= 0xFF; // habilita el puerto 2 como salidas
while(1)
{
delay(100);
LED=!LED;
}
}
Arquitectura Comp JJVS/10
17
17
Memoria externa
Arquitectura Comp JJVS/10
18
Es importante que los microprocesadores tengan capacidades de expansión más allá
de sus propios recursos para permitir un desarrollo potencial de diseño. La
arquitectura MCS-51 permite incrementar las memoria de código y de datos hasta
64K. Interfaces periféricas pueden agregarse para expandir las capacidades de
entrada y salida usando memoria mapeada de E/S.
En la siguiente figura se presenta un arreglo no-multiplexado que usa 16 líneas
de dirección y 8 líneas de datos para un total de 24 terminales.
El arreglo multiplexado combina el bus de datos y el byte bajo del bus de
direcciones. Con otras 8 líneas para el byte alto del bus de direcciones se necesitan
un total de 16 terminales.
El arreglo multiplexado trabaja de la siguiente forma: Durante la primera mitad
de cada ciclo de memoria, el byte bajo de las direcciones se proporciona en el
PUERTO 0 y es retenido usando ALE. Un 74HC373 (o equivalente) mantiene
estable el byte bajo de las direcciones durante el ciclo de memoria. Durante la
segunda mitad del ciclo de memoria el puerto 0 se usa como bus de datos, estos se
leen o escriben dependiendo de la operación.
18
Conectando la memoria de código externa.
Arquitectura Comp JJVS/10
19
La memoria de código externa es una memoria de solo lectura activada por la
señal (PSEN).
Las conexiones para la memoria externa EPROM se muestra en la figura.
Un ciclo de máquina del 8051 dura 12 periodos del oscilador. Si el oscilador es
un cristal de 12 MHz un ciclo de máquina tienen una duración de 1 µs.
Durante un ciclo de máquina ALE pulsa 2 veces y se leen dos bytes del programa
de memoria (si la operación es de un byte el segundo byte es descartado). El tiempo
para esta operación se conoce como “opcode fetch”, que podría traducirse como
“traer el código de la operación”.
19
Diagrama de tiempos para lectura
memoria de código
Pulse para añadir texto
Arquitectura Comp JJVS/10
20
20
Conectando una memoria RAM de 1K
Arquitectura Comp JJVS/10
21
Accesando la memoria de datos externa
Esta memoria de lectura/escritura es activada por RD y WR (las funciones del
pin alterno para P3.7 y P3.6). En la figura se muestran las conexiones necesarias
para conectar una memoria RAM.
21
Sobreponiendo memoria de código con la memoria de datos
D 0 -D 7
P u e rt o 0
EA
D
Q
A 0 -A 7
RAM
(1 K b y te )
8051
A LE
P 2 .0
P 2 .1
G
WR
RD
PSEN
A8
A9
W
O E
C S
14 a
Sobreponiendo la memoria de código y la de datos
Muchos microprocesadores utilizan un espacio de memoria compartida para
datos y programas, para emular las acciones de la computadora. Esto es razonable ya
que los programas podrían ser almacenados en la memoria RAM y después
ejecutarlos.
Un truco común es sobreponer el espacio de código externo y el de memoria de
datos. Ya que PSEN se usa para leer la memoria de código y RD para leer memoria
de datos, una RAM puede ocupar espacio de memoria de datos y de código
conectando la línea OE a la AND lógica de PSEN y RD, como puede verificarse en
la figura.
22
Decodificación de direcciones
14 b
Decodificación de direcciones
Si se conectan múltiples EPROMs y/o RAMs al 8051, se requiere una
decodificación de direcciones. Típicamente se utiliza un decodificador como el
74HC138 con sus salidas conectadas a las entradas de activación (CS, Chip Select)
de las memorias.
23
Modos de direccionamiento
Direccionamiento directo
Direccionamiento indirecto
Direccionamiento por registro
Direccionamiento implícito
Direccionamiento inmediato
Direccionamiento indexado
Arquitectura Comp JJVS/10
24
24
Direccionamiento directo
El operando se especifica en la instrucción mediante un
campo de dirección de 8 bits. Sólo la RAM interna de datos
(primeros 128 bytes) y la zona de SFR se pueden direccionar
de esta forma.
Este modo de direccionamiento permite el acceso de
fácil y rápido a las zonas de las memoria anteriormente
indicadas.
ADD A,3BH
Esta instrucción suma (ADD) al contenido del acumulador el
contenido de la posición de memoria 3BH: A (A) + ([3B]).
MOV P1, A
Instrucción
Código de
Operación
MOV
direcc,A
0xF5
Byte 2º
Byte 3º
Bytes
direcc
2
Arquitectura Comp JJVS/10
Ciclos
Flags
1
-
25
25
Direccionamiento indirecto
En este modo de direccionamiento, la dirección del
operando está contenida en un registro, cuyo nombre se especifica
en la instrucción precedido por el símbolo “@”. Permite acceder
tanto a la memoria de datos interna (128/256 bytes para el
8051/52) como a la memoria de datos externa.
Para el direccionamiento de áreas de memoria (tanto
internas como externas) de tamaño no superior a 256 bytes, se
puede hacer uso de los registros R0 y R1 del banco de registros
seleccionado. Si el área de memoria posee un tamaño superior,
sólo puede utilizarse el registro DPTR. Este modo de
direccionamiento es especialmente útil para acceder a los 128 bytes
altos de la memoria de datos interna (8052) y a la memoria de
datos externa.
Arquitectura Comp JJVS/10
26
26
Direccionamiento indirecto
Ejemplos:
ADD A,@R0
Si (R0) = 3BH, la operación realizada por esta
instrucción será la misma del ejemplo anterior:
A (A) + ([3B]).
MOVX @DPTR,A
Si (DPTR) = 4C2BH, esta instrucción carga el
contenido del acumulador en la posición 4C2BH de la
memoria de datos externa:[4C2B] (A).
Arquitectura Comp JJVS/10
27
27
Direccionamiento por registro
Como ya se ha estudiado, los microcontroladores 8051/52 poseen cuatro bancos de
registros (que pueden ser seleccionados mediante los bits 3 y 4 del registro PSW)
cada uno de los cuales está compuesto por 8 registros (R0 - R7). Cuando se usa
direccionamiento por registro, en el propio código de operación de la instrucción se
especifica el registro del banco activo con que se opera mediante un campo de tres
bits.
Ejemplo:
MOV Rn,A
Carga en el registro Rn el contenido del acumulador: Rn (A).
Formato: 1
1
1
1
1
r
r
r
Dependiendo de qué registro sea Rn, el código de instrucción tomará distintos
valores. Así, MOV R0,A se codificará como 11111000B = F8H, mientras que MOV
R6,A se codificará como 11111110B = FEH.
Este direccionamiento ocupa muy poca memoria de programa y permite
acceder de manera rápida a los datos más frecuentemente utilizados.
Arquitectura Comp JJVS/10
28
28
Direccionamiento implícito
Algunas instrucciones operan siempre sobre un mismo registro
(acumulador, apuntador de datos, etc.) el cual, en consecuencia, es
seleccionado de forma implícita por el propio código de operación,
no siendo necesario añadir un byte de dirección para referenciarlo.
Las instrucciones con este modo de direccionamiento son muy
rápidas y compactas, ocupando el mínimo espacio en la memoria de
programa.
Ejemplos:
INC A
Incrementa el contenido del acumulador: A (A) + 1.
INC DPTR
Incrementa puntero de datos: DPTR (DPTR) + 1.
Arquitectura Comp JJVS/10
29
29
Direccionamiento inmediato
En este modo de direccionamiento, el operando va incluido en la
propia instrucción y se identifica precediéndolo por el símbolo
“#”. Dicho operando tiene una longitud de 8 bits, excepto en las
instrucciones que afectan al DPTR, en las cuales posee un
tamaño de 16 bits.
Este modo se usa en los casos en que el operando es una
constante.
Ejemplos:
MOV A,#255
Carga en el acumulador el número decimal 255.
MOV DPTR,#36CAH
Carga en el registro DPTR el valor 36CAH.
Arquitectura Comp JJVS/10
30
30
Direccionamiento indexado
Este direccionamiento sólo es aplicable sobre la memoria de
programas y para operaciones de lectura. Se utiliza para la lectura
de tablas de valores constantes alojadas en esta zona de la
memoria. La posición de memoria a acceder se especifica
mediante la dirección de la base de la tabla (almacenada en un
registro de 16 bits: DPTR o PC) y un desplazamiento u offset
(almacenado en el acumulador). Es decir, la dirección a la que se
accede se obtiene mediante la suma de los contenidos del
acumulador y del puntero base (DPTR o PC). Las instrucciones
MOVC A,@A+DPTR y MOVC A,@A+PC utilizan el modo
de direccionamiento indexado.
Otro tipo de direccionamiento indexado es el utilizado en la
instrucción JMP @A+DPTR, donde la dirección de salto se
obtiene sumado los contenidos de los registros A y DPTR.
Arquitectura Comp JJVS/10
31
31
Conjunto de instrucciones
El set de instrucciones del 8051/52 se puede
dividir en las siguientes categorías:
• Instrucciones aritméticas.
• Instrucciones lógicas.
• Instrucciones de transferencia de datos.
• Instrucciones booleanas.
• Instrucciones de salto.
Arquitectura Comp JJVS/10
32
32
Instrucciones aritméticas
Arquitectura Comp JJVS/10
33
33
Instrucciones lógicas
Pulse para añadir texto
Arquitectura Comp JJVS/10
34
34
Instrucciones de transferencia de datos
Arquitectura Comp JJVS/10
35
35
Instrucciones booleanas
Arquitectura Comp JJVS/10
36
36
Instrucciones de salto
Arquitectura Comp JJVS/10
37
37
OPERACIÓN DEL
TEMPORIZADOR
Introducción.
El temporizador es una serie de divisiones por dos de flip-flops que
reciben una señal de entrada de reloj. La señal de reloj se aplica al primer flipflop que divide la frecuencia del reloj por 2.
Ya que cada etapa sucesiva divide la señal de reloj por 2, un
temporizador con n etapas divide la frecuencia del reloj de entrada en 2n. La
salida de la última etapa genera una señal de sobreflujo (o bandera) en el último
flip-flop, la cual puede ser leída por software o generar una interrupción.
Arquitectura Comp JJVS/10
38
En este capítulo analizaremos el temporizador del chip 8051. Empezamos con un
punto de vista simplificado del uso más común de
temporizadores en
microcontroladores.
38
+5V
D
D
Q
R e lo j
Q
D
Q
Q
0
D
Q
Q
0
F lip - f lo p
b a n d e ra
Q
Q
0
0
M SB
LSB
R e lo j
Q 0 (L S B )
Q 1
Q 2 (M S B )
C u e n ta
0
1
2
3
4
5
6
7
0
B a n d e ra
Arquitectura Comp JJVS/10
39
La operación de un temporizador simple de 3 bits se ilustra en la siguiente figura,
cada etapa compuesta de un flip-flop tipo D de flaco negativo, funciona como un
divisor por 2.El flip-flop bandera es simplemente un latch tipo D que cambia con el
último estado del temporizador.
Es evidente en el diagrama de tiempos de la figura, que la primera etapa (Q0) se
encuentra a ½ de la frecuencia de reloj, la segunda a ¼, etc. La cuenta se muestra en
decimal y podemos verificarla fácilmente examinando el estado del tercer flip-flop.
39
El temporizador se ocupa de las aplicaciones orientadas al control. El
8031 cuenta con 2 temporizadores de 16-bits cada uno con 4 modos de
operación.
En general es usado para:
a) temporizar intervalos
b) contador de eventos
c) generar el baud-rate para el puerto serial.
Arquitectura Comp JJVS/10
40
Un temporizador de 16 bits permite dividir la frecuencia de reloj por 216 =
65,536 veces. Si tenemos un cristal de 12MHz la frecuencia mínima que se puede
conseguir es de 1MHz/65536=15.26Hz con un tiempo mínimo de 65.53ms.
Generalmente este tiempo no es suficiente para la mayoría de las aplicaciones que
requieren del temporizador, sin embargo, una opción es aumentar este tiempo con
ciclos de software.
TEMPORIZAR INTERVALOS
En aplicaciones de medición de tiempo, el temporizador se programa para que se
genere un sobre-flujo a intervalos regulares y active la bandera del mismo nombre.
Esta bandera se usa para temporizar una acción del programa, como revisar el estado
de terminales de entrada o mandar datos a las salidas. En otras aplicaciones se puede
medir el lapso de tiempo transcurrido entre dos condiciones (pe. medición del
ancho de pulso).
CONTADOR DE EVENTOS
Se usa para determinar el número de veces que ocurre un evento determinado, o
para medir el tiempo entre dos eventos.
GENERAR EL BAUD-RATE PARA EL PUERTO SERIAL
Se utiliza para seleccionar la velocidad de una comunicación serial.
40
Los temporizadores del 8051 pueden ser utilizados usando 6 registros de
funciones especiales.
TIMER SFR
TCON
TMOD
TL0
TL1
TH0
TH1
PROPOSITO
DIRECCION DIRECCIONABLE
POR BIT
Control
88H
Si
Modo
89H
No
Timer 0, byte bajo
8AH
No
Timer 1, byte bajo
8BH
No
Timer 0, byte alto
8CH
No
Timer 1, byte alto
8DH
No
Arquitectura Comp JJVS/10
41
En la tabla se muestran los registros necesarios para poner en funcionamiento al
temporizador. En el registro TCON se encuentran los bits de activación y las
banderas de sobre flujo, en TMOD se selecciona el modo del mismo, en los registros
TLx (donde x puede ser 0 ó 1) se encuentra los ocho bits menos significativos del
temporizador y en TLx se encuentran los ocho bits más significativos.
41
Registro de control de temporizador (TCON)
El registro TCON contiene bits de control y de niveles
para el temporizador 1 y 0.
BIT
NOMBRE DIRECCION
TCON.7 TF1
8FH
DESCRIPCION
Bandera de sobreflujo del timer 1.Activada
por hardware cuando existe sobreflujo. *
TCON.6 TR1
8EH
Bit de activación del Timer 1. Cuando es 1
inicia el timer y si es 0 para el timer.
TCON.5 TF0
8DH
Timer 0, bandera de sobreflujo
TCON.4 TR0
8CH
Timer 0, bit de activación
TCON.3 IE1
8BH
Bandera de la interrupción externa 1,
disparada por flanco o por nivel. Activada
por hardware cuando un flanco de bajada es
detectado en INT1. *
TCON.2 IT1
8AH
Selección del modo de la interrupción: 1
por flanco de caída y 0 por nivel.
TCON.1 IE0
89H
Interrupción externa 0 disparada por flanco
TCON.0 IT0
88H
Interrupción externa 0 disparada por nivel
Arquitectura Comp JJVS/10
42
Los 4 bits superiores en TCON se usan para activar o desactivar los
temporizadores (TR0, TR1), o para señalar un sobre-flujo en un temporizador (TF0,
TF1).
Los 4 bits bajos en TCON no se usan en los temporizadores. Estos se emplean
para activar una interrupción externa y para seleccionar el tipo de activación.
42
Registro del modo del temporizador (TMOD)
BIT NOMBRE TIMER
DESCRIPCION
7
GATE
1
Bit de compuerta. Cuando esta activa (1), el
timer únicamente actúa mientras INT1 está en
alto, si es cero actúa el timer interno.
6
C/T
1
Contador/bit de selección de timer
1=contador de eventos
0=temporizador de intervalos
5
M1
1
Bit 1 del modo
4
M0
1
Bit 0 del modo
3
GATE
0
Timer 0, bit compuerta
2
C/T
0
Timer 0, contador/bit de selección de timer.
1
M1
0
Timer 0, bit M1
0
M0
0
Timer 0, bit M0
M1
0
0
1
1
M0
0
1
0
1
MODO
0
1
2
3
DESCRIPCIÓN
Modo timer de 13 bits
Modo timer de 16 bits
Modo auto-recargable de 8 bits
Modo “split timer”:
Timer 0: TL0 es un timer de 8 bits controlado por los bits de
timer modo 0; TH0 igual pero está controlado por los bits de timer
modo 1
Timer 1: detenido.
Arquitectura Comp JJVS/10
43
El modo del temporizador y la bandera de sobre-flujo.
En el registro TMOD se encuentran los bits GATE, C/T, M1 y M0, repetidos para
dos temporizadores.
A continuación se describen los bits:
El bit de compuerta GATE sirve para activar al temporizador por
interrupciones, ver página 24.
El bit C/T sirve para seleccionar al temporizador como contador de eventos
(sí se activa C/T=1) o como un temporizador de intervalos (C/T=0).
Los bits M1 y M0 sirven para seleccionar el modo del temporizador. A
continuación son descritos con detalle.
43
Reloj
TLx
THx
(5 bits)
(8 bits)
TFx
Modo 0
Reloj
TLx
THx
(8 bits)
(8 bits)
TFx
Modo 1
Reloj
TLx
(8 bits)
TFx
THx
(8 bits)
Modo 2
Arquitectura Comp JJVS/10
44
Modo 0
Es un temporizador de 13 bits, pues los 3 bits superiores de TLx no se usan.
Modo 1
Es un temporizador de 16 bits. Un sobre-flujo en este, ocurre en la transición
FFFFH a 0000H y entonces se activa la bandera de sobre-flujo del temporizador. La
bandera de sobre-flujo es el bit TFx en TCON el cual se lee o se escribe por
software. El LSB divide la frecuencia de entrada del reloj por 2, mientras que el
MSB la divide por 65,536.
Modo 2
Es un modo auto-recargable de 8 bits. El byte bajo (TLx) opera como un
temporizador de 8 bits y THx mantiene el valor de recarga.
Una vez que TMOD y THx son inicializados, el sobre flujo del timer ocurrirá en
intervalos específicos de tiempo.
44
Reloj
Reloj
TL1
TH1
(8 bits)
(8 bits)
TL0
TF0
(8 bits)
Bandera de sobreflujo
Fosc/12
TH0
(8 bits)
Modo 3
Arquitectura Comp JJVS/10
TF1
Bandera de sobreflujo
45
Modo 3
TL0 y TH0 actúan como dos timers de ocho bits separados, con sobre-flujo en
los bits TF0 y TF1.
El temporizador 1 se detiene en el modo 3 pero puede ser iniciado nuevamente,
cambiando a uno de los otros tres modos.
Este modo proporciona un timer extra de 8 bits.
45
Fuentes de Reloj
Hay dos posibles fuentes de reloj para los temporizadores. Estas son
seleccionadas con el bit contador/temporizador (C/T) en TMOD cuando se inicia el
temporizador. Una fuente de reloj es utilizada para temporizar intervalos y la otra
para contabilizar eventos.
Oscilador
Cristal
/12
del
circuito
Terminal del
T0 ó T1
Al reloj del
temporizador
0=Up (medición de
intervalos)
1=Down (contador
de eventos)
C/T
Arquitectura Comp JJVS/10
46
Temporizador de intervalos.
Con C/T=0 seleccionamos una operación continua del temporizador, el cual es
controlado desde el oscilador del chip. Se adiciona una división por 12 etapas para reducir la
frecuencia del oscilador a un valor razonable en la mayoría de las aplicaciones.
Cuando seleccionamos una operación continua del temporizador, estamos utilizando
el temporizador para medir el tiempo entre eventos. Los registros del temporizador (TLx/ THx) se
incrementan a una razón de 1/12 de la frecuencia del oscilador; así un cristal de 12MHz puede dar
hasta 1MHz.Los sobre-flujos del temporizador ocurren después de un número fijo de pulsos,
dependiendo del valor previamente cargado dentro de los registros TLx/THx.
Contador de eventos.
Si C/T=1, el temporizador se controla por medio de una fuente externa. En muchas
aplicaciones esta fuente externa alimenta el temporizador con un pulso cada vez que ocurre un
evento.
El número de eventos se determina leyendo por software los registros del
temporizador TLx/THx, puesto que los valores en estos registros se incrementan por cada evento.
La fuente de reloj externa viene de las terminales de funciones alternas del puerto 3,
P3.4 y P3.5. En estas aplicaciones los registros del temporizador se incrementan respondiendo a
transiciones de 1 a 0, de la entrada externa, Tx. Puesto que esto toma dos ciclos de máquina (2us) la
máxima frecuencia externa es 500kHz (Suponiendo una operación de 12MHz).
46
12MHz
Oscilador
0=Up
¸12
en
0=Up
1=Down 1=Down
chip
TL1
T1
TH1
TF1
16 bits
(P3.5)
C/T
TR1
and
GATE
or
INT1
Temporizador 1 en modo de operación 1
(P3.3)
Arquitectura Comp JJVS/10
47
Iniciando, deteniendo y controlando los temporizadores.
El método más simple para iniciar o detener los temporizadores es con el bit de
inicialización TRx, en TCON.
TRx se limpia después de reiniciar el sistema y los temporizadores quedan
desactivados. TRx se activa por software para iniciar el temporizador. Por ejemplo,
el temporizador 0 se inicia con:
SETB TR0
y se detienen con:
CLR TR0
47
Características de la familia
mejorada del 8051
Arquitectura Comp JJVS/10
48
48
Ejercicio: Determine la
función de este programa.
#include <c8051f200.h>
// Declaración del registro de funciones especiales
#define CERO 0x11
#define UNO 0xD7
#define DOS 0x32
#define TRES 0x92
#define CUATRO 0xD4
#define CINCO 0x98
#define SEIS 0x18
#define SIETE 0xD3
#define OCHO 0x10
#define NUEVE 0x90
#define NADA 0xFF
sbit ENT0 = P2^0;
sbit ENT1 = P2^1;
sbit ENT2 = P2^2;
sbit ENT3 = P2^3;
void main()
{
unsigned char p3in=0,
aux_bit=0;
switch (p3in)
{
case 0x00 : P1=CERO; break;
case 0x01 : P1=UNO; break;
case 0x02 : P1=DOS; break;
case 0x03 : P1=TRES; break;
case 0x04 : P1=CUATRO; break;
case 0x05 : P1=CINCO; break;
case 0x06 : P1=SEIS; break;
case 0x07 : P1=SIETE; break;
case 0x08 : P1=OCHO; break;
case 0x09 : P1=NUEVE; break;
default : P1=CERO; break;
}
}
while (1)
{
p3in=ENT0;
aux_bit=ENT1;
p3in=p3in+aux_bit*2;
aux_bit=ENT2;
p3in=p3in+aux_bit*4;
}
aux_bit=ENT3;
p3in=p3in+aux_bit*8;
Arquitectura Comp JJVS/10
49
49
Temporizador (1)
#include <reg51.h>
void main (void)
{
P10=0;
TMOD=0x10; /* timer ? en modo ?, :)*/
while (1)
{
TH1=0xFE;
TL1=0x0C;
TR1=1;
while(TF1!=1);
TF1=0;
P10=!P10;
}
}
Arquitectura Comp JJVS/10
50
50
#include <reg51.h>
Temporizador
(2)
void main (void)
{
TMOD=0x02;
TH0=0xCE;
TL0=0xCE;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void tmr0 (void) interrupt 1 using 1
{
P10=!P10;
} Arquitectura Comp JJVS/10
51
51
INTERRUPCIONES
INTRODUCCIÓN
Una interrupción es el acontecimiento de una condición (o un evento) que causa
una suspensión temporal de un programa mientras la condición es atendida por
una subrutina; éstas permiten que el sistema responda en forma asíncrona a un
evento mientras otro programa se está ejecutando.
ORGANIZACIÓN DE INTERRUPCIONES DEL 8051
Hay 5 fuentes de interrupciones en el 8051: dos interrupciones externas, dos
interrupciones de timers y una interrupción del puerto serial.
Si suceden dos o más interrupciones simultaneas, o una interrupción ocurre
mientras otra interrupción esta siendo atendida, hay dos formas de programar
las interrupciones : con secuencia por omisión y con un esquema de prioridades
Arquitectura Comp JJVS/10
52
de dos niveles.
Cuando ocurre una interrupción, se suspende temporalmente la ejecución del
programa principal y “brinca” a la rutina de servicio de interrupción (ISR). Dentro
de esta rutina se realiza la tarea de atención a la interrupción y al concluirse el
programa principal continúa donde se quedó.
52
ACTIVANDO Y DESACTIVANDO INTERRUPCIONES
Cada una de las 5 fuentes de interrupciones es activada o desactivada a
través del registro de funciones especiales (IE), que se muestra en la siguiente
tabla:
BIT SIMBOLO
IE.7
IE.6
IE.5
IE.4
IE.3
IE.2
IE.1
IE.0
EA
ET2
ES
ET1
EX1
ET0
EX0
BIT DE
DIRECCIONES
AFH
AEH
ADH
ACH
ABH
AAH
A9H
A8H
DESCRIPCIÓN
1=HABILITADO, 0=DESHABILITADO.
Habilitación/deshablitación global.
No definida
Habilita interrupción Timer 2 (8052)
Habilita interrupción del puerto serial
Habilita interrupción Timer 1
Habilita interrupción externa 1
Habilita interrupción Timer0
Habilita interrupción externa 0
Dos bits deben ser activados para iniciar cualquier interrupción: El bit de
habilitación individual y el bit de habilitación global.
Arquitectura Comp JJVS/10
53
Este registro es direccionable por bit.
53
PRIORIDAD DE INTERRUPCIONES
Cada interrupción es programada individualmente en uno o dos niveles de
prioridades a través del registro de funciones especiales (IP), que se muestra en
la siguiente tabla.
BIT SIMBOLO
BIT DE
DIRECCIONES
IP.7
IP.6
IP.5
PT2
.
0BDH
IP.4
PS
0BCH
IP.3
IP.2
IP.1
IP.0
PT1
PX1
PT0
PX0
0BBH
0BAH
0B9H
OB8H
DESCRIPCIÓN
1=nivel alto, 0=nivel bajo.
No definido
No definido
Prioridad para interrupción Timer 2
(8052)
Prioridad para interrupción del puerto
serie
Prioridad para interrupción Timer 1
Prioridad para interrupción externa1
Prioridad para interrupción Timer 0
Prioridad para interrupción externa 0
Arquitectura Comp JJVS/10
54
La idea de “prioridades” permite al servicio de atención a interrupciones (ISR)
realizar una nueva interrupción sí ésta es de más alta prioridad que la interrupción
que se encuentre activa.
El programa principal siempre puede ser interrumpido, sin importar la prioridad
de la interrupción. Si dos interrupciones de diferentes prioridades ocurren
simultáneamente, la interrupción con prioridad más alta es la que se “atiende”
primero.
54
SECUENCIA POR OMISIÓN.
Si ocurren dos interrupciones de la misma prioridad, una secuencia por
omisión determina cual se utiliza primero.
La secuencia por omisión es externa 0, Timer 0, externa 1, Timer 1, puerto
serial, Timer 2.
BANDERAS DE INTERRUPCIÓN
El estado de todas las interrupciones está disponible a través del SFR.
INTERRUPCION BANDERA
Externa 0
Externa 1
Timer 1
Timer0
Puerto serie
Puerto serie
IE0
IE1
TF1
TF0
TI
RI
REGISTROS SFR Y
POSICION DE BIT
TCON.1
TCON.3
TCON.7
TCON.5
SCON.1
SCON.0
Arquitectura Comp JJVS/10
55
El estado de todas las fuentes de interrupciones está disponible a través de las
banderas en los registros mostrados en la tabla. Si no se activan las interrupciones,
en el programa pueden emplearse las banderas de interrupción.
55
ESTRUCTURA DE INTERRUPCIONES DEL 8031
Arquitectura Comp JJVS/10
56
En esta figura es posible observar un esquema simplificado de las interrupciones
dentro del microcontrolador 8031. Las interrupciones externas INT0 e INT1 pueden
activarse por flanco o por nivel (con el bit IT0 e IT1, respectivamente). Las banderas
que indican una interrupción de este tipo son IE0 y IE1.
En la figura se puede observar la secuencia por omisión y el registro de selección
de prioridades.
56
INTERRUPCIONES DEL PUERTO SERIAL
Una interrupción de transmisión ocurre cuando un carácter(letra o número) fue
recibido en el buffer serie (SBUF). Una interrupción de recepción ocurre cuando
un carácter se ha recibido completamente y está esperando ser leído del SBUF.
INTERRUPCIONES EXTERNAS
Las interrupciones externas ocurren como resultado de un nivel bajo (cero) o por
un flanco de bajada en las terminales INT0 o INT1 del 8051.
Las banderas que generan estas interrupciones son los bits IE0 e IE1 en TCON.
La selección del modo de la interrupción, activada por nivel bajo o activada por
flanco de bajada se programa a través de los bits IT0 e IT1 en TCON.
Arquitectura Comp JJVS/10
57
La interrupción serial ocurre cuando las banderas TI o RI se activan en alto.
La bandera que causa una interrupción en el puerto serie no es limpiada por
hardware cundo el CPU brinca al vector de interrupción, la razón es que hay 2
fuentes de interrupción del puerto serie, TI o RI. La fuente de la interrupción debe
ser determinada en el servicio de atención a interrupciones (ISR) y la bandera de
interrupción debe ser borrada por software.
Las interrupciones externas ocurren como resultado de un nivel bajo o flanco
negativo en los pines INT0 o INT1 del 8051.
Las banderas que generan actualmente estas interrupciones son los bits IE0 e
IE1 en TCON. Cuando una interrupción externa se genera, la bandera que generó
esta se borra por hardware cuando se “brinca” al ISR únicamente si la interrupción
fue activada por transición. Si la interrupción fue activada por nivel, entonces la
fuente externa solicitada controla el nivel de la bandera, aun más que el hardware
del chip.
La selección del interrupción activada por nivel bajo o activada por flanco
negativo se programa a través de los bits IT0 e IT1 en TCON.
Los pines de interrupciones externas son probados una vez cada ciclo de máquina,
una entrada puede ser retenida al menos por 12 periodos de oscilación para
asegurar un muestreo apropiado.
57
Ejemplo: interrupciones
/* Ejemplo No. 6 */
/* Programa que utiliza las interrupciones */
#include <c8051f200.h> // Declaración del
registro de funciones especiales
#define CERO 0x11
#define UNO 0xD7
#define DOS 0x32
#define TRES 0x92
#define CUATRO 0xD4
#define CINCO 0x98
#define SEIS 0x18
#define SIETE 0xD3
#define OCHO 0x10
#define NUEVE 0x90
#define NADA 0xFF
void delay(unsigned int);
void interrupcion();
void main ()
{
unsigned char i=0;
WDTCN = 0xde;
WDTCN = 0xad;
PRT2CF |= 0xFF;
EX0 = 1;
IT0 = 1;
EA= 1;
while (1)
{
delay(30000);
switch (i)
{
case 0 : P1=CERO; break;
case 1 : P1=UNO; break;
case 2 : P1=DOS; break;
case 3 : P1=TRES; break;
case 4 : P1=CUATRO;break;
case 5 : P1=CINCO; break;
case 6 : P1=SEIS; break;
case 7 : P1=SIETE; break;
case 8 : P1=OCHO; break;
case 9 : P1=NUEVE; break;
}
delay(30000);
void interrupcion() interrupt 0 using 0
{
P1=0xFE;
}
void delay(unsigned int tiempo)
{
unsigned int k, j;
for (k=0; k<tiempo; k++);
for (j=0; j<2000; j++);
}
if (i<9)
i++;
else
i=0;
}
}
Arquitectura Comp JJVS/10
58
58
PUERTO SERIE
INTRODUCCION
El 8051 incluye un puerto serial que puede operar en algunos modos
sobre un amplio rango de frecuencias. La función esencial del puerto serial es
realizar la conversión paralelo-serie para salida de datos y serie-paralelo para
entrada de datos. El hardware de acceso al puerto serial es a través de los pines
TXD y RXD.
REGISTROS DE CONTROL DEL PUERTO SERIAL
Los registros de control del puerto serial (SCON) contienen bits de
estado y bits de control. Los bits de control inician el modo de operación para el
puerto y los de estado indican el final de una transmisión o recepción de un
carácter. Los bits de estado son probado en software o programados para causar
una interrupción. La frecuencia de operación del puerto serial o baud rate,
puede ser fija o variable.
Arquitectura Comp JJVS/10
59
El puerto serial presenta una operación “full duplex” (transmisión y
recepción simultánea) y “receive buffering”, permitiendo recibir y mantener un
carácter en un buffer mientras un segundo carácter es recibido.
El buffer del puerto serial (SBUF) en la dirección 99H son realmente
2 buffers. Escribiendo a SBUF cargamos un dato para ser transmitido y leyendo
SBUF se obtiene el dato recibido.
59
BIT
SCON.7
SCON.6
SCON.5
SIMBOLO
SM0
SM1
SM2
SCON.4
REN
SCON.3
TB8
SCON.2
SCON.1
RB8
TI
SCON.0
RI
DIRECCION
DESCRIPCION
9FH
Bit 0 del modo del puerto serial
9EH
Bit 1 del modo del puerto serial
9DH
Habilita las comunicaciones entre
microcontroladores en los modos 2 y 3, RI no se
activa si el noveno bit recibido es bajo.
9CH
Habilita la recepción, debe inicializarse para
recibir caracteres.
9BH
Transmite el bit 8 (0-7); noveno bit en modos 2 y
3; iniciado/borrado por software.
9AH
Recibe el bit 8 (0-7), noveno bit.
99H
Bandera de interrupción de transmisión. Indica el
final de la transmisión de caracteres; limpiada por
software.
98H
Bandera de interrupción de recepción. Indica el
final de la recepción de caracteres; limpiado por
software.
Registro de control del puerto serial
Arquitectura Comp JJVS/10
60
Antes de usar el puerto serial, SCON se inicializa para trabajar en el
modo correcto: Se selecciona el modo (sí es el modo 1 SM0/SM1=0/1), se activa el
bit que permite la recepción (REN=1) y se activa la bandera de interrupción de
transmisión (TI=1) para indicar que el transmisor está listo para operar.
Después de recibir un bit de inicio correcto, se procede a recibir los 8
bits de datos, el noveno bit es almacenado en RB8 en SCON. La bandera RI se
activa (1). Todo esto ocurre sí
•RI=0 y
• Para comunicación con multi microcontroladores SM2=1 y el bit de paro sea 1, o
SM2=0.
60
MODOS DE OPERACIÓN
El puerto serial del 8051 tiene 4 modos de operación.
SM0
0
0
1
SM1
0
1
0
MODO
DESCRIPCION
0
Registro de corrimiento
1
UART de 8 bits
2
UART de 9 bits
1
1
3
UART de 9 bits
BAUD RATE
Fijo (Frecuencia de oscilación entre 12)
Variable (seleccionado con el timer)
Fijo (frecuencia de oscilación entre 32 o
64)
Variable (seleccionado con el timer)
Arquitectura Comp JJVS/10
61
Tres de estos modos habilitan la comunicación asíncrona, cada uno
de los bytes transmitidos o recibidos están enmarcados por un bit de inicio y un bit
de paro. El modo restante permite usar el puerto serie como un registro de
corrimiento.
61
Registro de corrimiento de 8 bits (modo 0).
La línea RXD se usa para entrada y salida de datos y la línea TXD
sirve como reloj.
La transmisión es iniciada por cualquier instrucción que escriba datos
a SBUF.
Una posible aplicación del modo de registro de corrimiento es
expandir las capacidades de salida del 8051.
8 salidas extras.
8031
TXD (P3.1)
Reloj
Registro de
RXD (P3.0)
Datos
corrimiento
Arquitectura Comp JJVS/10
62
En el modo 0 los datos seriales entran y salen a través de RXD, TXD
envía la señal de reloj. Los términos RXD y TXD no son correctos en este modo.
La transmisión es iniciada por cualquier instrucción que escriba datos
a SBUF. Los datos son llevados a la línea RXD (P3.0), con pulsos de reloj
mandados a la línea TXD (P3.1).
Una posible aplicación del modo de registro de corrimiento es
expandir las capacidades de salida del 8051. Un CI de registro de corrimiento serieparalelo se puede conectar a las líneas TxD y RxD del 8051, proporcionando 8
líneas extras de salida, como puede observarse en la figura. Además otros registros
de corrimiento pueden conectarse en cascada con el primero y permitir más
expansión.
62
UART de 8 bits con Baud rate variable (Modo 1)
En el modo 1 el puerto serie del 8051 opera como un UART
(universal asynchronous receiver/transmitter) de 8 bits con baud-rate variable
(programable con el timer).
En el modo 1 son transmitidos 10 bits sobre TXD o recibidos en
RXD. Estos consta de un bit de inicio, (siempre 0), 8 bits de datos (primero
LSB), y un bit de paro (siempre 0).
1/ (Baud rate)
Arquitectura Comp JJVS/10
63
Durante la recepción, el bit de paro activa RB8 de SCON.
Los datos enviados a TXD empiezan con un bit de inicio, seguido por 8 bits de
datos y finalmente el bit de paro. El periodo para cada bit es el recíproco del baud
rate que se ha programado en el timer. La bandera de interrupción de transmisión
(TI) se activa cuando el bit de paro aparece en TXD.
La recepción se inicia por una transición de 1 a 0 en RXD. El receptor incluye
“detección de falso bit de inicio”, esto se logra esperando un cero después de 8
cuentas desde la transición. Si esto no ocurre, se supone que el receptor fue activado
por ruido más que por un carácter válido. El receptor es reiniciado y se regresa al
estado de espera, listo para la siguiente transición de 1 a 0.
63
UART de 9 bits con baud rate fijo (Modo 2).
En este modo se reciben o transmiten 11 bits: un bit de inicio, 8 bits de
datos, un noveno bit de dato programable, y un bit de paro. El baud rate en el
modo 2 es 1/32 o 1/64 de la frecuencia del oscilador del chip.
UART de 9 bits con baud rate variable (Modo 3)
La diferencia para cada uno de los modos se encuentra en el baud rate
(fijo en el modo 2, variable en el modo 1 y 3) y en el número de bits de datos (8
en el modo 1, nueve en el modo 2 y 3 ).
En este modo el baud rate es seleccionado por el timer.
Arquitectura Comp JJVS/10
64
En transmisión, el bit nueve se coloca en TB8 de SCON. En recepción, el noveno
bit recibido se coloca en RB8.
64
Inicialización de los registros del puerto serial.
Habilitación de receptor: El bit de habilitación de receptor (REN) en SCON
debe iniciarse por software para habilitar la recepción de caracteres.
El noveno bit de datos:El noveno bit transmitido en el modo 2 y 3 debe ser
cargado en TB8 por software. El noveno bit de datos recibido se coloca en RB8.
Banderas de interrupción: Típicamente RI se inicia al final de la recepción de
caracteres e indica que el buffer de recepción está lleno. Esta condición es
examinada por software o programada para causar una interrupción.
TI se inicia al final de la transmisión de caracteres e indica que el buffer de
transmisión está vacío.
Arquitectura Comp JJVS/10
65
Si el software requiere la entrada de un carácter desde el elemento conectado al
puerto serial, este debe esperar hasta que RI este en un nivel alto, entonces RI se
limpia y se lee el carácter desde SBUF.
TI se activa (nivel alto) al final de una transmisión de un carácter indicando
“buffer de transmisión vacío”. Si se desea mandar un dato por el puerto serial , debe
revisarse que el puerto serie este listo.
65
Baud rate del puerto serie
Suponiendo una frecuencia de 12 MHz, el baud rate del modo 0 es 1MHz.
Oscilador
¸12
Baud rate
MODO 0
Después reiniciar el sistema el baud rate en el modo 2 es la
frecuencia del oscilador dividida por 64. Activando SMOD es posible
doblar la frecuencia del baud rate en el modo 2
¸64
Oscilador
SMOD = 0
Baud rate
¸32
SMOD = 1
MODO 2
Arquitectura Comp JJVS/10
66
El baud rate también es modificado por el bit 7 de PCON, SMOD. Activando en
alto SMOD se obtiene el efecto de doblar el baud rate en los modos 1, 2 y 3.
66
Activando el bit SMOD se dobla el baud rate en los modos 1,2 y 3.
¸32
Sobreflujo
de Timer 1
¸16
SMOD = 0
Baud rate
SMOD = 1
MODO 1 y 3
El baud rate del 8051 en los modos 1 y 3 está determinado por el
la razón de sobre-flujo del Timer 1. Como el timer opera a una frecuencia
relativamente alta , el sobre-flujo es dividido por 32 (16 si SMOD = 1)
antes de dar el reloj de baud rate al puerto serial.
Arquitectura Comp JJVS/10
67
67
Usando el timer 1 como reloj de Baud Rate.
Para un 8051, la técnica usual para generar el baud rate es iniciando
TMOD en modo de 8 bits auto-recargable (Modo 2 del timer) y poner el
valor correcto en TH1 para dar la razón de sobre-flujo apropiado para el baud
rate.
BAUD
RATE
9600
2400
1200
19200
9600
2400
1200
FRECUENCIA
DEL CRISTAL
12.000 MHz
12.000 MHz
12.000 MHz
11.059 MHz
11.059 MHz
11.059 MHz
11.059 MHz
SMOD
1
0
0
1
0
0
0
TH1
RELOAD VALUE
-7 (F9H)
-13 (F3H)
-26 (E6H)
-3 (FDH)
-3 (FDH)
-12 (F4H)
-24 (E8H)
BAUD RATE
ACTUAL
8923
2404
1202
19200
9600
2400
1200
Arquitectura Comp JJVS/10
ERROR
7%
0.16%
0.16%
0
0
0
0
68
La formula para determinar el baud rate en los modods 1 y 3, es:
BAUD RATE=TIMER1 OVERFLOW RATE ¸ 32
Por ejemplo, un baud rate de 1200 requiere un sobreflujo del timer calculado así:
1200 = TIMER1 OVERFLOW RATE ¸ 32
TIMER1 OVERFLOW RATE = 38.4 KHz
Sí se usa un cristal de 12 MHz, el TIMER1 esta operando a una razón de 1MHz o
1000 KHz. Ya que el timer debe tener un sobleflujo a una razón de 38.4 KHz, se
requiere un sobreflujo cada:
1000 ¸ 38 =26.04
redondeado se toma 26, ya que el timer se desborda en la transición de FFH a 00H,
se carga en TH1 el valor de –26 o bien E6H.
68
#include <reg51.h>
#define ESC 0x1B
unsigned char lee_dato(void)
{
unsigned char dato;
Funciones para el
puerto serial
void trx_cadena (char *mensaje)
{
char ch;
unsigned char i;
while (!RI)
dato = 0;
RI = 0;
dato = SBUF;
i = 0;
return dato;
do
{
ch = mensaje[i++];
if ( ch != '0' )
trx_dato (ch);
} while ((ch != '0'));
trx_dato(ESC);
}
}
void trx_dato (char dato)
{
unsigned int bde;
while (!TI);
bde = 1;
TI=0;
SBUF=dato;
}
Arquitectura Comp JJVS/10
69
69
Quiz
Realice un programa que envíe la frase “hola
mundo” a una frecuencia de 2400 baudios. Use
el timer 1 para generar la señal de reloj.
Arquitectura Comp JJVS/10
70
70
Diagrama a bloques
Arquitectura Comp JJVS/10
71
71
Comparación
Arquitectura Comp JJVS/10
72
72
Convertidor Analógico Digital
Arquitectura Comp JJVS/10
73
73
Comparadores
Pulse para añadir texto
Arquitectura Comp JJVS/10
74
74
Diagrama a bloques
Arquitectura Comp JJVS/10
75
75