Download - CURSO PIC16F87X 6
-
8/14/2019 CURSO PIC16F87X 6
1/5
EL MDULO TIMER2El TIMER2 es un temporizador-contador ascendente de 8 bits queocupa la posicin 11H del banco deregistros especiales, con un preesca-ler y un postscaler. Se puede usarcomo base de tiempo para el mduloPWM, el mdulo CCP (Mdulo deCaptura y Comparacin) y el PuertoSerie Sncrono (SSP). El registroTMR2 se puede leer y escribir y sepone a cero despus de realizar unReset.
La seal de reloj interna(FOSC/4) antes de llegar al TMR2
pasa por un preescaler (Predivisor)con rangos de 1:1, 1:4, 1:16 que se
selecciona a travs de los bitsT2CKPS1:T2CKPS0 (T2CON). El postsrscaler tiene comomisin poner a nivel alto el flag deinterrupcin del TMR2 cuando sehaya producido la igualdad entre elregistro PR2 y el TMR2 un nmerode veces comprendido entre 1 y 16 yque se indica con los bitsT2OUTPS3:T2CKPS0 (T2CON)
OPERACIONES CON EL
TIMER2
El Titner2 tiene emparejado el
registro PR2 que ocupa la posicinde 92H del banco 1 de registros
especiales, de manera, que al incre-mentarse TMR2 y coincidir con elvalor del registro PR2 se produce unimpulso de salida por EQ, estosimpulsos pueden ser divididos porun postescaler antes de activar elflag TMR2IF (PIR1). El registroPR2 es un registro de 8 bits que pue-de ser escrito y ledo. Este registrotoma el valor FF despus de unReset.
El postscaler permite dividir laseal que activa el flagde interrupciones por desbordamien-to del TMR2 por cualquier valor
comprendido entre 1:1 hasta 1:16,para controlar el postescaler se utili-
CURSO DEMICROCONTROLADORESPIC16F87X (...y VI)
CURSO DEMICROCONTROLADORESPIC16F87X (...y VI)
Fernando Remiro DomnguezProfesor de Sistemas Electrnicos
IES. Juan de la Ciervawww.terra.es/personal/fremiro
MICROCON
TROLADORES
60RESISTOR
Figura 1.- Diagrama de bloques del mdulo TIMER2
Curso (60-64) 3/7/03 09:47 Pgina 60
-
8/14/2019 CURSO PIC16F87X 6
2/5
zan los bit TOUTPS3:TOUTPS0(T2CON ).
El Preescaler y el Postescaler seponen a cero cuando:q Se escribe sobre el registro TMR2q Se escribe sobre el registro
T2CONq Se produce un reset (POR, MCLR
restablecido, WDT reestablecido oBOR)
TMR2 no se pone a cero cuandose escribe en T2CON.
Para reducir el consumo total delmicrocontrolador se puede "apagar"el temporizador poniendo a cero elbit TMR2ON (T2CON).
INTERRUPCIONES DEL
TIMER2El temporizador TMR2 tiene unflag de desbordamiento el TMR2IF(PIR1).
El TMR2 tiene asociado unRegistro de Periodo PR2, que ocupala posicin 92h. Cuando el valor decuenta de TMR2 coincide con elvalor cargado en PR2 se genera unimpulso en la salida EQ (ver la Figu-ra 1) y se pone a cero el TMR2. Estosimpulsos pueden ser divididos por elpostdivisor antes de activar el flagTMR21F( PIR1).
El temporizador puede producir
una interrupcin si se pone a 1 el bitTMR2IE ( PIE1)
SALIDA DEL TMR2
La salida de TMR2 (antes delpostscaler) alimenta al Mdulo deSSP que opcionalmente puede usar-se para generar la seal de reloj dedesplazamiento.
PROGRAMA EJEMPLO
DE FUNCIONAMIENTO
DEL TIMR2 CON
INTERRUPCIONES.
Para comprobar el funcionamien-
to de este programa, utilizaremos elmismo montaje que hemos utilizadopara comprobar el funcionamientodel Timer0 y del Timer1, que es elque se representa en la Figura 2.
La estrategia para conseguirla temporizacin de aproximada-mente un segundo es la que se refle-
ja en el diagrama de flujos de laFigura 3, y consiste en lo siguiente.Partiendo de la base de que nuestromicrocontrolador tiene un cristal de
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
--- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Bit 7 Bit 0
bit 7: No implementado: Se lee como 0
bit 6-3: TOUTPS3:TOUTPS0: bit de seleccin del rango del divisor del
Postescaler para el TIMER2
0000 = Divisor del postescaler 1:1
0001 = Divisor del postescaler 1:2
0010 = Divisor del postescaler 1:3
0011 = Divisor del postescaler 1:4
0100 = Divisor del postescaler 1:5
0101 = Divisor del postescaler 1:6
0110 = Divisor del postescaler 1:7
0111 = Divisor del postescaler 1:8
1000 = Divisor del postescaler 1:9
1001 = Divisor del postescaler 1:10
1010 = Divisor del postescaler 1:11
1011 = Divisor del postescaler 1:12
1100 = Divisor del postescaler 1:13
1101 = Divisor del postescaler 1:14
1110 = Divisor del postescaler 1:15
1111 = Divisor del postescaler 1:16
bit 2: TMR2ON: bit de activacin del TIMER2
1:= habilita el funcionamiento del TIMER2
0 = Inhibe el funcionamiento del TIMER2
bit 1-2: T2CKPS1:T2CKPS0 Seleccin del rango de divisor del Preescaler
del TIMER2
00 = Divisor del Preescaler 1:1
01 = Divisor del Preescaler 1:4
Ix = Divisor del Preescaler 1:16
REGISTRO T2CON: REGISTRO DE CONTROL DEL TIMER2(DIRECCIN 12H)
Curso (60-64) 3/7/03 09:47 Pgina 61
-
8/14/2019 CURSO PIC16F87X 6
3/5
cuarzo de 4 Mhz, y de que un ciclomquina se ejecuta en un 1 s, lamxima cuenta del que podemoshacer con el TIMER2 es de 256 s,si tenemos en cuenta la mxima divi-sin del preescaler de 1/16 y delpostscaler 1/16 la mxima cuenta otemporizacin a la que se puede lle-gar es a 256 x 16 x 16 = 65536 s.Por lo tanto, si se carga el registro deperiodos PR2 con el valor decimal
195, con un preescaler de 1/16, sepuede llegar a 3120 s y por ltimocon un postescaler de 1/16 se obtieneuna temporizacin de 49.920 s queaproximadamente es de 50 ms. Puesbien, si esta temporizacin se realiza20 veces, ya tenemos prcticamente1 segundo.
El programa es el siguiente, en elque como viene siendo habitualestn marcado en color azul las lne-
as de cdigo que hemos eliminadopara utilizar el programa bootloaderpara poder realizar la carga del mis-mo y en color verde, las lneas quehemos aadido, de tal manera queeliminado las lneas de color verde yhabilitando las que estn en azul elprograma puede grabarse directa-mente en un PIC16F876.
Direccin Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Valor en elPOR,BOR resto de Reset
0Bh,8Bh INTCON GIE PEIE T0IE INTE T0IF RBIE INTF RBIF 0000 000x 0000 000u
10Bh,18Bh
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
0Bh PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IF 0000 0000 0000 0000
11h TMR2 Mdulo Del registro Timer2 0000 0000 0000 0000
12h T2CON --- TOUTPS3 TOUPS2 TOUPS1TOUPS0 TMR2ON T2CKPS1 T2CKPS0 - 000 000 - 000 0000
92h PR2 Registro de perodo del TMR2 1111 1111 1111 1111
REGISTROS ASOCIADOS AL TMR2
MICROCON
TROLADORES
62RESISTOR
Leyenda
x = desconocido, u = inalterado; - = no implementado se lee como 0. Las celdas sombreadas no son usadas
por el TIMER2
Nota 1: Los bits PSPIE y PSPIF estn reservados para el PIC16F873/876, mantener estos bits a cero.
Figura 2.- Circuito de aplicacin para el programa TMR2_1
Curso (60-64) 3/7/03 09:47 Pgina 62
-
8/14/2019 CURSO PIC16F87X 6
4/5
MICROCON
TROLADORES
63RESISTOR
Figura 3.- Organigrama del programa TMR2_1.asm
Curso (60-64) 3/7/03 09:47 Pgina 63
-
8/14/2019 CURSO PIC16F87X 6
5/5
;**********************************************************************************;TIMER2-1.asm;El TMR2. Temporizacin hace que el display que est conectado al PORTB se incremente cada; segundo. El TMR2 provoca una interrupcin cada 50 mS. Transcurridas 20 interrupciones, el tiempo
; total obtenido es de 1 segundo.; Revisin : 0.0 Programa para PIC16F87X; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS; Perro Guardin : deshabilitado Tipo de Reloj : XT; Proteccin del cdigo : OFF;**********************************************************************************
List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos
VECES equ 0x20 ;Variable de temporizacinCONTADOR equ 0x21 ;Variable del contador
; org 0x00 ;Vector de Reset; goto INICIO
org 0x04goto INTERUPCION ;Vector de interrupcin
;********************* TABLA CON LOS VALORES DE LOS DIGITOS ******************TABLA addwf PCL,F ;Suma al contador de programa el digitoDT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67;
;*******************************************************************************;PROGRAMA DE ATENCIN A LA INTERRUPCION. se ejecuta cada 50 ms, cuado se ejecuta;20 veces, indica de que ha transcurrido 1 segundo
INTERUPCION decfsz VECES,F ;Ha pasado un segundo ??goto No_es_1_seg ;Noincf CONTADOR,F ;Si, incrementa el contadormovlw .10subwf CONTADOR,Wbtfsc STATUS,Z ;Contador > 9 ??clrf CONTADOR ;Si, ponerlo a 0movf CONTADOR,Wcall TABLA ;Convierte a 7 segmentosmovwf PORTB ;presenta el dato en el displaymovlw .20
movwf VECES ;Reinicia variable delayNo_es_1_seg bcf PIR1,TMR2IF ;Repone el flag del TMR2clrf TMR2 ;Reinicia el TMR2retfie
;*****************************************************************************;PROGRAMA PRINCIPAL;*****************************************************************************INICIO clrf PORTB ;Desconecta salidas
bsf STATUS,RP0 ;Selecciona banco 1movlw b'00000110'movwf ADCON1 ;Configura PORTA E/S digitalesclrf TRISB ;Configura PORTB como salidabsf PIE1,TMR2IE ;Habilita interrupcin del TMR2movlw .195movwf PR2 ;Carga registro de periodos con 195bcf STATUS,RP0 ;Selecciona banco 0movlw b'01111111'movwf T2CON ;TMR2 ON, preescaler 1/16 y postcaler 1/16
clrf TMR2 ;pone a cero TMR2movlw .20movwf VECES ;Inicia variable de VECESmovlw b'11000000'movwf INTCON ;Habilita interrupcionesclrf CONTADOR ;Inicia el contadorgoto $ ;Bucle infinito
;*****************************************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la pgina 0goto INICIO ;Salto a la direccin de INICIO del programa
;*****************************************************************************end
MICROCON
TROLADORES
64RESISTOR
Curso (60-64) 3/7/03 09:47 Pgina 64