※ 引述《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