7.定时器初始化新写法

发布日期:2020-12-26 09:10:06 来源:网络转载

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)

8.2.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;

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。