为什么89C51单片机里面有TH0=(65536-50000)/256;TL0=(65536-50000)%256;

由于89C51的晶振频率为12MHZ,机器周期是1us,则每1us产生一次计数,例如需要进行50ms的计时,对机器周期进行50000计数就可以得到,T0可以对机器周期进行65536次计数,为了不让T0溢出,我们需要对定时器/计数器赋初值,加上一个数就能等于65536,也就是65536和50000的差值,这个值就是初值:15536。

除以256是因为计时器第二种方式中是由一个高8位(TL0)和低8位(TH0)存储组成的:

如果要把差值装进这两个8位,低8位最多只能装256个机器周期,256个周期满了就用高8位的,意思是说低8位满一次高8位加1,那么高8位装多少,低8位就满了几次,算法就是用差值除256取其整数,接下来就是剩下小于256次数的就放在低8位,就是差值的余数。如果我要放一个超过256的数,需要超过先放高八位,把剩下的部分放在低八位中,TH0=(65536-50000)/256就是把TL0中放不下的部分放在TH0中,再把剩下的部分放在TL0中。

void timer(0) interrupt 1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

flag++;

if(flag==20)

{}

}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值