C编译器是PICC 9.65
722芯片
简化程序:
void main(void)
{
do
{
led=1;
}while(1);
}
//10MS定时器中断
void interrupt isr(void)
{
根据led的值显示到数码管上,0对应0,1对应1....
}
按道理数码管应该稳定显示1,但是会闪烁,有显示0的痕迹。
检查led=1的汇编代码翻译成C就是:
led=0;
led++;
倒霉呀,在led=0时产生中断的话,中断程序就错误的显示0了。
还没有发现有任何其它的编译器会出现PICC 9.65这么弱智的错误。
其它编译器,对于8位的MCU,单字节赋值不需要保护,
只有双字节赋值才需要考虑保护一下。
不知道是否更高版本的没有这个BUG? |