定时器自动装载c语言,定时器初始化新写法

1.书写优化

我们所写过的下面这些

TH0=0XB8;

TL0=0X00;

或者

TH0=0X4C;

TL0=0X00;

如果代码没有注释我们根本不知道这是要定时多长时间,所以为了增加程序的可读性,我们重新优化这两处的书写。

首先要明白在程序书写中,以前说过,赋值给寄存器的值可以书写成十六进制的数也可以是十进制的数。大家知道,TH0填充的是高8位,TL0是低8位,那么如果这个16位的变量的十进制值是258,二进制的值就是

0000000100000010

所以高八位的值为1 (258/256=1)

低八位的值为2        (258%256=2)

“258/256=1”和“258%256=2”的意思以前已经讲解过了,

我们也可以认为“258/256=1”是0x0102(258)右移了8位等于0x0001,简化书写就是0x01。

而“258%256=2”是0x0102(258)舍去了高8位等于0x0002,简化书写就是0x02。

再比如,一个16位的变量的十进制值是47104,二进制的值就是

1011100000000000

所以高八位的值为184  (47104/256=184)

低八位的值为0             (47104%256=0)

80670e1697aed08347fb35a49c4795dd.png

那我们要定时20ms的话,给TH0和TL0赋值方式也可以为

TH0=184;

TL0=0;

我们再举一个例子,假设定时的时间为1ms。

算出要填充“16位的变量”的值为64614=0xFC66

按照之前的写法就是

TH0=0xFC;     (0xFC=252)

TL0=0x66;      (0x66=102)

而我们像下面这样写也可以达到相同的效果

TH0=( 65536-( 0.001/(12/11059200) ) )/256

TL0=( 65536-( 0.001/(12/11059200) ) )%256

因为

( 65536-( 0.001/(12/11059200) ) )/256 = 252

( 65536-( 0.001/(12/11059200) ) )%256 = 102

有了这个思路,我们就可以把赋初值的写法改为一串数字公式即可

比如我们定时的最小单位时间为1微秒,那么定时50000微秒(50毫秒)就可以这样写来给TH0和TL0赋初值

TH0=( 65536-( (50000/1000000)/(12/11059200) )/256;

TL0=( 65536-( (50000/1000000)/(12/11059200) )%256;

这里的(50000/1000000)代表定时的是0.05秒,也就是50毫秒。

如果要定时其他毫秒数, 数字公式中的其他数字我们不需要修改,只需要把50000改为想定时的时间就可以了,计算过程交给单片机算出来,我们也就不需要自己用计算器把最终值算出来再赋给TH0和TL0这么麻烦了。

我们再化简上式就是

TH0=( 65536-( (50000*110592)/120000) )/256;

TH0=( 65536-( (50000*110592)/120000) )%256;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值