精華區beta Electronics 關於我們 聯絡資訊
※ 引述《CuckooBoy (阿書)》之銘言: : SORRY!我研究了一個下午...還是有以下一些問題想請教各位大大.. 嗯..不知道原PO您自修參考的的資料是哪些... 如果可以的話小弟建議您還是買本KEIL C實務教學的書看看 因為您可能少了一些微處理機或計組計結的底子.. 所以這樣亂摸下去也很辛苦...或是修一下相關的課程吧^^ : 我只是想用timer0作 0~10記時 : 1. 下面程式是否已經是使用Timer0必須輸入的指令?有少嗎? : 因為我看一些的資料,還有寫到函式void timer1_ISR (void) interrupt 3 這是中斷函式...向量3我記得好像是TIMER1? : 但是,我測試結果,只要給TMOD跟TR0,Timer0就會跑啦? TIMER的使用是8051本身硬體的計數暫存器...TR0給下去固然會跑 可是你下面是操作在模式1不是AUTO-RELOAD...所以當16-BIT的TH_TL溢位了 你什麼事也沒做也是白搭... : 2. TL0為什麼都是+2在計數? 當TL0=0xFF時,TH0才+1呢? 兩者的用途? 當您操作在16-BIT時...他的關係是{TH0_TL0}併在一起的16-BIT暫存器 如果是在模式2"AUTO-RELOAD"時當TL0溢位時會自動將TH0的值 RELOAD給TL0 (很久沒碰了..有點忘記..也可能是2個腳色互換..總之是一個做計數.. 一但溢位則從另一個讀值進來繼續計數...PS. 8051的TIMER為向上計數) : 3. 我要取計數的結果,是要用哪個變數呢?TH0嗎? : (假如不影響計時下,計時到10,x要為1,那我是寫 if (TH0 = 0xFF){ x=1}嗎?) 因為您只要計數10..所以模式1的16-BIT_可說是大才小用... 建議您使用模式2.將計數的那個(假設是TL0)一開始設為256-10=246..TH0亦是 之後再寫個中斷函式...向量為2..裡面是你每計數到10要做的事就可以了 : 4. 假如我要記時到10,所以TL0=0xF6,TH0=FF,但我看到他第六次就TF0=1溢位勒? : (65536-10)/32 取商跟餘數的16進位 : 溢位後,記時器不是應該又回到TL0=0xF6,TH0=FF開始計時嗎?好像不沒有耶!!! 一樣...模式1硬體是不會自動RELOAD..必須您用軟體做 : #include <reg52.h> : #include <stdio.h> : void main (void) : { : TMOD = 0x01; : TR0 = 1; : while (1); : } 手邊沒有書...一切憑印象...除了一些小細節..大部分的問題應該都有解決到 有時間的話.我再找找之前寫的小範例給您看看.. 有錯還請指教^^ ---------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.175.197.87