PIC无限循环

时间:2016-01-26 21:38:17

标签: c infinite-loop pic mplab

我正在尝试编程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;


}

1 个答案:

答案 0 :(得分:5)

内置模拟器非常有助于查找此类问题,非常值得学习。

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

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