新聞中心

51單片機(jī) 串口

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
串口這貨,重要性就不用說了。哪里有單片機(jī),哪里就有串口了。

本文引用地址:http://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 "六個(gè)字符型數(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定時(shí)器初始化(由于t0定時(shí)器溢出之后沒有動(dòng)作需要,所以這里不需要打開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ī)會(huì)自動(dòng)申請(qǐng)中斷,又串口中斷打開的,所以中斷有效
{
ES=0; //關(guān)閉串口中斷,此時(shí)只是發(fā)送數(shù)據(jù),不需要接受數(shù)據(jù)。必須關(guān)閉
for(i=6;i>0;i--)
{
SBUF=table[i]; //"I_get_"一共六個(gè)字符,需要一個(gè)一個(gè)發(fā)送出去
while(!TI) //發(fā)送一個(gè)字符結(jié)束之后,TI=1(自動(dòng))
{
}
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;
}



關(guān)鍵詞: 51單片機(jī)串口收

評(píng)論


技術(shù)專區(qū)

關(guān)閉