|
外部中斷的寫法比較簡(jiǎn)單記住就行了
例如想寫一個(gè)利用外部中斷1的程序可以寫成如下:
void Intinit()
{
IT1=0;//設(shè)置外部中斷觸發(fā)方式,0表示電平觸發(fā),1表示下降沿觸發(fā)方式
EX1=1;//此處為打開外部中斷1的允許位
EA=1;//此處位打開總中斷允許位
}
定時(shí)/計(jì)數(shù)器中斷的配置也十分簡(jiǎn)單寫成如下即可:
void Timer0Init()
{
TMOD=0X01;//表示選擇了定時(shí)器0的工作模式1;同樣還有例如 0x00/0x02/0x03/0x10/0x20/0x30這幾種情況
TH0=();//這兩行是用來給選擇的相應(yīng)的定時(shí)/計(jì)數(shù)器賦初值,因?yàn)槎ㄊ怯?jì)數(shù)器 每次來一個(gè)時(shí)鐘脈沖就會(huì)記一次數(shù),一共可以計(jì)數(shù)2^16個(gè),然 后如果計(jì)滿之后會(huì)溢出,然后請(qǐng)求CPU中斷,故而再利用它完成 中斷時(shí)必須為其附上初值,這樣在機(jī)夠一定時(shí)間后就會(huì)溢出, 從而請(qǐng)求中斷。
TL0=();
ET0=1;//打開定時(shí)器中斷允許
EA=1;//打開總中斷
TR0=1;//啟動(dòng)定時(shí)器
}
void 中斷函數(shù)名() interrupt 中斷號(hào)//可以根據(jù)中斷源的優(yōu)先級(jí)來判斷中斷號(hào)
{
函數(shù)體//中斷響應(yīng)后通過中斷函數(shù)來執(zhí)行中斷函數(shù)體里面的程序,每達(dá)到一次中斷響應(yīng)主函數(shù)就會(huì)停止跳到中斷函數(shù)里面來執(zhí)行函數(shù)體,執(zhí)行完成后就又會(huì)返回主函數(shù),繼續(xù)執(zhí)行主函數(shù)的內(nèi)容。
}
串口配置也是非常簡(jiǎn)單的基于定時(shí)/計(jì)數(shù)器中斷配置只不過多了PCON,SCON兩個(gè)寄存器的配置其中PCON就是通過控制SMOD來控制波特率是否加倍的,SCON則是串口的工作方式選擇寄存器。
通過對(duì)SCON寄存器的位操作可以進(jìn)行相應(yīng)的串口設(shè)置
例如:
void TRtxin()
{
TMOD=0x10;//在進(jìn)行串口設(shè)置之前可以先把定時(shí)器設(shè)置好,這就是選擇了定時(shí) 器1的工作方式1
TH1=();
TL1=();//給定時(shí)器賦初值
ET1=1;//打開定時(shí)器1的中斷允許位
EA=1;//打開總中斷
TR1=1;//啟動(dòng)定時(shí)器
PCON=0x00;//SMOD清零,波特率不加倍
SCON=0x50;//選擇工作方式1作為串口工作方式,并且打開REN串行接收允許位
} 會(huì)
在主函數(shù)中一定要初始化一下串口,也就是調(diào)用一下配置串口的程序
由于地址位為0或8 的可以進(jìn)行位尋址故而TMOD (89H)不能位尋址只能整體定義,而TCON(88H)可以進(jìn)行位尋址,故而可以對(duì)其具體為酒精性操作
例如定是計(jì)數(shù)器控制位TR /溢出標(biāo)志位TF,外部中斷觸發(fā)方式選擇位IT/中斷請(qǐng)求標(biāo)志位IE。
EX/ET/ES/EA都屬于中斷允許寄存器(IE此處IE不同于TCON中的IE)。而中斷優(yōu)先級(jí)寄存器IP只有在涉及到中斷嵌套,看門狗等高級(jí)操作時(shí)才會(huì)用到,現(xiàn)階段不做考慮。
所謂的標(biāo)志位:像在TCON寄存器里面有TF(定是計(jì)數(shù)器溢出標(biāo)志位)/IE(外部中斷請(qǐng)求標(biāo)志位),在SCON里面有TI(發(fā)送數(shù)據(jù)標(biāo)志位)/RI(接收數(shù)據(jù)標(biāo)志位)等標(biāo)志位,就是完成某個(gè)動(dòng)作之后有一個(gè)狀態(tài)的變化例如置1以此來標(biāo)志已經(jīng)進(jìn)行了該動(dòng)作。
以上便是總結(jié)的所有關(guān)于外部中斷,定時(shí)/計(jì)數(shù)器中斷,以及串口配置的所有內(nèi)容。
|
評(píng)分
-
查看全部評(píng)分
|