1.“水量”的確定
我們已經(jīng)懂得怎么選用“試管”了,如何裝多大的“水量”來決定定時(shí)的時(shí)長(zhǎng)呢。首先我們先拿“大試管”來說,定時(shí)器0有兩個(gè)寄存器分別是TH0和TL0,大家再次粗淺的把TH0和TL0認(rèn)為是兩個(gè)8位的變量先吧。因?yàn)槲覀冇玫氖恰按笤嚬堋?,這兩個(gè)8位的變量相當(dāng)于組合成了16位的變量,TH0是高8位(H:High),TL0是低8位(L:Low)。假如此時(shí)再過一個(gè)刻度的時(shí)間就溢出,
那么此時(shí)會(huì)有“TH0等于255”,“TL0等于255”,因?yàn)槎M(jìn)制的1111111111111111等于十進(jìn)制的65535。65535再加1就溢出嘛。
可是我們還不知道增加一個(gè)刻度的水花費(fèi)的時(shí)間是多少。
這里筆者直接告訴答案給大家,因?yàn)槲覀冇玫氖?1.0592M的晶振,所以每增加一個(gè)刻度的水花費(fèi)的時(shí)間是(12/11059200)秒。
上面的“(12/11059200)”知識(shí)點(diǎn),如果筆者要全部講解出原理給大家,需要很多筆墨,建議大家尋找相關(guān)的一些機(jī)器周期、時(shí)鐘周期等知識(shí)資料和視頻講解來更加深入的理解定時(shí)器吧,又或者參考《手把手教你學(xué)51單片機(jī)》文檔5.2節(jié)。
不過我們盡量多做幾道題目,慢慢知其然先,等大家去涉獵更多的相關(guān)知識(shí)之后自然會(huì)知其所以然,這也是本教程的一個(gè)教學(xué)特點(diǎn),鼓勵(lì)大家多去尋找相關(guān)知識(shí)混合學(xué)習(xí)。
2.定時(shí)的毫秒數(shù)
如果我們用“大試管”定時(shí)20毫秒后觸發(fā)中斷該怎么實(shí)現(xiàn)呢?
首先我們先往這兩個(gè)寄存器填充數(shù)值(裝好一定的水量)
可以看到,兩個(gè)“8位的變量”從高到低合起來成為16位的變量,至于定時(shí)20ms為什么是這樣填充,我們先用反推法給大家演示。
十六進(jìn)制的0XB800換算成十進(jìn)制的值為47104,于是定時(shí)的時(shí)長(zhǎng)為(65536-47104)=18432個(gè)刻度的單位時(shí)間。
18432*(12/11059200)=0.02秒=20毫秒。
我們?cè)僬?,要定時(shí)50毫秒怎么給TH0和TL0賦初值?
設(shè)距離溢出還剩x個(gè)刻度,x*(12/11059200)=0.05
解得x=46080。
所以需要提前給“大試管”裝好65536-46080=19456個(gè)刻度的水量。
也就是填充給TH0和TL0合成的“16位的變量”的值就是19456。
19456換算成十六進(jìn)制為0x4C00。
所以要定時(shí)50毫秒,那么“TH0=0x4C;”、“TL0=0x00;”。
3.簡(jiǎn)要概括
我們這樣總結(jié),要定時(shí)的時(shí)間設(shè)為x秒,那么填充給TH0和TL0合成的“16位的變量”的初值就為65536-( x/(12/11059200) )。
因?yàn)?12/11059200)代表一個(gè)刻度的時(shí)間,如果我們要定時(shí)的是0.05秒,那么( 0.05/(12/11059200) )就代表要多少個(gè)刻度。
而65536-( 0.05/(12/11059200) )就是我們提前要裝好的水的刻度。
如果看到這,讀者對(duì)這三講的內(nèi)容還是無法理解定時(shí)器的原理的話,就先放一下理論知識(shí)上的理解,通過后面我們的幾道題目來模糊認(rèn)識(shí)這個(gè)硬件模塊的功能,往后自己多去了解別人對(duì)這個(gè)知識(shí)點(diǎn)的全面解析,這樣才會(huì)徹底弄懂這些知識(shí)。
這里感慨一句,數(shù)學(xué)在我們的生活中所發(fā)揮的作用是有多大??!
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程