Microchip
直播中

甘满盛

8年用户 1360经验值
擅长:386660
私信 关注
[问答]

是否将TMR1作为易失变量

大家好,芯片是PIC18F46K22。我在16位计数器模式中使用time1。下面的函数在代码中定期调用。每次调用上述函数后,Timer1应该重置为零。有时它不是这样发生的,但有时它像预期的那样工作。我必须将“T1Value”声明为易失性变量还是其他可能出现的问题?任何帮助都是值得赞赏的。

回帖(18)

王焕树

2020-4-8 06:52:19
它是从中断代码还是非中断代码调用的?如果您在中断代码中写入变量,并且以非中断代码从变量中读取,那么只需要将变量声明为“volatile”。非常清楚“16位读/写模式”在定时器寄存器上的含义。您没有显示定时器初始化,所以我不知道如何设置RD16位。当RD16时设置了,定时器的高字节是通过缓冲区访问的,所以重要的是:读低字节然后读高字节,写高字节然后写低字节。您需要检查编译器的程序集输出以查看代码在做什么。按正确的顺序排列。
举报

寇昕

2020-4-8 07:09:37
是的,RD16是在定时器初始化中设置的。我仍然必须逐一读取TMR1的高字节和低字节吗?上面的代码不足以读取高低位字节到T1Valk整数变量吗?用下面的行重置TMR1还不够吗?
举报

王焕树

2020-4-8 07:22:38
正如我已经说过的:你不能仅仅假设它会工作。在PIC18F汇编语言中没有16位的写操作,所以C编译器必须把零分别写到定时器寄存器的低字节和高字节。除非你检查程序集输出,否则你不会知道它写什么顺序。
举报

杨玲

2020-4-8 07:43:44
T1Value是函数本地的;我看不出有什么必要让它不稳定。在调试TMR1的其他问题之前,您应该先解决这个问题。
举报

更多回帖

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