串口中斷程序步驟:
串行口工作之前,應對其進行初始化,主要是設置產生波特率的定時器1、串行口控制和中斷控制。具體步驟如下:
●確定串行口控制(編程SCON寄存器確定串口工作方式SM0,SM1,允許串口接受REN);
●確定T1(定時器)的工作方式(編程TMOD寄存器);
●計算T1的初值,裝載TH1、TL1;
●串行口在中斷方式工作時,要進行中斷設置(編程IE、IP寄存器)。中斷源的中斷允許 打開總中斷CPU開中斷
——打開允許中斷,依次打開串口允許中斷位ES,總中斷允許位EA(=1,允許)
●啟動T1(編程TCON中的TR1位);
●當串口有中斷請求時(串口有數據傳輸時)即中斷源發生響應,開始進入中斷程序
對應代碼:藍色是外加條件,紅色任何中斷的必要條件,任何中斷條件所必須設置的
SCON=0X50; //設置為工作方式1
TMOD=0X20; //設置計數器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計數器初始值設置,注意波特率是4800的
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計數器
1 void UsartInit() 2 { 3 SCON=0X50; //設置為工作方式1
4 TMOD=0X20; //設置計數器工作方式2
5 PCON=0X80; //波特率加倍
6 TH1=0XF3; //計數器初始值設置,注意波特率是4800的
7 TL1=0XF3; 8 ES=1; //打開接收中斷
9 EA=1; //打開總中斷
10 TR1=1; //打開計數器
11 } 12
13 void Usart() interrupt 4
14 { 15 u8 receiveData; 16
17 receiveData=SBUF;//出去接收到的數據
18 RI = 0;//清除接收中斷標志位
19 SBUF=receiveData;//將接收到的數據放入到發送寄存器
20 while(!TI); //等待發送數據完成
21 TI=0; //清除發送完成標志位
22 }