附件中是完整的项目包,MPLAB IDE的和MPLAB X IDE的都有,MPLAB X用的是XC8 FREE版的,还有PROTEUS的仿真图纸用的是PROTERS 8,不信的自己编译运行看看就知道,我是没办法理解。
void main()
{
InitSystem();
while(1)
{
CLRWDT();
if(gPowerRatio<10)
{
gPowerRatio+=1;
}
else if(gPowerRatio>10)///////////下边代码正常程序是不可能进去的,但是现在无法理解,在RB5电平中断和PWM中断同时开的时候直接进去了,这两个中断只有屏蔽掉一个,这段代码就不会进去,也就是说gPowerRatio的值到10之后不会改变。
{
gPowerRatio-=1;
LED3=~LED3;
delay() ;
}
}
}
请DX为我解惑,我之前怀疑自己编译器是破解版,用PICC8.90的,之后用PICC8.93的,也一样;然后安装正版MPLAB X+XC8 FREE版在PROTEUS中仿真时都会进入这段代码。我不能理解,程序已经简单到极致,难道我哪个地方还有逻辑错误?
PIC16/18单片机是硬件堆栈。写程序是注意少嵌套。否则出现你上面的情况是正常的。