背景知識
電腦雖然可以利用輪詢循環執行時間倍數來計時,但是不同的程式執行所需時間不同,所以那種方式雖可以計時,但不容易準確,也不可能計數很精細的時間。本實驗將介紹如何使用微控器內部的計時計數器來增加計時的精密度以及準確度。
計時原理及影響:
計時的原理,有兩個要件,第一是要產生或取得一個固定週期會發生的事件,這個發生週期我們稱之為基本週期(或基本時脈),第二是要計數這個事件發生的次數。對於計時的準確與否,主要決定於要計數的事件發生的週期是否很穩定,很準確。 以輪詢計數程式執行一個循環週期的方式,由於每一個人寫出來的程式,執行相同的工作,可能有不同的方式,所以不一定會有相同的執行週期,再來就是當程式加入新功能時其執行週期也會跟著變,所以很難準確。對於計時的精密度,則要受限於基本週期最短能到多短,以及計數器處理計數最快能數多快。
硬體計數計時器:
以硬體計時器來計時一般是由一個振盪電路提供固定的振盪週期,然後由一個硬體計數器來計數這個週期數目。硬體計數器的計數模式,相關暫存器及接腳簡單介紹如下:
1. 上數或下數計時:上數計數器每次計數值遞增,下數計數器每次計數值遞減。
2. 計數起始或上限值暫存器:此暫存器可以讓使用者寫入值,這個值可以做為下數計數的起始值或則上數計數的上限值,當下數到0或則上數到設定上限時,即完成計數工作。
3. 循環與否:計數器在數到時會重新計數者循環計數,若數完一次即不再數即為非循環計數。
4. 計數完成的訊號:一般硬體會以旗標或中斷或則兩者一起的方式讓計時知道已經數過一個週期。
5. 計數開始觸發訊號:計時計數器的開始必需要有一個觸發訊號,這個觸發訊號可以是軟體觸發或則是硬體觸發。軟體觸發方式是提供一個控制旗標,當程式執行到寫入這個旗標時即觸發計時計數器開始計時計數。硬體觸發方式則是當電腦計時電路的輸入接腳有一個準位變化時觸發計數計時硬體電路開始計數。
6. 暫停及阻斷:計數器有時會準備一個控制腳,讓計時電路於計數計時當中以硬體線路準位的變化控制計數器暫存計數,或則阻斷觸發訊號不讓計數器開始計時計數。
7. 計數器的讀取及栓鎖:有些應用會讀取計數中的值,這時計數器會提供暫存器位址以供CPU可以讀取其計數值。若是需要很長又很準確的計數值,這時一個word的計數器可能還不夠計數其最大值。必需要有兩個word以上的計數值,在讀取時多半以同一位址先後讀取。為避免依先後陸續讀取兩個word以上的計數值時,於分別讀取兩word之間發生進位,而造成讀值的錯誤。應提供栓鎖功能,讓計數器在串聯之下,可同一時間栓鎖串接之計數器,以避免進位時造成誤差。