Microchip
直播中

刘丽

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

使用PIC18F25K50与XC8的出现的问题解决

大家好,我是这个论坛上的新人。我开始使用PIC18F25K50与XC8的免费版本。我建立了TMR0,以产生一个500秒的中断。中断处理如下:我有两个不同的行为取决于我是否使用这个代码(当我加载一个常量,它运行良好):如果我使用这个代码(WHE)n减去一个常量,中断不经常增加):但是,两者都应该给出相同的行为。有人能帮助我理解我的错误吗?谢谢你的进步

回帖(7)

tijing忽忽

2020-5-7 13:53:27
当你加载一个常数时,你覆盖了定时器中的当前值,但是当你减去一个常数时,你从一个定时器中减去那个值,这个定时器是静止计数的,所以你在定时器中得到一个不同的值,然后是恒定的负载情况。在减法前停止计时器,然后启动计时器,看看是否得到不同的结果。它仍然是不同的,然后恒定负载情况下,因为减法将需要更长的时间来执行比一个简单的负载。记住,定时器计数为UP,当定时器溢出(FFFF到0000)时发生中断,因此定时器中会有一些计数,然后从定时器中减去并重新加载结果。
举报

tijing忽忽

2020-5-7 14:27:29
这很奇怪,当我使用一个简单的方法时:编译器将高字节加载到TMR0H,然后将低字节加载到TMR0L,怎么处理不正确呢?XC8 VER。1.36还将TMR0分配给VAR,在H阶之前在同一L中工作。
举报

张新里

2020-5-7 14:54:24
这样:在高位之前低位的读顺序是合适的,但是在高位之前写顺序也是低的,所以高位字节不会被更新。编译器需要重写低位字节才是正确的。BTW:当可能的时候,我在我的答案之前测试所有的事情。我使用XC8 VE 1.37,我相信这是最新的。
举报

李维兴

2020-5-7 15:07:33
对,最好不要对访问顺序相关的多字节SFR执行直接操作。我指的是直接读写16位TMR0寄存器。编辑& gt;例如x= tMR0和tMR0= x。
举报

更多回帖

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