我们所写过的下面这些
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)
那我们要定时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;
本文固定URL:https://www.dotcpp.com/course/378
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程