![]() |
在網(wǎng)上找個頻率計的案子看看,脈沖寬度與頻率分不開,懂得擔(dān)相互聯(lián)系就能解決 |
參與人數(shù) 8 | 黑幣 +111 | 收起 理由 |
---|---|---|
![]() | + 14 | |
![]() | + 15 | |
![]() | + 8 | |
![]() | + 16 | |
![]() | + 16 | |
![]() | + 16 | |
![]() | + 16 | |
![]() | + 10 |
zhangzhao2423 發(fā)表于 2019-3-9 20:44 教科書的例題只是假定某一特定條件的應(yīng)用。在這里假定脈沖寬度小于255個機(jī)器時鐘周期,只計算TL0當(dāng)然可以。如果脈沖寬度小于65536、大于255個機(jī)器時鐘周期就要計算(TH0<<8)|TL0,如果脈沖寬度大于65535就要計算x=(count<<16)|(TH0<<8)|TL0; |
wulin 發(fā)表于 2019-3-8 22:50 關(guān)鍵這題他沒有加溢出次數(shù)累加器啊,怎么知道他溢出多少次呢 |
只看書,不動手,真是死腦筋。假如脈沖很長,定時器寄存器計滿溢出會重復(fù)計數(shù),只要把溢出次數(shù)保存起來,最后加上TH0、TL0的數(shù)不就成了,你這個脈沖再怎么寬,呵呵,只要不斷電,幾年都行。 |
1、假設(shè)你的定時時間<256,TL0的讀書就是你的定時時間。(TL0初值=0)這里的TH0=0;不需要計算。 2、256<假設(shè)你的定時時間<65535,TH0*256+TL0就是你的定時時間(TH0,TL0的初值都為0) 3、假設(shè)你的定時時間>65535; 你可以設(shè)置初值TH0=(65535-50000)/256; TL0=(65535-50000)%256; 設(shè)置累加計算器count=0; 設(shè)置定時器0溢出中斷,每一次溢出中斷一次count加1,并重新裝載TH0,TL0初值。 你所的測量時間是50000*count+(TH0*256+TL0); |
哥們?yōu)楹稳绱说膱?zhí)著于看別人的程序呢?這匯編,你自己不動手是不可能學(xué)會的了,看得懂和自己能寫,這是完全不同的一回事呀! “作者懶呀!” 我是這么告訴你了吧?他只管把TL1的值送去顯示了,為了不管TH1了呢?就算是TH1和TL1一塊算也才65535,這萬一脈沖超過65535了呢? 8051是一個8位單片機(jī),它只能處理256以下的數(shù)據(jù)。如果脈沖的時間超過了256,比如是:1234,那么與之對應(yīng)的16進(jìn)制就是:04D2H,高8位地址存放04H,低8位地址存放0D2H,如果你想把1234在數(shù)碼管或者是在12864上顯示出來,你得先把1234分解成“1”,“2”,“3”,“4”分別存放在四個地址,這得用到除法運算,超過8位的8051沒有除法的匯編指令,只能用減法運算來實現(xiàn)。且得是高低兩個地址參與運算,一共就是四個地址。 這前前后后加顯示一塊,至少得是一百行代碼以上,到時候會越扯越多,所以“將數(shù)據(jù)送顯示緩存區(qū)并轉(zhuǎn)換成可顯示的代碼”,很顯然比我前面所說的簡單多了 |
很長,你就增加一個計數(shù)器,數(shù)TH計滿的次數(shù)不就行了嗎? |
Powered by 單片機(jī)教程網(wǎng)