Re: [問題] [PIC] timers.h 中的 WriteTimer涵數

看板ASM (組合語言)作者 (工作真難找)時間16年前 (2008/12/20 12:44), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
自己最近拿個範例來試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
剛找到MCC18的函數庫文件,是像我說那樣。
12/20 13:28, 1F
文章代碼(AID): #19J7X3k4 (ASM)
文章代碼(AID): #19J7X3k4 (ASM)