Curso PIC16f87X 5

download Curso PIC16f87X 5

of 8

Transcript of Curso PIC16f87X 5

  • 8/14/2019 Curso PIC16f87X 5

    1/8

    MODULO TIMER0El mdulo TIMER0 es untemporizador/contador con lassiguientes caractersticas:q El temporizador / contador

    dispone de 8 bitsq Puede escribirse y leerseq Preescaler programable por

    software de 8 bitsq Puede trabajar con el reloj

    interno o con una seal de relojexterna

    q Dispone de una interrupcin pordesbordamiento al pasar de FFha 00h

    q Seleccin de flanco ascendente odescendente para el flaco delreloj externo

    En la Figura 1 se muestra undiagrama de bloques del TIMER0y el preescaler que comparte con elWDT. Puede encontrarseinformacin adicional sobreel mdulo Timer0 en el manual

    de referencia de losmicrocontroladores de la escalamedia (DS33023).

    El modo temporizador seselecciona poniendo a cero el bitT0CS (registro OPTION_REG). En el modo temporizador, elmdulo Timer0 se incremento encada ciclo de instruccin (sin elpreescaler). Si el registro TMR0 seescribe, el incremento se inhibedurante los siguientes dos ciclos deinstruccin. EL usuario puedetrabajar teniendo en cuenta esto yajustando el valor a cargar en elTMR0.

    El modo contador se seleccionaponiendo a uno el bit T0CS(registro OPTION_REG ). Elmodo contador, Timer0 seincremento en cada flaco de subidao de bajada de la seal que le llegapor RA4/TOCK1. El flanco deincremento se determina por el bitT0SE (registro OPTION_REG

    ). Ponindose a cero T0SE seselecciona el flanco ascendente.El preescaler se comparteexclusivamente entre el TIMER0 yel WDT. Y adems no es delectura/escritura.

    INTERRUPCIN DEL TIMER0La interrupcin de TMR0 se

    produce cuando el registro TMR0se desborda al pasar de FFh a 00h.Este desbordamiento pone auno el bit T0IF (INTCON).La ininterrupcin puedeenmascararse poniendo a cero elbit T0IE (INTCON ). EL bitT0IF debe ponerse a cero porsoftware al finalizar la rutina deatencin a la interrupcin deldesbordamiento de TMR0. Lainterrupcin de TMR0 no saca almicrocontrolador del estado deSLEEP, debido a que eltemporizador est desactivadodurante el modo SLEEP

    CURSO DEMICROCONTROLADOREPIC16F87X (...y V)

    CURSO DEMICROCONTROLADOREPIC16F87X (...y V)

    Fernando Remiro DomnguezProfesor de Sistemas Electrnicos

    IES. Juan de la Ciervawww.terra.es/personal/fremiro

    Foosc/4

    Bus de datos

    El bit T0IF sepone a 1 si hayoverflow

    T0SE

    RA4/T0CKIpin

    Sincronizaci ncon el reloj

    internoTMR0

    8

    0

    11

    0

    T0CS

    PreescalerProgramable

    PS2,PS1,PS0 PSA

    3

    PSout

    PSout

    (Retardo de 2 ciclos) M I C R O C O N

    T R O L A D O R E S

    52RESISTOR

    Figura 1.- Diagrama de bloques del TIMER 0

    Notas:

    1. El preescaler es compartido con el WDT (En la Figura 2 se puede ver un diagrama de bloques detallado2. TOCS, TOSE, PSA, PS2:PS0 (OPTION_REG)

    Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 52

  • 8/14/2019 Curso PIC16f87X 5

    2/8

    UTILIZACIN DEL TIMER0CON UN RELOJ EXTERNO

    Cuando no se utiliza elpreescaler, la entrada de relojexterna es igual a la salida delpreescaler. La sincronizacin deTOCKI con los relojes de faseinterior se acopla, a la salida delpreescaler en los ciclos Q2 y Q4 delos relojes de fase internos. Porconsiguiente, es necesario queTOCKI est a nivel alto por almenos durante 2Tosc (y unpequeo retardo de 20ns) y a nivelbajo por lo menos 2Tosc (y unretardo RC de 20ns).

    PREESCALERHay slo un preescaler

    disponible que est compartido y

    puede asignarse indistintamente almodul de TIMER0 y el al WDT.La asignacin del preescaler alTimer0 hace que no haya ningnpreescaler para el WDT, y viceversa.Este preescaler no se puede leer niescribir (ver la Figura 2).

    El bit PSA y PS2:PS0(OPTION_REG )determinan la asignacin delpreescaler y el rango del preescaler.Cuando se le asigna al mdulo delTirner0 , todas las instrucciones, queescriben en el registro TMR0 (porejemplo CLRF TMR0, MOVWFTMR0, BSF TMR0,x... etc.) ponena cero el preescaler. Cuando se leasigna al WDT, una instruccinCLRWDT limpia el preescaler junto con el temporizador del

    WDT. EL preescaler no se puedeleer ni escribir.

    Nota.- Escribir en TMR0,cuando el preescaler es asignado aTIMER0, limpia la cuenta delpreescaler, pero no cambia laconfiguracin del preescaler.

    PROGRAMA EJEMPLO DEFUNCIONAMIENTO DELTIMER0

    Para comprobar elfuncionamiento de este programadebemos de montar un circuitocomo el que se muestra en la Figura3, en el que se ha conectado undisplay del tipo ctodo comn alPORTB de PIC16F876. Una vezcargado el programa TMR0_2.asm,en el display se irn representado

    CLKOUT (=Foosc/4)Bus de datos

    El bit T0IF sepone a 1 si hayoverflow

    T0SE

    RA4/T0CKIpin

    PS2:PS0

    PSA

    WDTtime-out

    WDT bit de habilitaci n

    MUX

    T0CS

    0

    1

    Retardode 2

    ciclosRegistro TMRO

    MUX

    PSA

    1

    0

    MUX

    PSA

    0

    1

    Multiplexor 1-8

    Preescaler de 8 bits

    MUX

    PerroGuardi n

    8

    0 1

    8

    3

    Figura 2.- Diagrama de bloques del TMR0

    Leyenda: x = desconocido, u = inalterado; - = no implementado se lee como 0. Las celdas sombreadas no son usadas por el TIMER0

    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

    01h 101h TMR0 Mdulo del registro del TMR0 xxxx xxxx uuuu uuuu0bh, 8Bh

    10Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000x81h,181h OPTION_REG RBPU INTEDGT0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 111185h TRISA --- --- Registro de direccionamiento de datos del PORTA --11 1111 --11 1111

    TABLA DE REGISTROS ASOCIADOS AL TIMER0

    53RESISTOR

    Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 53

  • 8/14/2019 Curso PIC16f87X 5

    3/8

    M I C R O C O N

    T R O L A D O R E S

    los nmeros del 0 al 9 con unacadencia de aproximadamente unsegundo.

    El organigrama del programa esel que se muestra en la Figura 4 yen el programa que est pensadopara cargarlo con el bootloader, sehan separado con un ";" y se hanmarcado en azul, las l neas quehabr a que cargar si se utiliza unprogramador como el ic-prog. Eneste programa al TIMER0 se lehace trabajar como temporizador,que genera una interrupcincuando se desborda TMR0.

    EL MDULO DE TIMER1El mdulo de TIMER1 es un

    temporizador/contador de 16 bits,formado por dos registros de 8 bitscada uno TMR1H y TMR1L, queson de lectura y escritura y que sonlos que guardan el valor de lacuenta en cada momento. El valorde los registros TMR1H y TMR1Lse incrementan desde 0000H hastaFFFFH, en cuyo instante se vuelvea poner a 0000h y se activa elflag TMR1IF (PIR1). Laininterrupcin de TMR1 puede serhabilitada/deshabilitada segn estea uno/cero el bit TMR1IE (PIE1).

    EL TIMERl tiene los siguientesmodos de trabajo:

    1. Como Temporizador2. Como contador S ncrono3. Como contador As ncrono

    Figura 3.- Circuito de aplicacin para el programa TMR0_2 utilizando el PIC16F876

    54RESISTOR

    Vcc= 5V

    MCLR

    RA0RA1RA2RA3RA4RA5Vss

    OSC1

    OSC2/CKOUT

    RC0RC1RC2

    RC3

    RB7

    RB6

    RB5RB4RB3RB2RB1RB0

    VDD

    VSS

    RC7RC6RC5RC4

    Reset

    R110K

    R2 100

    R7 300

    R8 300

    R9 300

    R10 300

    R11 300

    R12 300

    a

    b

    c

    d

    e

    a

    b

    c

    d

    e

    f

    g

    f

    g

    R13 300

    Vcc=5V

    C1 27 pF

    C2 27 pF

    XT 4Mhz

    TMR0_2.asm

    INICIALIZA

    RPORTB-->SALIDA

    PREESCALER--> 256 TMRO

    16-->CONTA

    0-->TMR0

    0-->DIGITO

    LEETABL

    A

    DIGITO=10?NO

    SI

    INT_TMR0

    0 -->TMR0

    CONTA-1 --> CONTA

    CONTA=0?

    DIGITO+1-->DIGITO

    16 -->CONTA

    REPONER WY

    STATUS

    1 -->TOIF

    RETFIE

    SI

    NO

    Guardar W ySTATUS

    Reg.TEMPORALES

    Figura 4.- Cronograma del programaTMR0_2

    Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 54

  • 8/14/2019 Curso PIC16f87X 5

    4/8

    ;*************************************************************************************; Programa TMR0_2.ASM Fecha : 15 - Abril - 2003; Este programa presenta en el display de ctodo comn conectado en el PORTB; los nmeros del 0 al 9, mostrando un dato por segundo (aproximadamente), la

    ; temporizacin la realiza utilizando la interrupcin por TMR0 y el registro auxiliar CONTA; 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

    ;************************** DEFINICION DE VARIABLES ************************************W_TEMPORALequ 0x20 ;Almacena W antes de atender la interrupcinS_TEMPORAL equ 0X21 ;Almacena Status antes de atender la interrupcinDIGITO equ 0x22 ;numero a representar en displayCONTA equ 0x23 ;Contador auxiliar para alargar el tiempo a 1 segundo

    ;entre cada cambio de digito, ya que los 256 (FF) del Timer,;aunque se divida por 256, es 4x256x256=262,144 ms

    ;*******************************************************************************************; ORG 0x00; goto INICIO

    ORG 0x04;*************************** ATENCION A LA INTERRUPCION *******************************INT_TMR0

    movwf W_TEMPORAL ;Guarda el valor actual de W cuando se interrumpeswapf STATUS,W ;Intercambia nibbles y guarda en Wmovwf S_TEMPORAL ;Almacena Status pero cambiado el ..

    ;.. nibble alto por el bajoclrf TMR0 ;Inicializa TMR0=00decfsz CONTA,f ;Decrementa CONTAy si =0 incrementa DIGITOgoto FIN_INT ;Si cont_aux 0 finaliza interrupcinincf DIGITO,F ;Incrementa el DIGITOmovlw D'16' ;Al cargar TMR0 con 0 hace 256 cuentas con un predivisor de 256

    ;(programado en OPTION_REG). Como queremos 1sg. ponemos 16 en CONTA; as obtenemos 4*256*256*16 = 1,048576s

    movwf CONTA ;inicializa de nuevo CONTA para un nuevo digito

    FIN_INTswapf S_TEMPORAL,W ;Deja Status como estaba antes y en Wmovwf STATUSswapf W_TEMPORAL,F ;Intercambia nibbles del W guardadoswapf W_TEMPORAL,W ;Vuelve a intercambiar pero ya en Wbcf INTCON,T0IF ;Borra el flag de la interrupcinretfie ;Retorno de interrupcin

    ;********************* PROGRAMA PRINCIPAL *************************************INICIObcf STATUS,RP0bsf STATUS,RP0 ;Habilita Banco1 de registrosclrf TRISB ;direcciona PortB como salidasmovlw B'00000111' ;Reloj interno asignado aTMR0 con divisor por 256movwf OPTION_REGbsf INTCON,GIE ;habilitacin general de las interrupcionesbsf INTCON,T0IE ;habilitacin de la interrupcin por TMR0bcf STATUS,RP0 ;RP0=0 habilita Banco0 de registrosclrf TMR0 ;Inicializa TMR0 a 0movlw D'16' ;Carga CONTA con 16movwf CONTA

    PONER_0clrf DIGITO ;Carga DIGITO a 0 para iniciar cuenta

    LEETABLAcall TABLAmovwf PORTB ;Muestra digito en el display 7 segmentos (PortB)movlw D'9' ;subwf DIGITO,W ;Compara DIGITO con 9

    btfss STATUS,Z ;goto LEETABLA ;Si DIGITO NO = 9, incrementa DIGITOgoto PONER_0 ;Si DIGITO=9,lo pone a 0 de nuevo.

    ;********************* TABLA CON LOS VALORES DE LOS DIGITOS ******************TABLA

    movf DIGITO,W ;Guarda digito en acumuladoraddwf PCL,F ;Suma al contador de programa el digitoDT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X67

    ;*******************************************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la pgina 0goto INICIO ;Salto a la direccin de INICIO del programa

    ;*******************************************************************************END

    Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 55

  • 8/14/2019 Curso PIC16f87X 5

    5/8

  • 8/14/2019 Curso PIC16f87X 5

    6/8

    contina la cuenta incluso en elmodo SLEEP y puede generar unainterrupcin por desbordamientoque despierta al procesador. Hayque tener especial cuidado con elsoftware al leer o escribir elcontador.

    Cuando se trabaja en el modocontador as ncrono, el TIMER1 nopuede usare como base de tiempos

    para el mdulo CCP (Captura ycomparacin-PWM)

    LECTURA Y ESCRITURA EN ELTIMER1 CUANDO SETRABAJA EN EL MODOCONTADOR AS NCRONO

    Se pueden leer los contadoresTMR1H y TMR1L mientras laseal externa del contador se est

    recibiendo (teniendo cuidado con elhardware). Sin embargo, el usuariodebe tener en cuenta que elcontador es de 16 bits y se puedentener ciertos problemas al leer losdos registros de ocho bits, ya que elcontador puede desbordarse entrelas lecturas.

    Para escribir en l, serecomienda que el usuario

    57RESISTOR

    T1CK1(Por defecto a

    nivel alto)

    T1CKI(Por defecto anivel bajo)

    Nota.- Las flechas indicas los incrementos del contador

    TMR1H TMR1L1

    0

    Preescaler1,2,4,8

    sincronizaci ndetecci n

    0

    1

    El bit TMR1F se pone a 1cuando se desborda

    RC0/T1OSO/T1CKI

    RC1/T1OSI/CCP2

    TMR1ONon/off

    FOSC/4ClokInterno

    TMR1CST1CKPS1:T1CKPS0

    2

    Entrada SLEEP

    T1SYNC

    Entrada ClockSincronizada

    T1OSCENHabilita

    Oscilador

    TMR1

    Figura 5.- Diagrama de bloques de TIMER1

    Tabla 1.- Seleccin de los condensadores para el oscilador del TIMER1

    Tipo de Oscilador Frecuencia C1 C2LP 32 kHz 33pF 33pF

    100kHz 15 pF 15 pF200 15 pF 15 pF

    Estos valores son para los siguientes cristales de referencia32.768 EpsonC-001R21.768K-A 20 PPM100 kHz Epson C-2 100.000 KC-p1 20 PPM200 kHz STD XTL 200.000 kHz 20 PPMNota.-1. Capacidades mayores aumentan la estabilidad del oscilador, pero tambin aumentan el start-up.2. Cada cirstal/resonador tiene sus propias caractersticas, el usuario debe consultar los valores apropiados

    de los componentes externos al cristal.

    Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 57

  • 8/14/2019 Curso PIC16f87X 5

    7/8

    simplemente pare el contador yescriba los valores deseados.Cuando se escribe el registro delcontador puede haber conflictomientras este se estincrementando. Esto puedeproducir un valor imprevisible en elcontador.

    OSCILADOR DEL TIMER1Se puede conectar un oscilador

    a cristal entre los pines T1OSI(entrada) y T1OSO (salidadel amplificador). Se debehabilitar poniendo a uno el bit de

    control TLOSCEN (TICON ).El oscilador de bajo consumopuede trabajar hasta 200 kHz. Enestas condiciones el oscilador siguefuncionando aunque se fuerce el

    modo SLEEP. Est pensado paratrabajar con un cristal de hasta 32kHz. La Tabla 1 muestra el valorde los condensadores para elTIMER1.

    El oscilador TIMER1 esidntico al oscilador LP. Elusuario debe proporcionar untiempo de retardo por softwarepara asegurar la salida apropiadadel oscilador.

    RESTABLECIMIENTO DELTIMER1 UTILIZADO LASALIDA TRIGGER DEL CCP

    Si el mdulo CCP1 o CCP2se configuran en modocomparacin para generar un"disparo por evento especial"(CCP1M3:CCP1M0 = 1011

    (CP1CON)), esta sealreestablecer el TIMIER1.Nota.- El evento especial que

    activa los mdulos CCP1 y CCP2 noactivar el flag

    TMR1IF (PIR1).El TIMER1 debe configurarse

    como temporizador o contadors ncrono.

    Restablecimiento TIMER1 queusa un disparador de CCP.

    TIMER1 debe configurarsepara temporizador o contadors ncrono para aprovechar estacaracter stica. Si el TIMER1 est

    trabajando en modo contadoras ncrono, el reset no puede seractivado.

    En el caso de escribir sobre elTIMER1 en el momento del

    disparo del evento especial deCCP1 o CCP2, se tomar el valoranterior.

    En el caso de escribir sobreTIMER1 si coincide con un disparopor evento especial de CCP1 oCCP2, se carga el valor anterior.

    En este modo defuncionamiento, el par de registrosCCPRxH:CCPRxL se reponenpara volver a tener el periodo delTIMER1.

    RESTABLECIMIENTO DEL PARDE REGISTRO DEL TIMER1(TMR1H, TMR1L)

    Los registros TMR1H yTMR1L no se inicializan a 00hdespus de un Power-on Reset opor cualquier otro reset excepto por

    un disparo de evento especial enCCP1 y CCP2. El registro T1CONse inicializa a 00h despus de unPower-on Reset o Brown-out Resetque deja a 1:1 el preescaler. En losdems reset, el registro no esalterado.

    TIMER1 PREESCALEREl contador del preescaler se

    pone a cero al escribir en losregistros TMR1H o TMR1L.

    RESUMEN DE REGISTROS ASOCIADOS AL TIMER1

    En la siguiente tabla se muestranlos registros principales quecontrolan el comportamiento delTIMER1 y la distribucin de losbit.

    PROGRAMA EJEMPLO DEFUNCIONAMIENTO DELTIMER1

    Para comprobar elfuncionamiento de este programautilizaremos el circuito de laFigura 3 que es el mismoque hemos utilizado paracomprobare el funcionamiento delTIMER0, en el que se haconectado un display del tipoctodo comn al PORTB dePIC16F876. Una vez cargado elprograma TMR1_0.asm, en eldisplay se irn representado losnmeros del 0 al 9 con unacadencia de aproximadamente unsegundo.

    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,8Bh10Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE TOIF INTE RBIF 0000 000x 0000 000u0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 00000Bh PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 00000Eh TMR1L Registro de carga del byte de menor peso del registro de 16 bits de TMR1 xxxx xxxx uuuu uuuu0Fh TMR1H xxxx xxxx uuuu uuuu

    10h T1CON --- --- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON--xx xxxx --uu uuuu

    Leyenda x = desconocido, u = inalterado; - = no implementado se lee como 0. Las celdas sombreadas no son usa-das por el TIMER1

    Nota 1: Los bits PSPIE y PSPIF estn reservados para el PIC16F873/876, mantener estos bits a cero.

    Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 58

  • 8/14/2019 Curso PIC16f87X 5

    8/8

    ;*************************************************************************************; Programa TMR1_0.ASM Fecha : 15 - Abril - 2003; Este programa presenta en el display de ctodo comn conectado en el PORTB; los nmeros del 0 al 9, mostrando un dato por segundo (aproximadamente), la; temporizacin la realiza utilizando la interrupcin por TMR1 y el registro auxilar CONTA; 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

    ;********************* DEFINICION DE VARIABLES *****************************W_TEMPORALequ 0x20 ;Almacena W antes de atender la interrupcinS_TEMPORAL equ 0X21 ;Almacena Status antes de atender la interrupcinDIGITO equ 0x22 ;numero a representar en displayCONTA equ 0x23 ;Contador auxiliar para alargar el tiempo a 1 segundo

    ;entre cada cambio de digito, ya que los 256 (FF) del Timer,;aunque se divida por 256, es 4x256x256=262,144 ms

    ;*******************************************************************************; ORG 0x00; goto INICIO

    ORG 0x04;******************* ATENCION A LA INTERRUPCION **************************INT_TMR1

    movwf W_TEMPORAL ;Guarda el valor actual de W cuando se interrumpeswapf STATUS,W ;Intercambia nibbles y guarda en Wmovwf S_TEMPORAL ;Almacena Status pero cambiado el ..

    ;.. nibble alto por el bajomovlw low ~.62500 ;Carga parte baja del contador con el complementomovwf TMR1L ; de 62500 en hex.movlw high ~.62500 ;Carga parte baja del contador con el complementomovwf TMR1H ;de 62500 en hex.bcf PIR1,0 ;Desconecta el flag del TMR1incf PORTB,F ;Incrementa el contador de la Puerta Bdecfsz CONTA,f ;Decrementa CONTAy si =0 incrementa DIGITOgoto FIN_INT ;Si cont_aux 0 finaliza interrupcionincf DIGITO,F ;Incrementa el DIGITOmovlw D'2'movwf CONTA ;inicializa de nuevo cont_aux para un nuevo digito

    FIN_INTswapf S_TEMPORAL,W ;Deja Status como estaba antes y en Wmovwf STATUSswapf W_TEMPORAL,F ;Intercambia nibbles del W guardadoswapf W_TEMPORAL,W ;Vuelve a intercambiar pero ya en Wbcf INTCON,T0IF ;Borra el flag de la interrupcinretfie

    ;********************* PROGRAMA PRINCIPAL *************************************INICIO

    bcf STATUS,RP0bsf STATUS,RP0 ;Habilita Banco1 de registrosclrf TRISB ;direcciona PortB como salidasmovlw b'11111111'movwf OPTION_REG ;Preescaler d 128 asociado al WDTbsf PIE1,0 ;habilita interrupcin del TMR1bcf STATUS,RP0 ;Selecciona banco 0

    ;El TMR1 trabaja con oscilador interno y un preescaler de 1:8. Si se trabaja a una frecuencia;de 4 MHz, el TMR1 deber ser cargado con 62500 para que provoque interrupcin al de 0.5s b

    movlw b'00110001'movwf T1CONmovlw b'11000000'movwf INTCON ;Habilitacin global de interrupcionesmovlw D'2' ;Carga CONTA con 2movwf CONTA

    PONER_0clrf DIGITO ;Carga DIGITO a 0 para iniciar cuenta

    LEETABLAcall TABLAmovwf PORTB ;Muestra digito en el display 7 segmentos (PortB)movlw D'9' ;subwf DIGITO,W ;Compara DIGITO con 9btfss STATUS,Z ;goto LEETABLA ;Si DIGITO NO = 9, incrementa DIGITOgoto PONER_0 ;Si DIGITO=9, lo pone a 0 de nuevo.

    ;********************* TABLA CON LOS VALORES DE LOS DIGITOS ******************TABLA

    movf DIGITO,W ;Guarda digito en acumuladoraddwf PCL,F ;Suma al contador de programa el digitoDT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X67

    ;*******************************************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la pgina 0goto INICIO ;Salto a la direccin de INICIO del programa

    ;*******************************************************************************END

    Curso microcontroladoresPAGS 29/4/03 10:38 Pgina 59