Re: [問題] [PIC] timers.h 中的 WriteTimer涵數
自己最近拿個範例來試WriteTimer()函數
試的結果,(a數-b數)自己感覺的定義
a數-b後的結果,會存在TRM1H(較高的八元位)跟TRM1L(較低的八位元)中
當然,如果只是設定為八位元的Timer,結果只會存在TRM1L裡
這是我從範例裡觀察的心得
我用的範例是這樣
EX1:如果按了四次SW開關,Timer0中斷,執行中斷程序裡的程式。
這個範例WriteTimer0裡的a-b是為256-4
把256-push_no,push_no為按sw開關的次數
以這範例來看,push_no=4,所以相減結果為252,換算成16進位為0xFC
因為此範例是用8位元的Timer0,所以只丟TMR0L=0xFC
因為Timer的中斷條件是當TMRxL(16位元時是TMRxH:TMRxL)=0時發生中斷
所以當SW開關按了4次,TMR0L累加了4次,TMR0L=0因此發生中斷
如果題目改5次,相減結果為0xFB,所以TMR0L就要多累加一次才可中斷
EX2:每0.5秒讓LED程式二進制累加動作。
這個範例WriteTimer裡的a-b是為65536-16384
相減結果為49152,換算成16進位為0xC000
此範例是用16位元的Timer1,所以是把結果丟到TMR1H:TMR1L=0xC000
因為Timer的中斷條件是當是TMRxH:TMRxL=0x0000時發生中斷
從書上所給的資料
內部的震盪頻率在TMR1H=0xC0時剛好是0.5秒,=0x80時為1秒
而我自己試著直接給WriteTimer 0xC0跟0x80
結果執行起來是一樣的(還是差異我看不出來?)
但為何要用(a數-b數),從EX2可能比較看不出來用意
但從EX1可以知道,這樣的寫法就可以省去計算TRMxH:TRMxL要從多少開始
中斷頻率只要事先算好b數的變化值為多少(EX1中,每一個push_no代表按一次)
那之後需要改變中斷頻率就容易多了
以上是我測試範例所得到的心得,但不知道是否函數真正的意義是不是這樣。
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.137.100.26
→
12/20 13:28, , 1F
12/20 13:28, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章