完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,我使用的是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个回答
|
|
16F628 A不具有LATX寄存器,所以当在单个I/O引脚上操作时,要注意RMW效应,它们可能不做您所期望的,特别是如果引脚上有任何负载时。
|
|
|
|
你确信你的代码工作吗?您发布的内容没有编译。在检查发生了什么中断时,您应该始终同时检查中断标志启用和中断标志。由于INCONbits结构中没有TFO位,所以该行没有任何无效。
|
|
|
|
大家好,是的,当我在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()不识别全局变量。
|
|
|
|
我想你是说main()没有显示出来,编译器没有产生编译错误。也许你可以发布一个完整的项目来显示错误?
|
|
|
|
但我认为它需要ISR的静态本地,对吧?这会导致初始化困难吗?
|
|
|
|
如果您在第一个POST中真正定义了主()中的全局变量,那么它们不是全局变量。它们不是全局变量,而是主(局部)变量,不存在于主()之外。它们应该在主体()之前定义。
|
|
|
|
但我认为它需要ISR的静态本地,对吧?这会导致初始化困难吗?使它与具有ISR的源代码文件保持静态(本地)。isr()材料的头文件将具有getter和setter的原型,但不会告诉任何人变量本身。
|
|
|
|
简单地使用一个全局变量究竟有什么错误?这不能是一个非常复杂的项目,16F628根本没有那么多ROM/RAM资源来支持它。保持单个全局变量的控制不是一项艰巨的任务,在任何一种情况下,可用的RAM都是相同的。所有额外的功能都会增加开销,占用ROM空间。
|
|
|
|
杰克,你是对的,我也是这么想的。目前我的代码闪存为6%,RAM使用率为5%。
|
|
|
|
是“使用”还是“未使用”百分比?
|
|
|
|
二手物品
|
|
|
|
只有小组成员才能发言,加入小组>>
5248 浏览 9 评论
2036 浏览 8 评论
1956 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3218 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2264 浏览 5 评论
787浏览 1评论
678浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
604浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
685浏览 0评论
582浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 13:46 , Processed in 1.321956 second(s), Total 66, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号