Programación Específica > Microcontroladores
Registro "rcon" Del 16f876
Alternative:
SAludos
perdon era uno en el banco 0 y otro en el banco1
con eso de las apuraciones no escribi bien los numeros
pero cheque rapido que los estas manipulando en el
banco erroneo, dele un vistazo al manejo de tus bancos
saludos
:hola:
Pegasux:
Muy buenas de nuevo. Pues la verdad es que sigo sin entender lo que me quieres decir, el registro PIE1 esta en el banco 1, y yo habilito la interrupción del en el banco uno:
bsf STATUS,RP0 ;Banco 1
bcf STATUS,RP1
movlw b'00000001' ; habilita solo irq del timer1
movwf PIE1
El registro INTCON esta en todos los bancos, asi que habilito interrupciones sin mas:
movlw b'10000000' ; habilita bit IE
movwf INTCON
Para comenzar la cuenta hemos de pasar al banco 0 y programar el T1CON:
bcf STATUS,RP0 ; banco 0
movlw b'11111001' ; encendemos timer
movwf T1CON
Finalmente, el registro PIR1 si que esta en el banco 0, pero solamente nos indica la causa de la interrupción, no veo que haya que programar nada en el hasta que salte a la rutina general de atencion a la interrupción, pero precisamente el problema que tengo es que no salta y por tanto el registro PIR1 no tengo la oportunidad de usarlo.
¿Quizas esta mal el orden de programar los registros?
Saludos y gracias de nuevo.
Alternative:
SAludos
me puse achecar el datasheet y encontre l solucion y el error que estas cometiendo al interpretrar mal el uso del TMR1, te explico
TMR0
Temporizador, te genera una interrupcion por desbordamiento
asi que cuando pasa TMR0=0xFF a TMR0=0x00 te produce
una interrupcion y salta a ORG 4 y posteriormente realizas
tu programa retornando con retfie y limpiando tu bandera
TMR1 y TMR2
Son temporizadores como contadores, cuando ocurre un desbordamiento
es decir cuando pasa de 0xFF a 0x00 los registros TRM1H y TMR1L
solo te genera 1 su bandera (TMR1IF) y no te genera una interrupcion
por desbordamiento sino un abido por desbordamiento en el registro TMR1IF
Saludos y suerte :hola:
Pegasux:
Muchas gracias por la respuesta, ahora ya parece que sabemos porque no funciona, pero tengo un lio enorme, porque tanto en el datasheet que tengo (16F87XA)como en el libro que tengo, dice que provocan interrupción, aunque lo que tambien es cierto, que el mio es 16F876 sin A (el viejo), es posible que esa sea la causa del error, no se. Esta tarde me pasare a consultarlo por la biblioteca de la universidad, tienen unos cuantos libros de PIC's.
En cualquier caso no hay problema con la interrupción, como no es crítico y tengo que usar tambien el timer 0, comprobare el flag del timer 1 con la rutina de atencion del timer 0, y aproximadamente 1 de cada 10 veces que salte la irq del timer 0 me hará lo que queria hacer con el timer 1 y asunto solucionado.
Muchas gracias y un saludo!!
Pegasux:
Ya he cambiado al tmr0 y ahora hace bien lo de los 2 timers en la simulacion, tal y como esperaba, aunque no he llegado a encontrar lo de la interrupcion del tmr1, solo falta montarlo a ver que pasa :D
Muchas gracias y un saludo.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa