0

我是 PIC 微控制器编程的新手,我在编写一段代码时遇到了一些困难。在main()函数中,它设置了一些寄存器,然后进入一个无限的while循环。在这个 while 循环中,调用了第二个函数,这会产生延迟(没有调用任何其他函数,包括main()then 返回。但是,似乎当第二个函数结束时,程序会回到顶部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() 来修复。

4

1 回答 1

0

可能有很多事情,检查 RCON 或等效寄存器应该有助于识别原因,还提供部件号和部件电压。一些可能的情况是: - 看门狗定时器跳闸, - 保护跳闸时掉电, - 堆栈上溢/下溢, - 您的代码跳入空间(错误指针?), - 您的代码正在执行软件重置, - 您的除以 0,- 其他...

于 2018-10-09T23:15:14.300 回答