问一个关于定时器的问题

wj_yhl wj_yhl 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <reg51.h>
sbit P0_0 = P0^0;
void main( )
{
TMOD = 0x01; /*定时器T0方式1 */
TR0 = 1; /*启动T0*/
P0_0=1;
while(1){
TH0 = (65536-255 / 256); /*装载定时初值 */
TL0 = (65536-255 % 256);
do{
; } while(!TF0); /*查询TF0=1?*/
P0_0 = !P0_0; /*1ms时间到,P1.0反相*/
TF0 = 0; /*软件清TF0*/
}
}

这是一段定时器使用的代码,我想问一下下面那段装载定时器常数的代码正确吗?

方式1:

TH0 = (65536-255 / 256); /*装载定时初值 */
TL0 = (65536-255 % 256);

理论上是没错的,不过我在使用的过程中发现,当装入小于256的数值时,led闪得很厉害,但是当转入大于等于256的数值时,一直亮着,这到底是为什么呢?

方式2:

TH0 = (-255 / 256); /*装载定时初值 */
TL0 = (-255 % 256);

我在用keil调试的过程中发现,这两种方式和直接装载16进制的跟踪结果是不一样的,为什么啊?

通常用的方法是:

最大值-计数值=初始值
...全文
评论 6
收藏 已收藏
分享
返回顶部
wj_yhl
单片机/工控 27,522 成员 28,796 内容