我在mikroc中为pic16f877A编写了一个代码,其中我使用了timer0和timer1。 我调试我的代码,发现timer0不工作,但我无法理解它背后的原因。我甚至检查了OPTION_REG的数据表 但无法弄清楚plz帮助的问题。 我是pic编程的新手。 我刚刚上传了设置timer0和timer1的功能。 UART用于检查每条线是否正在执行,并且在打印TMR1H的值后我发现它停止。
int feedback()
{
sh = 0;
UART1_WRITE_TEXT("inside feedback");
UART1_Write(13); // newline
TMR0=193;
Uart1_Intout_ReturnInt(TMR0);
UART1_Write(13); // newline
INTCON=0xA0;
Uart1_Intout_ReturnInt(INTCON);
UART1_Write(13); // newline
TMR1L=0;
Uart1_Intout_ReturnInt(TMR1L);
UART1_Write(13); // newline
TMR1H=0;
Uart1_Intout_ReturnInt(TMR1H);
UART1_Write(13); // newline
OPTION_REG.PSA=0;
OPTION_REG.PS2=0;
OPTION_REG.PS1=1;
OPTION_REG.PS0=0;
OPTION_REG.T0SE=0;
OPTION_REG.T0CS=0;
UART1_WRITE_TEXT("timer0 start");
UART1_Write(13); // newline
T1CON=0x07;
UART1_WRITE_TEXT("timer1 start");
UART1_Write(13); // newline
sh=1;
Uart1_Intout_ReturnInt(sh);
UART1_Write(13); // newline
while(sh==1){
Uart1_Intout_ReturnInt(sh);
UART1_Write(13); // newline
UART1_WRITE_TEXT("inside while loop");
}
UART1_WRITE_TEXT("outside while loop");
TMR1H=TMR1H*1000;
sh=TMR1H+TMR1L;
actualOut=(60*2*sh)/8;
Uart1_Intout_ReturnInt(actualOut);
UART1_Write(13); // newline
return actualOut;
}
void interrupt(){
T1CON=0x00;
sh=0;
}
答案 0 :(得分:1)
您在INTCON=0xA0;
行中启用了TMR0中断,但我没有看到它的中断服务程序。由于TMR0IF中断标志(INTCON位2)未被清零,中断可能在有效线路之后触发,然后保持有效。