完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我是这个论坛上的新人。我开始使用PIC18F25K50与XC8的免费版本。我建立了TMR0,以产生一个500秒的中断。中断处理如下:我有两个不同的行为取决于我是否使用这个代码(当我加载一个常量,它运行良好):如果我使用这个代码(WHE)n减去一个常量,中断不经常增加):但是,两者都应该给出相同的行为。有人能帮助我理解我的错误吗?谢谢你的进步
|
|
相关推荐
7个回答
|
|
当你加载一个常数时,你覆盖了定时器中的当前值,但是当你减去一个常数时,你从一个定时器中减去那个值,这个定时器是静止计数的,所以你在定时器中得到一个不同的值,然后是恒定的负载情况。在减法前停止计时器,然后启动计时器,看看是否得到不同的结果。它仍然是不同的,然后恒定负载情况下,因为减法将需要更长的时间来执行比一个简单的负载。记住,定时器计数为UP,当定时器溢出(FFFF到0000)时发生中断,因此定时器中会有一些计数,然后从定时器中减去并重新加载结果。
|
|
|
|
这很奇怪,当我使用一个简单的方法时:编译器将高字节加载到TMR0H,然后将低字节加载到TMR0L,怎么处理不正确呢?XC8 VER。1.36还将TMR0分配给VAR,在H阶之前在同一L中工作。
|
|
|
|
这样:在高位之前低位的读顺序是合适的,但是在高位之前写顺序也是低的,所以高位字节不会被更新。编译器需要重写低位字节才是正确的。BTW:当可能的时候,我在我的答案之前测试所有的事情。我使用XC8 VE 1.37,我相信这是最新的。
|
|
|
|
对,最好不要对访问顺序相关的多字节SFR执行直接操作。我指的是直接读写16位TMR0寄存器。编辑& gt;例如x= tMR0和tMR0= x。
|
|
|
|
嗯,*定义WordEnter 0(n){TMR0H= HyByb(n);tMR0L= LoLoad(n);}
|
|
|
|
是的,你丢失了一些东西。在第二条语句中,你给Time0计数寄存器写一个常数。XC8编译器似乎将其视为一种特殊情况。查看语句生成的代码:
|
|
|
|
试着测试这个(这更接近于原来的问题):你会得到这个:这是不适当的。我道歉,当我说我测试一切,听起来傲慢。我想当我知道我的答案是正确的时候,我被纠正了。我不是有意冒犯你。
|
|
|
|
只有小组成员才能发言,加入小组>>
5250 浏览 9 评论
2037 浏览 8 评论
1958 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3218 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2266 浏览 5 评论
788浏览 1评论
680浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
609浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
685浏览 0评论
582浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 03:34 , Processed in 1.174933 second(s), Total 57, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号