標(biāo)題:
讓我的STC單片機(jī)發(fā)揮余熱
[打印本頁(yè)]
作者:
piaolin
時(shí)間:
2015-10-1 00:41
標(biāo)題:
讓我的STC單片機(jī)發(fā)揮余熱
10年前學(xué)習(xí)單片機(jī)記得是從AT89C51開(kāi)始的,回想起那時(shí)候做遙控器解碼等很多東西用到它,用到TR1,很多接觸單片機(jī)的人我想對(duì)這個(gè)語(yǔ)句非常的收悉,TR1 = 1; 或 SETB TR1 .這是當(dāng)年用Keil編譯器的語(yǔ)句,10年后的我改變了對(duì)Keil的看法,覺(jué)得它太肆無(wú)忌憚了,雖然很方便,語(yǔ)句也很簡(jiǎn)潔,可是我感覺(jué)計(jì)算機(jī)語(yǔ)言不應(yīng)該那么隨意,應(yīng)該規(guī)范化,這樣才容易移植.自從我接觸AVR單片機(jī),一直用的是IAR編譯器,自從IAR編譯器后,我才知道什么才是計(jì)算機(jī)語(yǔ)言.比如剛才那句TR1 = 1; 應(yīng)該這樣寫(xiě)TCON_bit.TR1 = 1;至少在IAR中是這么約定的,TCON_bit代表一個(gè)結(jié)構(gòu),TR1是它的一個(gè)成員,這樣更容易理解而且如果移植到其他平臺(tái)上,TR1發(fā)生沖突的幾率至少會(huì)少很多以下是我回到8051寫(xiě)的timer1
程序,它設(shè)定了一個(gè)時(shí)間,MCU_OSC在宏里已經(jīng)定義,它指定了MCU的工作頻率,MCU_SPEED指定了MCU的工作速度,STC有兩種模式6T和12T,nReship_timer1是一個(gè)全局變量,它指定了timer1的重裝值,在timer1的中斷函數(shù)里重新裝載到TR1里.我準(zhǔn)備再做一個(gè)音頻指示燈,10年前的作品現(xiàn)在重新做一次,我手頭還有很多STC12C2052AD,讓他們發(fā)揮出當(dāng)年的色彩.
/*********** 設(shè)定定時(shí)器1為定時(shí)器 ***********************/
bool set_timer1_us(unsigned long time)
{
float scale = 1000000.0 / MCU_OSC * MCU_SPEED;// 計(jì)算分辨率(us)
if(scale * 0xFFFF < time)
{
err0 = 1;// 標(biāo)記錯(cuò)誤
err1 = 0;
return false;
}
TMOD_bit.M01 = 1;
TMOD_bit.M11 = 0;// 設(shè)置為16位定時(shí)器模式
nReship_timer1 = 0x10000 - (unsigned int)(time / scale);//計(jì)算重裝載值
IE_bit.ET1 = 1;// 打開(kāi)定時(shí)器1中斷
TCON_bit.TR1 = 1;// 打開(kāi)定時(shí)器1
return true;
}
作者:
用戶2111157
時(shí)間:
2015-10-1 13:44
向前輩學(xué)習(xí)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1