第五課學習

      前面提到晶震的頻率時,當時以爲是一條指令執行時間就是頻率分之一,今天的教程看來卻不是,原來頻率分之一隻是一個時鐘週期,用T來表示,而一般情況下的51所指的指令時間是12倍於時鍾週期。

      TCON與TMOD用來控制定時器運行狀態的特殊寄存器,聽起來有點蒙沒完全明白。看了一遍之後,後面程序大概倒是能明白是怎麼回事,不過前面沒有太明白,所以只有再聽一遍,同時將理解的記下來。

      一般情況下單片機有兩個定時器(或者叫計數器更爲確切),所以TCON和TMOD這兩個記數器都是一分爲二的,每四個bit位針對一個計數器。以0結尾的表示爲計數器0,以1結尾的表示計數器1,比如TCON中的TF1,TR1,IE1,IT1這四位針對計數器1,TF0,TR0,IE0,IT0這另外四位則針對計數器0,TMOD也是同樣的道理。

      單片機的這兩個計數器並非一開機就起作用,而是要設置特定的一些標識才能夠開始運行。而設這些標識的地方就是這兩個特殊功能的寄存器TCON,TMOD。

      TCON計數器,該寄存器的TF位當其值爲1時表示有計數到達最大值並進行了溢出,在默認情況下其值爲0,如果不執行中斷的話,該值就會一直爲1,當溢出後,執行中斷是怎麼個情況還不清楚,後面會講,此時如果要想使計數器繼續起作用,則應該用軟件的方式將其設置爲0.TR則比較好理解,其值爲1時,表示開始計數,爲0時,則停止計數。

TMOD寄存器也是一分爲二,分別針對兩個計數器。C/T位爲0時,用作定時器,爲1時用作計數器, 這個好理解,這課是講定時器,則其值爲0,GATE位目前還是沒明白到底是個什麼意思,並且與INT1有什麼關係,INT1是什麼個情況,也不甚明白,只有先過了,後面再來考慮這個問題,貌似程序沒用到,直接給其設置爲了0.M1和M0這兩位一共有四種組合,根據教程,目前用於計數器,所以只用模式以,即M1值爲0,M0其值爲1即可。

      教程中整個定時器程序中採用的是使用計數器0進行的定時器操作,計數器1沒有用到。

      計算時間長度說白是根據計數器的計數次數進行的累加以得到的時間延長,計數器每計一次數即累加1,則將運行一個機器週期,這個是固定不變的,比如計數器從0累加到1,則這個時間花費是:12/11059200這麼長的時間(注:11059200爲晶震的震盪頻率)。實際上這個非常小,就算運行一個完成的溢出(即累加65536次),則其花費的總時間長度爲65536*(12/11059200)~=0.0711,即約爲71毫秒,通常情況下這個71毫秒不太有用,一般我們可以算算執行時間花費50毫秒時,一共計了多少個數,這樣一來,如果要取整秒的話,就相當地容易了,比如要執行一秒的話,讓其再執行個20次就到達了一秒時間。

      50毫秒的計算方法是X*12/11059200=0.050,X表示執行次數,求出來,其值爲46080次,即只要執行46080次累加的時間就是50毫秒,如此一來,我們只需要將TH0與TL0的初值設置爲65536-46080=19456=0x4c00,這樣,每次執行一次溢出就表示一個50毫秒,只要執行20次溢出就到達了一秒了。這就是進行定時器的方法,具體見小宋老師的程序,他是先計算花費20毫秒的次數,然後累次溢出50次就表示一秒,我和他剛好相反,我是計算50毫秒來進行了,這個沒有什麼本質上的區別。

      38譯碼器中的標識與原理圖中的標識有些對應不上,這裏標識一下。原理圖上的A0,A1,A2對應於38譯碼器手冊中的A,B,C。原理圖上的E3對應手冊中的G3,原理圖中的E1非,E2非(ENLED)對應手冊中的G2非


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章