Sistemas Electrónicos Con P: Seminario 4-b Familia MSC51: Periféricos
Sistemas Electrónicos Con P: Seminario 4-b Familia MSC51: Periféricos
Seminario 4-b
Familia MSC51: Periféricos
J. Soret
DIE-UVEG
26/2/07
1
Contenido
Introducción
Periféricos más comunes. Descripción genérica
y específica para MSC-51
Puertos E/S
Gestor de interrupciones
Temporizadores/contadores
Interfaz serie (USART)
Gestor de consumo
Ejemplos de aplicación
2
Periféricos
Periférico: procesador de propósito específico
estándar
Opuesto al concepto de procesador de propósito general
Algunos de los propósitos específicos son tan comunes que
se pueden etiquetar como “estándar”
Los μC incluyen en su encapsulado todo lo que necesitan
para la aplicación a controlar, incluido periféricos
Periféricos comunes en la familia MSC-51:
Puertos: P0..P3
Temporizadores/contadores: T0, T1, (en 8052, también T2)
Interfaz serie
Gestor de interrupciones. Gestor de consumo
3
SFR
4
Puertos: E/S
Operaciones de escritura
Cada pin está latcheado y
presenta estructura de buffer:
P1,P2,P3: open-drain con
pull-up interno, 4 TTL-LS
P0: totem-pole, 8 TTL-LS
Operaciones de lectura
Para leer, el latch debe
contener ‘1’
A veces se lee de pin, a
veces de latch (instrucciones
“read-modify-write”)
Con frecuencia, dos ¿Qué pasa con P0 y P2?
funciones por pin
5
Puertos: E/S
6
Interrupciones
Sea un periférico que recibe datos de modo asíncrono,
los cuales deben ser servidos a una CPU. Opciones:
El procesador puede monitorizar al periférico regularmente
(polling) para detectar cuándo ha recibido un dato
El periférico puede interrumpir a la CPU cuando consiga el dato
La idoneidad de una u otra estrategia depende de la aplicación
Interrumpir implica una o varias líneas/pines extra: INT
Si INT se afirma, la CPU suspende el programa ordinario y
salta a ejecutar la rutina de servicio de la interrupción (Interrupt
Service Routine, o ISR)
El evento (E/S en este caso, puede ser otra cosa) es controlado
por interrupción
La monitorización de la línea INT se realiza por hardware y no
supone una pérdida de tiempo de proceso para la CPU
7
Interrupciones
¿Cómo determina la CPU la dirección (vector) donde
reside la ISR?. Alternativas
Interrupción fija
El vector está grabado dentro del dispositivo y no puede ser
cambiado
A partir del vector, o bien se almacena ISR, o bien se coloca una
instrucción de salto a la ISR almacenada en otra área de memoria
Distintos periféricos, distintos pines INT: limitación en nº periféricos
Interrupción vectorizada
Un solo pin INT. El periférico debe proporcionar el vector de la ISR
Solución frecuente en configuración mP, si existen numerosos
periféricos conectados a través de un bus de sistema
Tabla de direcciones de interrupción
Variante de la anterior
8
Ejemplo: E/S con localización INT fija
(configuración mP)
Tiempo
1(a): El μP ejecuta el programa principal. 1(b): P1 recibe un dato en un
registro con la dirección 0x8000
4(a): ISR lee el dato de 0x8000, lo modifica, 4(b): Después de ser leído, P1
y escribe el resultado en 0x8001. niega Int
9
Ejemplo: E/S con localización INT
fija
1(a): El μP ejecuta el programa principal Memoria de programa μP Memoria de datos
ISR
1(b): P1 recibe un dato en un registro con 16: MOV R0, 0x8000
17: # modifica R0 Bus de sistema
la dirección 0x8000
18: MOV 0x8001, R0
19: RETI # ISR retorna
... Int P1 P2
Programa principal
... PC 0x8000 0x8001
100: instrucción
101: instrucción
10
10
Ejemplo: E/S con localización INT
fija
2: P1 afirma Int para solicitar servicio Memoria de programa μP Memoria de datos
por parte del μP ISR
16: MOV R0, 0x8000
17: # modifica R0 Bus de sistema
18: MOV 0x8001, R0
19: RETI # ISR retorna
... Int P1 P2
Programa principal 1
... PC 0x8000 0x8001
100: instrucción
101: instrucción
11
11
Ejemplo: E/S con localización INT
fija
3: Después de completar la instrucción Memoria de programa μP Memoria de datos
100, μP ve Int afirmada, salva el valor ISR
del PC (100), y carga PC con la 16: MOV R0, 0x8000
17: # modifica R0 Bus de sistema
localización de ISR, que es fija (16)
18: MOV 0x8001, R0
19: RETI # ISR retorna
... Int P1 P2
Programa principal
... PC 0x8000 0x8001
100: instrucción
101: instrucción 100
12
12
Ejemplo: E/S con localización INT
fija
4(a): ISR lee el dato de 0x8000, lo Memoria de programa μP Memoria de datos
modifica, y escribe el resultado en ISR
0x8001.. 16: MOV R0, 0x8000
17: # modifica R0 Bus de sistema
4(b): Después de ser leído, P1 niega Int 18: MOV 0x8001, R0
19: RETI # ISR retorna
... Int P1 P2
Programa principal 0
... PC 0x8000 0x8001
100: instrucción
101: instrucción 100
13
13
Ejemplo: E/S con localización INT
fija
5: Se vuelve de ISR: se restaura PC con Memoria de programa μP Memoria de datos
el valor 100+1=101, dirección a partir ISR
de la cual μP reanuda la ejecución del 16: MOV R0, 0x8000
programa. 17: # modifica R0 Bus de sistema
18: MOV 0x8001, R0
19: RETI # ISR retorna
... Int P1 P2
Programa principal
... PC 0x8000 0x8001
100: instrucción +1
101: instrucción 100
14
14
Ejemplo: E/S con INT vectorizada
(configuración mP)
Tiempo
1(a): El μP ejecuta el programa principal. 1(b): P1 recibe datos en un registro
con la dirección 0x8000.
15
15
Ejemplo: E/S con INT vectorizada
16
16
Ejemplo: E/S con INT vectorizada
2: P1 afirma Int para solicitar servicio por Memoria de programa μP Memoria de datos
parte del μP ISR
16: MOV R0, 0x8000
17: # modifica R0 Bus de sistema
18: MOV 0x8001, R0
19: RETI # ISR retorna
... Inta P1 P2
Programa principal Int
... PC 1 16
100: instrucción 0x8000 0x8001
101: instrucción 100
17
17
Ejemplo: E/S con INT vectorizada
18
18
Ejemplo: E/S con INT vectorizada
19
19
Ejemplo: E/S con INT vectorizada
20
20
Ejemplo: E/S con INT vectorizada
21
21
Tabla de vectores de interrupción
Compromiso entre interrupciones fijas y
vectorizadas
Un solo pin para INT
Tabla en memoria conteniendo direcciones ISR (quizá
256 palabras, 8 bits)
Los periféricos no proporcionan el vector directamente,
sino un índice a la tabla
La comunicación con el periférico implica menos (8) bits
Se puede cambiar la localización de la ISR sin cambiar el
periférico
Solución aplicada en PCs: un CI hace de gestor de
interrupciones
22
22
Arquitectura de un programa que usa INT
La más frecuente/sencilla: Background Foreground
Super-bucle + ISRs
Super-bucle: el programa se
ejecuta mientras se alimente Función 1
t2
El empleo de ISRs permite
construir aplicaciones Función 1
aparentemente multitarea t3
sobre una única CPU Función 2
t4
Varios (dos, mínimo) niveles t5 ISR 1
de ejecución:
Principal, ordinario, padre Función 2
(background)
ISR, hijos (foreground)
23
23
Salto a ISR
Los procesadores suelen tratan el salto a ISR como una
llamada a subrutina (pensad en ámbitos de validez de las
variables en lenguajes de alto nivel)
Salvar (y restaurar) completamente el estado (PC, registros,
variables), pueden tardar varios cientos de ciclos de instrucción
Normalmente se suele salvar el estado parcialmente,
habitualmente sólo PC (dirección de la instrucción en
programa principal donde hay que volver después de ISR)
O bien ISR no debe modificar los registros, o bien hay que salvarlos
primero
Estructura en banco de registros (ej. 8051), pila (stack), ayudas muy
valiosas
Programando en bajo nivel, cuidado con dónde y como guardamos
los datos (inicializar pila adecuadamente, etc.)
24
24
Arquitectura de una ISR
Esqueleto posible para ISR (código MCS-51)
ISR_1: CLR EA ;Deshabilita INTs
PUSH ACC ;Guarda entorno (apila): ACC,
PUSH PSW ; PSW y banco PROG PPAL
ORL PSW,#00011000b ; Entono ISR_1: banco 3
JBC FLAG, TRATA ; Si FLAG no se resetea HW
SJMP FIN_ISR_1
TRATA: ….. ; lo que tenga ISR que hacer
FIN_ISR_1: POP PSW ; restaura entorno (desapila):
POP ACC
SET EA ;Habilita INTs
RETI
25
25
Otros asuntos sobre INT
Enmascarable vs. no enmascarable
Enmascarable: el programador define el estado de cierto
26
Interrupciones MCS-51
Importante en un μC
Necesario habilitar y
priorizar
2 registros: IE, IP
2 niveles prioridad
En el 8051, 7 fuentes de
interrupción (eventos
posibles) ligados a
periféricos
2 externas
5 internas
En el 8052, 2 fuentes
más
Tabla de vectores fija
27
27
Interrupciones: IE (enable), IP (priority)
28
28
¿Cómo se atiende la interrupción?
Los flags de interrupción se testean en cada S5P2
Se identifica la fuente en C2
Se realiza un salto largo al vector de interrupción
(C3, C4), salvo que:
Se esté tratando interrupción con mayor prioridad: se
ignorará
La instrucción en curso no se encuentre al final de su ciclo:
se terminará
La instrucción en curso sea RETI o implique a IE o IP: al
menos se ejecutará una instrucción más
29
29
¿Cómo se atiende la interrupción?
Si la interrupción es aceptada:
La instrucción en curso se completa
Se apila el contenido de PC
Se salva internamente el estado de las interrupciones
Las interrupciones se bloquean para el mismo nivel
El PC se carga con el vector de interrupción
Se ejecuta la rutina de tratamiento correspondiente
La rutina debe terminar con RETI:
Restaura el contenido de PC y el estado anterior de las
interrupciones
Excepción: interrupciones compartidas por dos eventos
posibles
Tiempo de respuesta, más de 3 y menos de 9 ciclos
máquina
30
30
Vectores y flags
31
31
Un uso curioso de la INT externa
Ejecutar un programa en modo traza (ver transp. 51)
INT_0:
JNB P3.2,$ ;Espera aquí hasta que INT0 a ‘1’
JB P3.2,$ ;Espera aquí hasta que INT0 a ‘0’
RETI ;Vuelve y ejecuta una instrucción
32
32
Reset
La interrupción de mayor prioridad, no enmascarable
Se produce si se mantiene la señal a nivel bajo durante al
menos dos ciclos máquina (24 Tclk)
La inicialización se produce al cabo de 19 Tclk
33
33
Reset
34
34
Temporizadores, contadores, y otros
Temporizador (timer): mide intervalos de
tiempo
Para producir eventos controlados por tiempo
P.ej, mantener el semáforo en amarillo durante 10s.
Para medir la duración de eventos de entrada Timer básico
35
35
Contadores
Son como temporizadores,
pero cuentan pulsos (Cnt_in)
de una entrada externa en
lugar de pulsos Clk Timer/contador
Clk
P.ej., contar botellas sobre un Mux Contador
creciente
16 Cnt
36
36
Otras estructuras en temporizadores
Temporizadores de Timer de intervalo Timer de 16/32 bits
Pre-escalado
Divisor de Fclk Modo
Incrementa el rango a costa
de una menor resolución
37
37
Un ejemplo: medida del tiempo de reacción
Indicador
luminoso Botón
LCD T = 114 ms
38
Temporizador “watchdog”
Se tiene que inicializar el
temporizador cada cierto Fosc = Fclk =
tiempo, y si no, overflow Overflow Overflow Al reset de
12 Mhz Prescaler 1Mhz Scalereg Timereg
genera señal 11 bits 16 bits sistema o a
interrupción
Muy importante en Checkreg
aplicaciones embedded:
detección de fallos, auto-
reset
/* main.c */ rutina_watchdog_reset (){
Otra aplicación: timeout /* Checkreg habilita. Scalereg se carga con 0
main(){ y timereg se carga con el valor 11070 */
P.ej, cajero esperar hasta insertar tarjeta
llamar rutina_watchdog_reset checkreg = 1
automático scalereg = 0
Timer 16 bits, 2 μs while(transacción en marcha){
if(botón apretado){ }
timereg = 11070
39
39
Temporizadores en MCS-51
40
40
TMOD: modos de funcionamiento de T0 y
T1
41
41
T0 y T1: 4 modos de funcionamiento
42
42
TCON: control de T0 y T1
43
43
T2: modos de funcionamiento
44
44
T2CON: control de T2
45
45
Ejercicio
Generar señal cuadrada de 3 ms de periodo en el
TM311, asumiendo un Tclk de 12 MHz
Solución posible:
USES 80537
ORG 0
LJMP 8000H
ORG 8000H
MOV TMOD, #0h
SETB TR0
BUCLE: MOV TH0,#1AH
MOV TL0,#24H
ACI: JNB TF0, ACI
CPL P1.1
CLR TF0
SJMP BUCLE
END
46
46
Comunicaciones
Tipos de interfaces: paralelo y serie
Los primeros son rápidos. Los segundos, aunque más lentos, presentan
ventajas:
En la construcción de PCBs: tamaño de PCB, consumo, etc.
Decodificación exige lógica extra: más componentes, más coste
Comportamiento EM: una pista es una antena
Por ello, tienen gran interés, y han originado diversos modelos estándar.
Protocolo: convenio común entre sistemas para la transmisión de
datos. Fija aspectos tales como la representación de los datos,
relación temporal entre emisor y receptor, mecanismos de control de
flujo, etc.
La transmisión de los datos se suele realizar carácter a carácter
(bytes, usualmente). Dentro de cada uno, la cadencia de bit debe ser
constante
Crítico para conseguir una correcta transferencia
Tipos de protocolos:
Síncronos, en los que el flujo de información está sincronizado por una
señal de reloj (CLK)
Asíncronos, en los que los caracteres aparecen en el canal en instantes
arbitrarios de tiempo
Otra clasificación, según flujo de datos: Simplex /H-duplex /F-duplex
47
47
Transmisión serie mediante USARTs
Periférico: USART (Universal Asynchronous /
Synchronous Receiver Transmitter)
Funcionamiento:
Para transmitir toma datos en paralelo y los transmite en serie
Recibe datos en serie y los convierte en paralelo para su
lectura
Transmisor y receptor tienen que estar sincronizados, pero
¿cómo conseguirlo?
Dispositivo
0 “embedded”
1 1 1
0 1 1
0
10011011 10011011
48
48
Comunicación serie asíncrona
Transmisor y receptor parten de la misma base de tiempos (XTAL)
Si el enlace es síncrono, CLK por línea aparte de los datos
Si es asíncrono, información adicional para sincronización adjunto
al DATO y en la misma línea
Formato de trama:
Bit de arranque: primera transición
Bits de datos: 5 a 8 intervalos de bit
Bit de paridad: opcional para detección de errores
Bits de paro: 1, 1.5 o 2 intervalos de bit
Penalización( % de bits añadidos):
bits de control
Penalización(%) = × 100
bits de datos
Tiempo de caracter
49
49
Comunicación serie asíncrona
Error entre las bases de tiempos de receptor y transmisor
Se utiliza un reloj de periodo mucho menor que el intervalo de bit
Habitualmente: 16 veces mayor que la velocidad de
transmisión
Se muestrea la línea en el 8º periodo
La máxima desviación aceptable (ΔT), pues:
TBIT
> Δ T ⋅ (n ⋅ 16 − 8 ) donde:
2 TBIT: Intervalo de bit
ΔT: desviación del reloj
Bit de arranque
n: número de bits
P erio do de
m uest reo
50
50
Modelo UART genérico
Arquitectura general de un CI dedicado a comunicaciones
serie:
Paralelo-serie
D0..D7
A0..A3 Lógica de
control
INT, CS,
WR, RD, RST Reg.Salida
Canal
Reg. Entrada
Temporizador
CLK de la
comunicación
Serie-paralelo
51
51
Periférico de comunicaciones MCS-51
El 8051 incluye un periférico USART
Registro SBUF (buffer)
Full-duplex: SBUF físicamente duplicado
Registro SCON (control):
Selección modo de trabajo: 1 modo síncrono, 3 modos
asíncronos
Selección de velocidad de comunicación (con frecuencia
junto con algún temporizador)
Noveno bit de dato para transmitir y recibir (TB8 y RB8)
Gestión de interrupciones asociadas al puerto serie (flags
TI y RI)
52
52
SCON: control del puerto serie
53
53
Baudios
Modo 0: fija, 1/12 de
la frecuencia del
oscilador
Modo 2: variable en
función de SMOD
SMOD
BAUDIOS en Modo 2 = 2 • frecuencia oscilador
64
Modos 1 y 3:
variable. Empleando
T1 en autorecarga,
la velocidad viene
dada por: SMOD
frecuencia oscilador
BAUDIOS en Modos 1 y 3 = 2 •
32 12 • (256 - (TH 1))
54
54
Comunicación síncrona: Modo 0
55
55
Comunicación asíncrona: Modo 3
56
56
Cronogramas Modo 0 y Modo 3
57
57
¿ Y el noveno bit?
Gracias a flags RB8 y TB8 se dispone de un noveno
bit en la comunicación serie
Posibles usos:
Palabra de 9 bits MOV A, @R1 ;Saco el dato a enviar
Bit de paridad: MOV C, P ;Obtengo su paridad.
MOV TB8,C ;Lo coloco en TB8
MOV SBUF, A ;Inicio el envío
58
58
Gestión del consumo
La tecnología CMOS es estática. Es posible la
gestión del consumo, muy interesante en
aplicaciones “embedded”
2 modos, invocables por software (registro PCON):
Modo idle:
CPU parado. RAM, SFR y periféricos funcionando
Reducción del consumo respecto al modo normal: ~15%
desde 15 – 5.5 mA hasta 5 – 1 mA
Salida mediante INT o RST
Modo power down:
CPU y periféricos parados. RAM y SFR “congelados”
Consumo: ~ 100 - 20 μA
Salida mediante RST: se inicializa SFR, pero se
recupera intacta la RAM
CLK puede ralentizarse, e incluso pararse
59
59
Gestión del consumo
60
60
Recapitulando
Hemos repasado los aspectos más relevantes de la familia MSC-51:
arquitectura, mapa de memoria, juego de instrucciones y periféricos
Para aprender hay que PRACTICAR !!
En el siguiente tema, ejercicios de diseño
Muchas webs sobre el tema:
www.8052.com
www.keil.com
http://ee.cleversoul.com/8051.html
Etc, etc,etc…
¿Qué queda? Arquitecturas avanzadas, herramientas de alto nivel,
aplicaciones en sistema embarcados (sistemas operativos,
comunicaciones), integración SoC:
Asignatura 3º ITTSE: Sistemas Electrónicos con μP
El uso de mC es básico para trabajar como ingeniero de diseño en
electrónica
61
61