1.書(shū)寫(xiě)優(yōu)化
我們所寫(xiě)過(guò)的下面這些
TH0=0XB8;
TL0=0X00;
或者
TH0=0X4C;
TL0=0X00;
如果代碼沒(méi)有注釋我們根本不知道這是要定時(shí)多長(zhǎng)時(shí)間,所以為了增加程序的可讀性,我們重新優(yōu)化這兩處的書(shū)寫(xiě)。
首先要明白在程序書(shū)寫(xiě)中,以前說(shuō)過(guò),賦值給寄存器的值可以書(shū)寫(xiě)成十六進(jìn)制的數(shù)也可以是十進(jìn)制的數(shù)。大家知道,TH0填充的是高8位,TL0是低8位,那么如果這個(gè)16位的變量的十進(jìn)制值是258,二進(jìn)制的值就是
0000000100000010
所以高八位的值為1 (258/256=1)
低八位的值為2 (258%256=2)
“258/256=1”和“258%256=2”的意思以前已經(jīng)講解過(guò)了,
我們也可以認(rèn)為“258/256=1”是0x0102(258)右移了8位等于0x0001,簡(jiǎn)化書(shū)寫(xiě)就是0x01。
而“258%256=2”是0x0102(258)舍去了高8位等于0x0002,簡(jiǎn)化書(shū)寫(xiě)就是0x02。
再比如,一個(gè)16位的變量的十進(jìn)制值是47104,二進(jìn)制的值就是
1011100000000000
所以高八位的值為184 (47104/256=184)
低八位的值為0 (47104%256=0)
那我們要定時(shí)20ms的話,給TH0和TL0賦值方式也可以為
TH0=184;
TL0=0;
我們?cè)倥e一個(gè)例子,假設(shè)定時(shí)的時(shí)間為1ms。
算出要填充“16位的變量”的值為64614=0xFC66
按照之前的寫(xiě)法就是
TH0=0xFC; (0xFC=252)
TL0=0x66; (0x66=102)
而我們像下面這樣寫(xiě)也可以達(dá)到相同的效果
TH0=( 65536-( 0.001/(12/11059200) ) )/256
TL0=( 65536-( 0.001/(12/11059200) ) )%256
因?yàn)?/p>
( 65536-( 0.001/(12/11059200) ) )/256 = 252
( 65536-( 0.001/(12/11059200) ) )%256 = 102
有了這個(gè)思路,我們就可以把賦初值的寫(xiě)法改為一串?dāng)?shù)字公式即可
比如我們定時(shí)的最小單位時(shí)間為1微秒,那么定時(shí)50000微秒(50毫秒)就可以這樣寫(xiě)來(lái)給TH0和TL0賦初值
TH0=( 65536-( (50000/1000000)/(12/11059200) )/256;
TL0=( 65536-( (50000/1000000)/(12/11059200) )%256;
這里的(50000/1000000)代表定時(shí)的是0.05秒,也就是50毫秒。
如果要定時(shí)其他毫秒數(shù), 數(shù)字公式中的其他數(shù)字我們不需要修改,只需要把50000改為想定時(shí)的時(shí)間就可以了,計(jì)算過(guò)程交給單片機(jī)算出來(lái),我們也就不需要自己用計(jì)算器把最終值算出來(lái)再賦給TH0和TL0這么麻煩了。
我們?cè)倩?jiǎn)上式就是
TH0=( 65536-( (50000*110592)/120000) )/256;
TH0=( 65536-( (50000*110592)/120000) )%256;
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程