Hola Mauricio,
Es que el timer0, no lo uso para nada, no es por ningun motivo. Estoy usando el timer1, además con la interrupcion tengo 24bits, asi que no me hace falta para nada el timer0. A mi no me importa que esté contando, per decía de desactivarlo ya que no lo uso.
He estado intentando dejar el timerl a un valor fijo y que solo cuente 100 conteos y salte el alto. Poniendo 156 en el timer1L, asi cuenta 100 veces, con 1:4 prescaler y 16Mhz de crystal. Tengo 100us en cada incremento del timer1H. Pero no soy capaz de encontrar una forma eficiente.
START clrf STATUS ; Clear Status
clrf INTCON ; Disable interrupts
clrf PCLATH ; Keep in lower KByte
clrf PORTA ; Clear ports
clrf PORTB
bsf STATUS,RP0 ; Select bank 1
clrf ANSEL ; All pins are Digital
movlw H'07'
movwf CMCON ; Turn off comparators
movlw B'00010000' ; i/o port value
movwf TRISA
movlw B'00000001' ; i/o port value
movwf TRISB
; movlw B'10000001' ; pullup off, prescaler=4,
; movwf OPTION_REG ; Set the OPTION register
bcf STATUS, RP0 ; Select bank 0
movlw b'00100001' ; Prescaler=1:4(1us) TMR1=ON
movwf T1CON ; config T1CON
bsf INTCON,GIE
bsf INTCON,PEIE
; bsf PIR1,TMR1IF ; unmask the timer1 interrupt (bank0)
bsf STATUS, RP0 ; Select bank 1
bsf PIE1,TMR1IE ; and enable interrupt.
bcf STATUS, RP0 ; Select bank 0
clrf tmr1h ; clear high timer
clrf TMR1L ; clear timer
clrf TMR1H ; clear timer
;
; 100uS loop time
; 16MHz clock / 4 = 4MHz instruction cycle - 0,25us
; prescaler set to divide by 4
; preset TMR1 = 256, when = 0 = 100uS
; 156 to 255 = 100 x 0,25us x 4(prescaler) = 100 us
;
movlw .156 ; fixed timer1 to 156
movwf TMR1L
LOOP btfsc INP
goto LOOP ; Wait for pulse Low
waitHigh btfss INP ;
goto waitHigh ; Wait for pulse high
El problema es que la primera vez lo fijo bien, pero una vez en el loop, cuando espera pulso low, si desborda una vez ya empieza en 0, y no en 156, yo quiero que siempre cuente desde 156 a 256, para ir incrementando el TIMER1H en incrementos de 100us. Supongo que habría que poner tanto a la hora de esperar el low como el high, un btfss para ver si el timerl = 0 y si es igual a 0 fijar a 156 para que siga contando a partir de ese valor...
Espero que me podais dar alguna idea, quizas hay alguna forma tipica de hacer esto, yo soy bastante novato aún...
Por cierto, como ves, he quitado las lineas del option_reg y asi el timer0 no hacia nada, y el programa parecía ir bien, así que no se si lo dejo o lo quito, por lo que me has comentado antes... Yo el timer0 no lo quiero para nada.
Gracias por la ayuda.