我是PIC单片机编程的新手,并且在编写一段代码时遇到了一些困难。在main()
函数中,它设置一些寄存器,然后进入一个无限的while循环。在此while循环中,调用了第二个函数,该函数会产生延迟(不调用任何其他函数,包括main()
然后返回。但是,当第二个函数结束时,程序似乎返回到了顶部。 main()
,而不是在while循环中继续。
编辑1:我已经做了一些更多的测试,但是在没有该功能的情况下我仍然遇到问题,因此几乎可以肯定,由于某种未知的原因,微控制器每秒都会重置一次。应该有一个寄存器告诉您重置的原因,所以我来看看。
编辑2:这是该代码的一个非常基本的版本,其中RC0 LED每2秒短暂闪烁一次(应该保持熄灭)。
void main()
{
TRISC = 0x00;
PORTCbits.RC0 = 1;
OSCCON = 0b00000010;
TRISA = 0x00;
PORTA = 0x00;
while(1)
{
PORTCbits.RC0=0;
}
}
编辑3:原来是看门狗定时器引起了复位,现在通过将CLRWDT()放入循环中来解决该问题。
答案 0 :(得分:0)
可能有很多事情,检查RCON或等效寄存器应有助于识别原因,并提供零件编号和零件电压。一些可能是: -看门狗定时器跳闸, -保护跳闸用尽, -堆栈溢出/下溢, -您的代码正在跳入太空(指针错误?), -您的代码正在执行软件重置, -您除以0, -其他...