我正在尝试编程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;
}
答案 0 :(得分:5)
内置模拟器非常有助于查找此类问题,非常值得学习。
在“查看”标签下,选择“反汇编列表”。请注意,从调用ledshow()
返回后的下一条指令是指令GOTO 0
,它将程序计数器加载为零,即复位向量。这就是你无休止地执行程序的原因。
要停止此行为,请使用无限循环替换return
中的main()
while(1){};