curso pic16f87x 6

Upload: proteus7

Post on 31-May-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 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