TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: cheswik en 29 de Mayo de 2007, 13:47:47

Título: interrupcion timer0
Publicado por: cheswik en 29 de Mayo de 2007, 13:47:47
Hola,

Estoy realizando un trabajo con el pic16f877  donde mi idea era usar el timer cero como temporizador para ir cambiando de estados.  He echo un programa chorras para irme familiarizando con el timer pero no consigo q funcione como quiero.

La idea es que el siguiente programa encienda y apague un led conectado al bit 0 de portc cada vez q el timer 0 desborde:

   org 0
   goto inicio
   org 0x04
   goto rs_interr
inicio
   CLRF STATUS
   CALL conf_interr
   CALL conf_portc
   CALL inicia_timer
sleep
   
;---------------------------
conf_interr
   BSF INTCON,T0IE;   HABILITAMOS INTERRUPICONES TIMER0
   BSF INTCON,GIE;      HABILITAMOS INTERRUPCIONES GLOBALES
RETURN
;--------------------
conf_portc
   BSF STATUS,RP0
   BCF TRISC,0;   portc 0 COMO SALIDA   
   BCF STATUS,RP0
RETURN
;------------------
inicia_timer
   MOVLW 0x00
   MOVWF TMR0;         VALOR INICIAL DE TMR0
   BSF STATUS,RP0;
   MOVLW 0X07   
   MOVWF OPTION_REG
   BCF STATUS,RP0
   
RETURN
;-----------------------
rs_interr
   BCF INTCON,T0IF    ;LIMPIAMOS BANDERA
   btfss PORTC,0
   goto a_uno
   BCF PORTC,0
   goto salir_rutina
   a_uno
   BSF PORTC,0
salir_rutina
   call inicia_timer
   RETFIE
end

nunca entra en la rutina de servicio a la interrupcion, ¿alguien ve algun problema?.

GRACIAS
Título: Re: interrupcion timer0
Publicado por: PalitroqueZ en 29 de Mayo de 2007, 13:55:20
hola cheswik

quita el sleep y pon:

goto $

 
Título: Re: interrupcion timer0
Publicado por: cheswik en 29 de Mayo de 2007, 18:06:31
Gracias Palitroquez, ahora funciona como esperaba.

He visto en el datasheet que la interrupcion despierta al pic del modo sleep...¿Sabes entonces por que con el sleep no funcionaba?

Un Saludo
Título: Re: interrupcion timer0
Publicado por: sander en 29 de Mayo de 2007, 18:21:07
Cheswik , no todas las interrupciones despiertan al PIC , en tu caso , tu estas configurando el TMR0 para que se incremente internamente, y en el modo sleep se apaga el oscilador , entonces el TMR0 nunca se incrementa , es por eso que no puede despertar al PIC ,porque  nunca desborda.

Saludos
Título: Re: interrupcion timer0
Publicado por: cheswik en 29 de Mayo de 2007, 18:44:50
gracias sander

claro, tienes razon.

un saludo