51單片機 串口通信 中斷
#include #define uchar unsigned char
本文引用地址:http://www.ex-cimer.com/article/201611/318433.htm#define uint unsigned int unsigned char flag,a,i;//聲明標志位 flag
uchar code table[]="I get"
void init()
{
TMOD=0x20;//設(shè)置T1定時器工作方式為2 8位初值自動重裝的8位定時器 這里設(shè)置了兩個計數(shù)器的工作方式
TH1=0xfd; / /T1定時器裝初值(高八位) 控制串口通信的波特率(由定時器1的溢出率控制)
TL1=0xfd; //T1定時器裝入初值(低八位)
TR1=1; //定時器1運行控制位 置一啟動定時器1
REN=1; //允許串口接收
SM0=0; //設(shè)置串口工作方式為一
SM1=1; EA=1; //全局中斷允許位 置一開全局中斷
ES=1; //串口中斷允許位
}
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI);
TI=0;//發(fā)送中斷標志 發(fā)送數(shù)據(jù)完成后觸發(fā)中斷 硬件置一 必須軟件清零
}
SBUF=a; // 串口發(fā)送數(shù)據(jù)
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void ser() interrupt 4 //串口中斷服務(wù)程序
{
RI=0; // 收到數(shù)據(jù)硬件置一,由軟件清零
a=SBUF; //將寄存器的值 賦給a flag=1; //標志位
}
此程序中共用的串口中斷,
定時器1中斷 特殊功能寄存器SBUF
中斷響應(yīng)的條件
中斷源有中斷請求 此中斷源允許位為1 cpu開中斷(即EA=1)以上三個條件同時滿足
串口通信設(shè)置
確定串口通信波特率(編程TMOD寄存器定時器工作方式寄存器)
計算定時器初值轉(zhuǎn)載THX TLX
確定串行口工作方式(編程SCON寄存器串行口控制方式寄存器)
串行口工作在中斷方式時,要進行中斷設(shè)置如TI,RI軟件清零
評論