微控制器 PIC16F887 // 任务说:编写程序,该程序将反转 PORTB 并使其输出端口,并且每隔一秒它将在 Led Diods 上进行反向 ON/OFF
这是我的代码:
unsigned cnt ;
void interrupt(){
if(TMR0IF_bit){ //if there is interrupt in timer0
cnt++; //increase the counter
TMR0IF_bit=0; //reset the timer
TMR0 = 96; //set the TMR0 to its default value
}
}
void main() {
ANSEL = 0;
ANSELH = 0;
OPTION_REG = 0b00000100; //1:32 prescalar (last 3 bits are 100)
INTCON = 0xA0; //enable interrupt generated by TMR0
TRISB = 0x00; //make PORTB output port
PORTB = 0xFF; //set PORTB to 1s
cnt =0; //initialize counter
TMR0 = 96; //starting value of TMR0
do{
if(cnt==391){
PORTB = ~PORTB; //invert PORTB
cnt=0; //reset the timer
}
cnt++; //increase counter if its not 391
}while(1);
}
重要 TMR0 = 96 是起始值,256-96 = 160 OPTION_REG = 1:32 所以预标量是 32 我们需要接近 2M 因为 2M 指令就像他们说的那样接近 1 秒
2 000 000 / 32 (prescalar) * 160 (256-96) = ~ 391 所以当计数器达到 391 时一秒钟的延迟应该是 2M / 32 * 160 但是当我以 8Mhz 模拟启动它时,LED DIODS 在更快的时间内反转超过 1 秒。
所以你能帮我弄清楚问题出在哪里,以及如何让它每秒钟都反转。谢谢