TIMERS Modelo Básico : 2 Timers/Contadores de 16 bits (T0 y T1) Derivados: 3 Timers/Contadores de 16 bits (T0, T1 y T2) Timers: Cuentan ciclos de Máquina (1 cuenta cada 12 clocks) Contadores: Cuentan Flancos descendientes de entradas externas P3.4 External Input T0 P3.5 External Input T1 Para que cuente tiene que estar 1 ciclo de máquina en cada estado (fck / 24 ¡optimista!) Registros: Cada uno posee: dos registros de 8 bits R/W TH0, TL0 y TH1, TL1
Timers Registros de Control: TMOD (0x89) TCON (0x88) C/T:1 Contador0 Timer TF1, TF0:Flags de Overflow Cuentan hacia arriba (up), Overflow 0xFFFF 0x0000 Si está habilitada dan IRQ M1, M0:Modos de funcionamiento C/TM1M0 Gate C/TM1M0 Timer 1Timer 0 Gate TR1TF0TR0 IE1 IT1IE0IT0TF1
Timers
M1=0, M0=0: Modo 0 Contador o Timer de 13 bits (compatible 8048) [No Usar] M1=0, M0=1: Modo 1 Contador o Timer de 16 bits M1=1, M0=0: Modo 2 Contador o Timer de 8 bits (Tli) con auto recarga de Thi sobre Tli en overflow M1=1, M0=1: Modo 3 T0 en Modo 3 : 2 Contadores o Timers de 8 bits (TL0 y TH0) TL0 con los bits de control de TMOD para T0 (puede dar IRQ) TH0 con los bits de control de TMOD para T1 (puede dar IRQ) Con T0 en Modo 3 se pierde control de T1 y este no dá IRQ T1 en Modo 3 : detenido, conservando su cuenta T0 en Modo 3 y T1 en modo 1 : T0 2 Contadores o Timers de 8 bits (TL0 y TH0) T1 Generador de Baud Rate (no da IRQ)
Tiempos Largos y Precisos Por ejemplo: quiero hacer algo cada tres minutos: ;clock = 12 Mhz dseg at 0x20 mseg:ds 1 seg:ds 1 min:ds 1 mseg50 equ 0x ; 50 mseg Tmseg equ 20 ; 1 seg Tseg equ 60 ; 1 minuto Tmin equ 3 ; cant.de minutos cseg at 0000 movmseg,#Tmseg movseg,#Tseg movmin,#Tmin movTH1,#HIGH(mseg50); cargo el timer 1 movTL1,#LOW(mseg50) movTMOD,# B ; Modo 1 movIE,# B ; Habilito IRQ de T1 setbTR1 ; arranco el timer ; IRQT1: push Acc push psw clr TR1 ; paro el timer mov A,#LOW mseg50; 2 cm. clr C; 1 cm subb A,TL1; 2 cm subb A,# Ciclos; 2 cm mov TL1,A; 2 cm mov A,#HIGH mseg50; 2 cm. subb A,#0; 2 cm mov TH1,A; 2 cm setb TR1; 2 cm ; Ciclos = 17 Ciclos equ17 ;Comienza la rutina…….
Tiempos Largos y Precisos ;Comienza la Rutina: decmseg MovA, mseg Jnzfin Movmseg, #Tmseg Decseg MovA,seg Jnzfin Movseg, #Tseg Decmin MovA, min Jnzfin movmin, #Tmin LcallHagaLoQueTengaQueHacer Fin: pop PSW popAcc reti
Timer 2 Patas: P1.0T2 entrada de pulsos para contador P1.1T2EX entrada de control up/down Registros TH2 y TL2 PROPIOS RCAP2H y RCAR2L CAPTURA T2CON, T2MOD CONTROL DEL TIMER T2CON T2MOD EXF2RCLKTCLK EXEN2 TR2C/T2CP/RL2TF2 DCENT2OE
Timer 2 C/T2Contador o Timer TF2 Flag de Overflow EXF2 Flag Overflow MODOS RCLKTCLKCP/RL2TR2MODO BITS AUTORELOAD BITS CAPTURE X1BAUD RATE GENERATOR XX00OFF
Timer 2 Modos de Funcionamiento Baud Rate Generator Para Tx, o Rx, o ambas, se selecciona con RCLK y TCLK, la no seleccionada puede tener el Baud Rate dado por T1 en Modo 1 o 3 T2 se incrementa a Fclk / 2 En este modo no genera interrupción Se recarga con el contenido de RCAP2
Timer 2 AUTORELOAD Se activa con CP/RL2 = 0 En Overflow se recarga con RCAP2H / L Submodos dependen de DCEN (T2MOD), EXEN2 (T2CON) y T2EX (P1.1) DCENEXENT2EXCuentaRecarga enRecarga conFlag 00-UPOverflowRCAP2H / LTF2 01-UPOverflowRCAP2H / LTF2 01 T2EX UP T2EXRCAP2H / LEXF2 1-0DOWNTH/L2 = RCAP2H/L 0XFFFFTF2 1-1UPOverflowRCAP2H / LTF2
Timer 2 CAPTURA EXEN = 0 TIMER NORMAL En OV TF2 = 1 (debe clerearse por soft y puede generar IRQ) EXEN = 1 TIMER NORMAL CON CAPTURA En OV TF2 = 1 (debe clerearse por soft y puede generar IRQ) Con T2EX (P1.1) se copia TH/L2 a RCAP2H/L, se setea EXF2 (puede generar IRQ) INTERRUPCIONES Se habilitan con IE.5 (ET2) La prioridad es la menor de todas Se puede cambiar el nivel de Prioridad con IP.5 (PT2) Vector en 0x002B (tanto para TF2 como para EXF2)
Timer 2 CLOCK OUT El timer 2 puede ser configurado como Clock para dispositivos externos. Para configurarlo: C/T2 (T2CON.1) = 0 T2OE (T2MOD.2) = 1 TR2 (T2CON.2) = 1 arranca, = 0 para Clock sale por P1.0 No genera IRQ Se puede usar como Baud Rate Generator y Clock Out simultaneamente (a la misma frecuencia).
Métodos de Recuperación de errores Watch Dog Mov DPTR, #0x80FE Se codifica como: sjmp 1002FE …..
Métodos de Recuperación de errores Watch Dog Interno (…52 y sucesivos) WDT Contador de 14 bits WDTRST SFR de Control Luego del Reset el WDT queda deshabilitado Para habilitarlo: movWDTRST, # 0x1E movWDTRST, # 0xE1 No se puede deshabilitar Para resetearlo: movWDTRST, # 0x1E movWDTRST, # 0xE1 Cuenta ciclos de máquina. Máximo tiempo seg
Métodos de Reducción de Energía IDLE En activo el C consume 25 mA (AT89S52) En IDLE consume 6,5 mA. Los timers, Interrupciones, Serial Port, etc están activos, la CPU no recibe clock. Se ingresa pormedio de PCON, poniendo IDL = 1 Se sale con cualquier IRQ habilitada o con Reset La instrucción que se ejecuta es la siguiente a: movPCON, # 1 GF1 y GF0 son bits de Usuario --- GF1 GF0PDIDL SMOD
Métodos de Reducción de Energía POWER DOWN El consumo en este estado es de 50 A Se entra poniendo: movPCON, # 2 Solo se sale con Reset Los registros se inicializan La RAM interna se preserva Los ports conservan su valor, ALE y PSEN wuedan en 0 En modelos más modernos, se sale con IRQ esterna habilitada.