串口這貨,重要性就不用說了。哪里有單片機(jī),哪里就有串口了。
本文引用地址:http://m.butianyuan.cn/article/201611/321314.htm 直接上代碼:
#include
#define uint unsigned int
#define uchar unsigned char
uint flag; //串口中斷標(biāo)志變量
uchar accept_data; //串口接收到的數(shù)據(jù)
uint i; //用于把"I get "六個字符型數(shù)據(jù)發(fā)送出去
uchar code table[]="I get "; //字符型編碼數(shù)組
void init(); //串口中斷初始化函數(shù)聲明
void send(); //發(fā)送函數(shù)聲明
void main()
{
init();
while(1)
{
if(flag==1)
{
send();
}
}
}
//串口初始化函數(shù)主體
void init()
{
//t1定時器初始化(由于t0定時器溢出之后沒有動作需要,所以這里不需要打開t0中斷,不需要寫t0中斷服務(wù)程序)
TMOD=0x20;
TH0=0xfd;
TL0=0xfd;
TR1=1;
//串口中斷初始化
REN=1; //允許接受數(shù)據(jù)
SM0=0;
SM1=1; //選擇方式一
EA=1; //打開總中斷
ES=1; //打開串口中斷
}
//串口數(shù)據(jù)發(fā)送函數(shù)主體
void send()
{
if(flag==1) //如果接受了數(shù)據(jù),因?yàn)榻邮軘?shù)據(jù)完成之后,單片機(jī)會自動申請中斷,又串口中斷打開的,所以中斷有效
{
ES=0; //關(guān)閉串口中斷,此時只是發(fā)送數(shù)據(jù),不需要接受數(shù)據(jù)。必須關(guān)閉
for(i=6;i>0;i--)
{
SBUF=table[i]; //"I_get_"一共六個字符,需要一個一個發(fā)送出去
while(!TI) //發(fā)送一個字符結(jié)束之后,TI=1(自動)
{
}
TI=0; //軟件清零
}
SBUF=accept_data; //發(fā)送接受到的數(shù)據(jù)
while(!TI)
{
}
TI=0;
ES=1; //打開串口中斷,下一次接受數(shù)據(jù)準(zhǔn)備
flag=0;
}
}
//串口中斷服務(wù)程序主體
void serial_port() interrupt 4
{
flag=1;
RI=0;
accept_data=SBUF;
}
評論