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