A continuación se muestra mi código para contar los impulsos en el pin RC0 de pic16f877A. Apliqué una onda cuadrada en rc0 para contar los pulsos. Utilicé TMR0 como temporizador de 500 ms y TMR1 como contador. pero el problema es que tmr1 no incrementa. ¿Hay algo que me haya perdido en mi código? Utilicé terminal virtual y uart para monitorear los valores de TMR0 y TMR1.
int check=1,l,t;
función uart
Uart1_Intout_ReturnInt(unsigned i) {
char puf[6]; //for max 5 digits and the end-sign
WordToStr(i, puf); // in "Conversions" library
UART1_Write_Text(puf);
return i;
}
rutina de interrupción
void interrupt()
{
OPTION_REG=0;
l=TMR1l;
t=TMR0;
INTCON=0;
T1CON=0x00;
check=0;
}
función de inicio
void init(){
OPTION_REG=0;
T1CON=0;
INTCON=0;
ADCON0=0;
ADCON1 = 0x06;
CMCON = 0x07;
TRISC.RC0 = 1;
PORTC=0;
}
función de visualización
void display(){
UART1_WRITE_TEXT("TMR0 equal to");
UART1_Write(13); // newline
Uart1_Intout_ReturnInt(t); //print timer0 value
UART1_Write(13); // newline
UART1_WRITE_TEXT("TMR1L equal to");
UART1_Write(13); // newline
Uart1_Intout_ReturnInt(l); //print timer1 value
UART1_Write(13); // newline
}
función principal
void main() {
UART1_Init(9600);
init();
TMR0=193;
TMR1H=0;
TMR1l=0;
INTCON=0xA0;
OPTION_REG.PSA=0; // timer0 initialized
OPTION_REG.PS2=0;
OPTION_REG.PS1=1;
OPTION_REG.PS0=0;
OPTION_REG.T0SE=0;
OPTION_REG.T0CS=0;
T1CON=0x07; //timer1 initialized
TMR1IE_bit = 0;
TMR1IF_bit = 0;
while(check==1){
//when timer0 overflows interrupt will make check=0 to come out of the while loop
}
display();
}