Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cap2 2009 Parte2
Cap2 2009 Parte2
Ejemplo: Calcular el tiempo de la siguiente rutina. Suponer fxtal = 11.0592 MHz DELAY: MOV R3,#250 ; 1 ciclo m ACA: NOP ; 1 ciclo m NOP ; 1 ciclo m NOP ; 1 ciclo m NOP ; 1 ciclo m DJNZ R3,ACA ; 2 ciclo m RET ; 1 ciclo i l m
Solucin: 250x(1+1+1+1+2)+2x1.085 us=1627.5 us
Microcontroladores - Parte 2 1
Internal Timers
El 8051 tiene 2 temporizadores de 16 bits 16 bits TH0 : TL0 Timer 0 16 bits TH1 : TL1 Timer 1
Los temporizadores se incrementan cada ciclo de reloj del sistema (NO h bit l habitualmente t i igual l al ld de cristal) i t l) Los registros de los temposrizadores (TH0, TL0, TH1, TL1) pueden ser ledos o escritos Los desbordes (hacia arriba) de los temporizadores producen cambios en bits de los SFRs asociados que pueden ser empleados para generar interrupciones
Microcontroladores - Parte 2 2
ISR:
retorno
Microcontroladores - Parte 2
Interrupciones
Microcontroladores - Parte 2
Timer
Inicializar los registros del timer Arrancar el timer y el 8051 cuenta. Utiliza con seal de conteo el reloj interno (ciclos de mquina) Cuando los registros valen 0 el 8051 setea un bit para marcar que transcurri el tiempo 8051 P2 P1
TH0 TL0
Microcontroladores - Parte 2 7
Set Timer 0
to LCD
Contador
Cuenta el nmero de eventos Muestra el nmero de eventos en los registros Entrada externa para T0 (P3.4) Entrada externa para T1(P3.5)
8051
TH0
P1
TL0
to LCD
P3.4 a switch T0
8 Microcontroladores - Parte 2
Registros Utilizados
TH0, TL0, TH1, TL1 TMOD (Timer mode register) TCON (Timer control register) Para el 8052 que tiene 3 timers/counters, aparecern otros registros.
T2CON (Ti (Timer 2 control t l register) i t ) TH2 y TL2 slo utilizados en 8052.
Microcontroladores - Parte 2
Se acceden por separado como registros de 8 bits: low byte y high byte.
Microcontroladores - Parte 2 10
Registros
TH0
D15 D14 D13 D12 D11 D10 D9 D8
TL0
D7 D6 D5 D4 D3 D2 D1 D0
Timer 0
TH1
D15 D14 D13 D12 D11 D10 D9 D8
TL1
D7 D6 D5 D4 D3 D2 D1 D0
Timer 1
Microcontroladores - Parte 2 11
Internal Timers
Original 8051 has 2 timers 16 bits TH0 : TL0 Timer 0 16 bits TH1 : TL1 Timer 1
Timers increment on each system clock Ti Timer registers i t (TH0 (TH0, TL0, TL0 TH1, TH1 TL1) can b be read d or written itt t to Timer overflow can cause interrupts or set SFR bits high
Microcontroladores - Parte 2
12
Registro TMOD
Timer mode register: TMOD
MOV TMOD,#21H R Registro i t d de 8 bit bits Define el uso de los dos timers Utiliza los 4 bits menores para el Timer 0 0000 si no se usa) Utiliza los 4 bits mayores para el Timer 1 0000 si no se usa) No bit-addressable
(Poner a (Poner a
(LSB) M0
13
Registro TMOD
GATE Control de disparo. Se habilita Timer/counte solo
cuando la pata INTx = 1 bit de control TRx = 1. Si vale 0 el timer esta habilitado sin importar .
C/T M1 M0
Timer o counter. = 0 para timer (entrada del reloj interno). =1 para contador (entrada de la pata Tx). Bit de modo 1 Bit de modo 0
(MSB) (LSB)
GATE
C/T
M1
M0
GATE
C/T
M1
M0
Timer 1
Microcontroladores - Parte 2
Timer 0
14
M1, M0
M0 y M1 seleccionan el modo de trabajo de los temporizadores 0 y 1.
M1 M0 Modo 0 0 0 0 1 1 0 1 2 Operacin Modo Timer de 13-bits 8-bit THx + 5-bit TLx (x= 0 or 1) Modo Timer de 16-bits 8-bit THx + 8-bit TLx 8-bit autorrecarga (Timer/counter); THx contiene el valor que se recarga en TLx cada vez que desborda. Modo de Timer partido
Microcontroladores - Parte 2 15
1 1
TCON (1/2)
Timer control register: TCON
Nibbles superior para timer/counter timer/counter, nibble bajo para interrupciones
IE1
(LSB) IT0
16
Microcontroladores - Parte 2
TCON (2/2)
TF (timer flag, control flag)
TF0 para timer/counter 0; TF1 para timer/counter 1. 1 TF es como un carry. Originalmente, TF=0. Cuando TH-TL pasa de FFFFH a 0000, el TF = 1. TF=0 : no lleg TF=1: lleg Si habilitamos interrupciones, TF=1 disparar ISR.
Microcontroladores - Parte 2
Gate
Cada timer tiene una forma de start y stop.
GATE=0
Control Interno el arranque y parada del timer se controlan por software. Set/clear el flag TR para arrancar/parar el timer.
GATE=1
Control Externo. El uso de hardware para arrancar y parar el timer por software y por una fuente externa. El Timer/counter es habilitado solo cuando la pata INT esta alta y el flag TR = 1.
Microcontroladores - Parte 2 18
Ejemplo 1
Obtenga el valor de TMOD si deseamos programar el timer 0 en modo 2. Utilizar el cristal del 8051 como fuente y escriba el programa de inicializacin
timer 1
timer 0
Para Timer 0
SETB TR0 CLR TR0 SETB TF0 CLR TF0 = = = = SETB TCON.4 CLR TCON.4 SETB TCON.5 CLR TCON.5
Para timer 1
SETB TR1 CLR TR1 SETB TF1 CLR TF1 = = = = SETB TCON TCON.6 6 CLR TCON.6 SETB TCON.7 CLR TCON.7
20
Microcontroladores - Parte 2
10
Timer - Modo 1
Utilizaremos como ejemplo el timer 0.
Timer 16-bits (TH0 y TL0) TH0-TL0 se incrementan continuamente cuando TR0 = 1. El 8051 deja de incrementar TH0-TL0 cuando TR0 = 0. El timer trabaja con el reloj interno. O sea cuenta en cada ciclo de mquina. Cuando el timer (TH0-TL0) alcanza su mximo de FFFFH, pasa a 0000, y TF0 = 1. El programa debera verificar TF0 y detener el timer 0.
Microcontroladores - Parte 2 21
11
FFFC TF = 0
FFFD TF = 0
TF
FFFE TF = 0
FFFF TF = 0
0000 TF = 1
23
7. Monitorear el timer flag (TF) para esperar que valga 1. Pepe: JNB TF0, Pepe 8 TR0 = 0 para detener el proceso 8. proceso. CLR TR0 9. TF = 0 para la prxima operacin. CLR TF0
Microcontroladores - Parte 2 24
12
12
C/T = 0
TH
TL
TF Flag de desborde
TR
TF =1 cuando FFFF
Microcontroladores - Parte 2
25
Microcontroladores - Parte 2
26
13
Ejemplo 2 (1/2)
Crear una seal rectangular con un ciclo de actividad del 50% en el bit P1.5. Utilizar el Timer 0 para generar los tiempos tiempos. ;Cada pasada es un semiciclo MOV TMOD,#01 ;Timer 0,modo 1(16-bit) ACA: MOV TL0,#0F2H ;Timer = FFF2H MOV TH0,#0FFH CPL P1.5 P1.5 ACALL DEMORA 50% 50% SJMP ACA
Clock completo
Microcontroladores - Parte 2 27
Ejemplo 2 (2/2)
;Generar la demora con el DEMORA: SETB TR0 ;iniciar pepe: JNB TF0,pepe CLR TR0 ;detener CLR TF0 ;limpiar RET
FFF2
TF0 = 0
FFF3
TF0 = 0
FFF4
TF0 = 0
Microcontroladores - Parte 2
FFFF
TF0 = 0
0000
TF0 = 1
28
14
Ejemplo 3 (1/2)
El siguiente programa genera una seal rectangular continua en P1.5 empleando el timer 1. Calcular la frecuencia si fXTAL = 11.0592 11 0592 MHz MHz.
MOV Recar:MOV MOV SETB pepe: JNB CLR CPL CLR SJMP TMOD,#10H TL1,#34H TH1,#76H TR1 TF1,pepe TR1 P1.5 TF1 Recar ;timer 1, modo 1 ;timer =3476H ;iniciar ;detener ;siguiente semiperod ;limpiar TF1 ;recargar timer1
29
Microcontroladores - Parte 2
Ejemplo 3 (2/2)
Solucin:
En Modo E M d 1 se debe d b recargar TH1 TH1, TL1 en cada d desborde si deseamos seal contnua. FFFFH 7634H + 1 = 89CCH = 35276 cuentas Medio perodo = 35276 1.085 s = 38.274 ms Todo el perodo = 2 38.274 ms = 76.548 ms Frequencia = 1/ 76.548 ms = 13.064 Hz.
Notar que ambos semiperodos son iguales.
Microcontroladores - Parte 2
30
15
Ejemplo 4 (1/2)
Con fXtal 11.0592 MHz, escriba un programa para generar una seal rectangular en P2 P2.3. 3 Solucin: (a) El perodo de la seal ser = 1 / 50 Hz = 20 ms. (b) El semiperodo ser 10 ms. (c) 10 ms / 1.085 s = 9216 65536 9216 = 56320 en decimal = DC00H en hex. (d) TL1 = 00H y TH1 = DCH.
Microcontroladores - Parte 2 32
16
Ejemplo 4 (2/2)
lazo: MOV MOV MOV SETB JNB CLR CPL CLR SJMP TMOD,#10H TL1,#00 TH1,#0DCH TR1 TF1,pepe TR1 P2.3 TF1 lazo ;timer 1, modo 1 ;Timer = DC00H ;iniciar timer ;detener ;clear l ti timer fl flag 1 ;recargar timer ya ;que modo 1 NO es ;autorrecarga
33
pepe:
Microcontroladores - Parte 2
Ejemplo 5
Para grandes demoras. MOV MOV LAZO : MOV MOV SETB PEPE: JNB CLR CLR DJNZ TMOD,#10H R3,#200 TL1 TL1,#08 #08 TH1,#01 TR1 TF1,PEPE TR1 TF1 R3,LAZO
Solucin: TH TL = 0108H = 264 en decimal 65536 264 = 65272. UNA demora = 65272 1.085 s = 70.820 ms Demora Total = 200 70.820 ms = 14.164024 segundos
Microcontroladores - Parte 2 34
17
Lapsos Prolongados
Temporizadores encadenados Contadores en memoria
Microcontroladores - Parte 2
35
Microcontroladores - Parte 2
36
18
19
12
C/T = 0
TL1
recarga
TF1
Flag desborde
TR1
TH1
cuando FF
Microcontroladores - Parte 2
TF =1 0
39
Ejemplo 7
Calcular la frecuencia de la seal rectangular generada en la pata P1.0. MOV TMOD,#2H ;Timer 0,modo 2 MOV TH0,#0 LAZO O :MOV O R5,#250 5 #250 ;cuanta t 250 veces ACALL DEMORA CPL P1.0 SJMP LAZO DEMORA:SETB TR0 ;inicio pepe: JNB TF0,pepe CLR TR0 ;detener CLR TF0 ;limpio TF DJNZ R5,DEMORA ;timer 2: auto-recarga
RET
T = 2 (250 256 1.085 s) = 138.88 ms, y frequencia = 72 Hz.
Microcontroladores - Parte 2 40
20
14 15
P3 4 P3.4 P3.5
T0 T1
(MSB) GATE
C/T=1 M1 Timer 1
M0
GATE
C/T=1 M1 Timer 0
Microcontroladores - Parte 2
41
TL0
TF0
Microcontroladores - Parte 2
42
21
Ejemplo 8 (1/3)
Supongamos conectar un pulso de 1 Hz a P3.4. Escriba el programa que coloque el valor del contador 0 en un LCD. TH0 inicial = -60.
8051 P1 P3 4 P3.4
Seal de 1 Hz
a LCD
T0
Microcontroladores - Parte 2
43
Ejemplo 8 (2/3)
ACALL LCD_SET_UP ;inicializar LCD MOV TMOD TMOD,#00000110B #00000110B ;Counter 0,modo 0 modo 2 MOV TH0,#-60 SETB P3.4 ;T0 entrada LAZO :SETB TR0 ;inicia el contador BACK: MOV A,TL0 ;cada 60 eventos ACALL CONV ;conversin en R2,R3,R4 JNB TF0,BACK 0 ;loopea l si i TF0=0 0 0 CLR TR0 ;detener CLR TF0 SJMP LAZO
Microcontroladores - Parte 2 44
22
Ejemplo 8 (3/3)
;convertir binario 8-bit a ASCII
CONV: MOV DIV MOV MOV DIV ORL MOV MOV ORL MOV MOV ORL MOV RET B,#10 AB , R2,B B,#10 AB A,#30H R4,A A,B A,#30H R3,A A,R2 A,#30H R2,A ;divide por 10 ;guarda g dgito g bajo j ;divide por 10 otra vez ;convierte a ASCII
R4
R3
R2
;ACALL LCD_DISPLAY
Microcontroladores - Parte 2 45
Modo 3
Microcontroladores - Parte 2
46
23
8x52
Microcontroladores - Parte 2
47
8052
256 bytes de memoria R/W
MOV MOV R0,#90h R0 #90h A,@R0
Microcontroladores - Parte 2
48
24
Microcontroladores - Parte 2
49
T2CON
BIt 7 6 5 4 3 2 1 0 Nombre TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 DirBIT CFh CEh CDh CCh CBh CAh C9h C8h DESCRIPCIN
Timer 2 Overflow. Valdr 1 en el desborde de T2. Cuyo la interrupcin de T2 esta habilitada producir una interrupcin. Ser activada por TCLK o RCLK.
Timer 2 External Flag. Valdr 1 por una recarga o captura causada por una transicin 1-0 en T2EX (P1.1), pero solo cuyo EXEN2 vale 1. Cuyo esta habilitada la interrupcin de T2, producir la generacin de interrupcin.. Timer 2 Receive Clock. Cuyo vale 1, el temporizador 2 ser utilizado como generador d ela velocidad de la comunicacn serie de entrada. Si vale 0 se utilizar el temporizador 1. Timer 2 Transmit Clock. Cuyo vale 1, el temporizador 2 ser utilizado como generador d ela velocidad de la comunicacn serie de salida. Si vale 0 se utilizar el temporizador 1. Timer 2 External Enable. Cuyo vale 1, una transicin 1-0 en T2EX (P1.1) causar una captura o recarga. Timer 2 Run. Cuyo vale 1, 1 se activar el temporizador 2. 2 Es caso contrario estar desactivado desactivado. Timer 2 Counter/Interval Timer. Si vale 0, el temporizador 2 es un contador interno, si vale 1, se incrementar en cada transicin 1-0 en T2 (P1.0). Timer 2 Capture/Reload. Si vale 0, se producir una autorrecarga en el desborde del temporizador 2 o en una transicin 1-0 en T2EX. Si EXEN2 es 1 una captura ocurrir en cada transicin 1-0 de T2EX.
Microcontroladores - Parte 2
50
25
Temporizador 2 DCEN = 1
Microcontroladores - Parte 2
51
Temporizador 2-Captura
Microcontroladores - Parte 2
52
26