8051計時器 10ms中斷的疑問 |
答題得分者是:src
|
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
請問為什麼下面的init_timer0()函數也可以達到10ms中斷???
一般我們做中斷計時不是都要向下列這兩行的作法嗎??? TH0 = (65536-10000)/256; TL0 = (65536-10000)%6; 為什麼TMOD &= 0xD8; 也可以達到效果??? PS.震盪器12Mhz void init_timer0() { TMOD &= 0xD8; //定時10毫秒 /* Timer 0 mode 1 with software gate */ TMOD |= 0xF0; /* GATE0=0; C/T0#=0; M10=0; M00=1; */ TH0 = 0xC0; /* init values */ TL0 = 0x00; ET0=1; /* enable timer0 interrupt */ EA=1; /* enable interrupts */ TR0=1; /* timer0 run */ } |
src
高階會員 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
[code c#] /*TMOD是用來設定計時模式,與計時無關 您的設定是錯誤的,結果TMOD=0XF0會使得TIMER0設定成模式0, 應將TIMER0設定成模式1且在中斷程式中TH0和TL0必須重新設定, 以下僅供參考 */ #include "reg51.h" void init_timer0() { TMOD |= 0x01; /* GATE0=0; C/T0#=0; T0=MOD1 */ TH0 = (65536-10000)/256; TL0 = (65536-10000)%6; ET0=1; /* enable timer0 interrupt */ EA=1; /* enable interrupts */ TR0=1; /* timer0 run */ } main(void) { init_timer0(); while (1); } void T0_int() interrupt 1 { TH0 = (65536-10000)/256; TL0 = (65536-10000)%6; } [/code] ===================引 用 iii0628 文 章=================== 請問為什麼下面的init_timer0()函數也可以達到10ms中斷??? 一般我們做中斷計時不是都要向下列這兩行的作法嗎??? TH0 = (65536-10000)/256; TL0 = (65536-10000)%6; 為什麼TMOD &= 0xD8; 也可以達到效果??? PS.震盪器12Mhz void init_timer0() { TMOD &= 0xD8; //定時10毫秒 /* Timer 0 mode 1 with software gate */ TMOD |= 0xF0; /* GATE0=0; C/T0#=0; M10=0; M00=1; */ TH0 = 0xC0; /* init values */ TL0 = 0x00; ET0=1; /* enable timer0 interrupt */ EA=1; /* enable interrupts */ TR0=1; /* timer0 run */ } |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |