Autor Tema: CONTADOR TMR1  (Leído 2646 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Mrpic

  • PIC10
  • *
  • Mensajes: 4
CONTADOR TMR1
« en: 15 de Julio de 2006, 12:57:08 »
buenas

lo que pasa es que estoy haciendo un contador con el TRM1 con preescala 1:8 ya que necesito contar hasta un numero muy elevado y cuando llegue a dicho numero tendria que desbordarse, cosa con la cual tengo problema tambien en la interrupcion.
lo que me sucede es que para simular los pulsos estoy usando un generador de pulsos con el 555 y ya que tengo que mandar tantos pulsos tengo que colocarlo a funcionar muy rapido
entonces ahi me surgen varias dudas:

* la frecuencia de envio de los pusos del 555 es de 800 hz, nose si esto cause problemas, pues no tengo idea si el TMR1 tenga alguna limitacion de frecuencia para la llegada de pulsos.

* tambien si me podrian ayudar enviandome una subrutina del TMR1 como contador y con interrupcion por desbordamiento que  funcione perfectamente se los agradeceria porque asi podria comparar a ver si tengo algun error en la configuracion.

Estoy trabajando con un PIC16F877A y en ASM

gracias
« Última modificación: 15 de Julio de 2006, 12:58:53 por Mrpic »

Desconectado mos

  • PIC10
  • *
  • Mensajes: 35
Re: CONTADOR TMR1
« Respuesta #1 en: 15 de Julio de 2006, 13:43:36 »
                  List  p=16f877             ; tipo de procesador
                  include "P16F877"         ;
                 
variables     equ     0x20                 ; aqui añades los registros que necesite, siempre a partir de esta direccion

                  org      0x00                ; reset
                  goto    inicio
                  org      0x04                ; vector de interrupcion
                  goto    interrup            ;       
interrup       bcf      PIR1,0
                  movlw  b'00000001'
                  xorwf   PORTB,F         ; rb0  cambiara de estado  cada vez que timer1 se desborde
                  retfie                         ; retorno al programa principal


; programa principal         

incio          clrf       PORTA
                clrf       PORTB   
                clrf       PORTC
                clrf       PORTD
                clrf       PORTE

                bsf       STATUS,RP0
                movlw    b'00000110'
                movwf   ADCON1       ;  puerto A digital
               clrf         TRISA
               clrf         TRISB
               movlw    b'11111111'
               movwf   TRISC
               clrf        TRISD
               clrf        TRISE       ; salidas digitales
               bsf        PIE1,0      ; habilita interrupcion timer1
               bcf        STATUS,RP0
               movlw    b'00110011'
               movwf   T1CON
              clrwdt
              movlw    b'11000000'
              movwf    INTCON     ; habilita interrupciones
  loop      clrwdt
              goto      loop
              end   

Ahi tienes un programita , tienes que aplicarle los pulsos por la entrada RCO/T1CKI, RB0 te cambiara de estado siempre que se desborde el timer1. :)