PIC死循环

PIC endless loop

我正在尝试对 PIC16F887 进行编程,但遇到了这个有趣的问题。我希望 LED 闪烁一次并永远停止,但它会重新开始并且永远不会停止,尽管看门狗被禁用。这是代码。提前致谢。

我用 MPLAB v8.84 编写了这篇文章,并使用 PICkit2 和 Hi-Tech C 编译器进行了编程。

#include <htc.h>
#include <pic.h>
#define _XTAL_FREQ 800000
//__CONFIG(0x3FF5);

//functions
void INITgeneral(void);
void ledshow (void);

void main(void) {
INITgeneral();
ledshow();
return;
}

void INITgeneral(void)
{
TRISA = 0;
TRISB = 0;
TRISC = 0;
TRISD = 0;
TRISE = 0;
PORTA = 0;
PORTB = 0;
PORTC = 0;
PORTD = 0;
PORTE = 0;

}

void ledshow(void)
{

__delay_ms(400);
RD0 = 1;
__delay_ms(400);
RD0 = 0;


}

built-in模拟器对于查找此类问题很有帮助,值得学习。

在“查看”选项卡下 select“反汇编列表”。请注意,从对 ledshow() 的调用返回后的下一条指令是 GOTO 0 指令,它将程序计数器加载为零,即复位向量。这就是你无休止地执行程序的原因。

要停止此行为,请将 main() 中的 return 替换为无限循环 while(1){};