Microchip
直播中

陈小艳

7年用户 196经验值
私信 关注
[问答]

为什么MPLABX XC8中断无法识别PIC16F628A全局变量?

嗨,我使用的是PIC16F628A和MPLABXC8v1.37。我有一个main.c文件,其中定义了一些全局变量,并在main()中声明。在timer0ISR例程中,我比较在if.((ctr>VAR1)&&;(CTR & lt;max)){Ra0=!R0}和切换端口引脚,如果TRUE。这不管用。稍后,如果var1有效,它将在另一个ISR(例如,端口更改中断)中更新。如果我使用常数,如果(ctr>=50&&ctr<100){RA0=!RA0}起作用。我已经完成了所有其他的初始化和代码工作。为什么在ISR中没有识别全局变量?有什么建议吗?提前感谢!注:内部时钟=4MHz,端口位0为O/P,启用Time0中断。

回帖(11)

tijing忽忽

2019-10-18 08:15:13
16F628 A不具有LATX寄存器,所以当在单个I/O引脚上操作时,要注意RMW效应,它们可能不做您所期望的,特别是如果引脚上有任何负载时。
举报

李俊

2019-10-18 08:48:11
你确信你的代码工作吗?您发布的内容没有编译。在检查发生了什么中断时,您应该始终同时检查中断标志启用和中断标志。由于INCONbits结构中没有TFO位,所以该行没有任何无效。
举报

田硕

2019-10-18 09:12:02
大家好,是的,当我在TMR0ISR中比较I/E中的数值/FIX值时,我的实际代码工作得很好。抱歉,伪代码上传。这只是传达问题的逻辑。我很快就会上传工作代码。@:谢谢,但是位RA0正确地切换,即使我不使用影子寄存器,当条件满足以下条件时。当我使用下面的代码时,工作良好:易失性无符号字符ctr=255,var1,max,min;voidinter.tmr0_ISR(void){if(INTCONbits.T0IE&INTCON){T0IF){TMR0=0;IF((CTR & Gt;50)&AMP;(CTR & lt;=255)){Ra0=!RA0;}ctr--;如果(ctr<=20){ctr=255;}TMR0=255;INTCONbits.T0IF=0;}}ISR/main()不识别全局变量。
举报

杨晓静

2019-10-18 09:38:19
我想你是说main()没有显示出来,编译器没有产生编译错误。也许你可以发布一个完整的项目来显示错误?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分