在眾多的51系列單片機(jī)中,要算國內(nèi)STC 公司的1T增強(qiáng)系列更具有競爭力,因他不但和8051指令、管腳完全兼容,而且其片內(nèi)的具有大容量程序存儲(chǔ)器且是FLASH工藝的,如STC12C5A60S2單片機(jī)內(nèi)部就自帶高達(dá)60K FLASHROM,這種工藝的存儲(chǔ)器用戶可以用電的方式瞬間擦除、改寫。而且STC系列單片機(jī)支持串口程序燒寫。顯而易見,這種單片機(jī)對(duì)開發(fā)設(shè)備的要求很低,開發(fā)時(shí)間也大大縮短。寫入單片機(jī)內(nèi)的程序還可以進(jìn)行加密,這又很好地保護(hù)了你的勞動(dòng)成果。
POF:是判斷是上電復(fù)位還是中斷復(fù)位和看門狗復(fù)位;
PD:置1時(shí),進(jìn)入power down模式,可由外部中斷低電平觸發(fā)或下降沿觸發(fā)中斷模式喚醒,也可啟動(dòng)掉電喚醒專用定時(shí)器喚醒。喚醒引腳有:INT0/P3.2 ,INT1/P3.3 ,INT/T0/P3.4 ,INT/T1/P3.5 ,/INT/RXD/P3.0 。。。
IDL:置位,進(jìn)入IDLE模式,除CPU不工作外,其余繼續(xù)工作,可由任何一個(gè)中斷喚醒
GF1,GF0:兩個(gè)通用工作標(biāo)志位,用戶可由任意使用
SMOD:波特率倍速位,置1,串口通訊波特率快一倍
外部中斷喚醒:
#include
uchar temp=0xf0; //指示標(biāo)志
//外部中斷初始化
void InitInterrupt()
{
EX0=1;
IT0=1;
IT1=1;
EX1=1;
EA=1;
}
//延時(shí)函數(shù)1s
void delay(void) //誤差 0us
{
unsigned char a,b,c;
for(c=167;c》0;c--)
for(b=171;b》0;b--)
for(a=86;a》0;a--);
// _nop_; //if Keil,require use intrins.h
}
//主函數(shù)
void main()
{
uchar num; //指示變量,用于賦值給p2口
InitInterrupt(); //中斷初始化
while(1)
{
num++; //每次睡眠喚醒加1
P2=~num; //用p2口顯示出來
PCON=0X02; //進(jìn)入睡眠模式
}
}
//外部中斷0
void inter0() interrupt 0
{
temp=~temp;
P1=temp;
delay();
}
//外部中斷1
void inter1() interrupt 1
{
temp=~temp;
P1=temp;
delay();
}
//工作在空閑模式,可以使用定時(shí)器
#include
uchar temp=0xf0; //指示標(biāo)志
//外部中斷初始化
//延時(shí)函數(shù)1s
void delay(void) //誤差 0us
{
unsigned char a,b,c;
for(c=167;c》0;c--)
for(b=171;b》0;b--)
for(a=86;a》0;a--);
// _nop_; //if Keil,require use intrins.h
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
//主函數(shù)
void main()
{
uchar num; //指示變量,用于賦值給p2口
InitTimer0();
while(1)
{
num++; //每次睡眠喚醒加1
P2=~num; //用p2口顯示出來
PCON=0X01; //進(jìn)入睡眠模式
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x4C;
TL0 = 0x00;
temp=~temp;
P1=temp;
delay();
//add your code here!
}
評(píng)論
查看更多