新聞中心

89C52串口通信

作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
#include

unsigned char flag,a;
void main()
{

本文引用地址:http://m.butianyuan.cn/article/201611/320634.htm

TMOD=0x20;//設(shè)置定時(shí)器1為工作方式2
TH1=0xfd; //

TL1=0xfd; //用T1定時(shí)器設(shè)置波特率
TR1=1; //定時(shí)器1工作
REN=1; //串口允許接收
SM0=0; //
SM1=1; //串行口工作方式1
EA=1; //CPU中斷允許
ES=1; //串行口中斷允許
while(1)
{

if(flag==1) //中斷法串口通信
{
ES=0; //單片機(jī)向PC發(fā)數(shù)據(jù)時(shí)應(yīng)關(guān)掉串口中斷,因?yàn)榘l(fā)數(shù)據(jù)時(shí)
//也會(huì)引起中斷,會(huì)進(jìn)入中斷服務(wù)程序,從而引起死循環(huán),這一步很重要
flag=0;
SBUF=1;//發(fā)字符1
while(!TI); //等待TI是否為1,TI=1時(shí)說明發(fā)送數(shù)據(jù)完成
TI=0;//手動(dòng)清零TI
SBUF=a; //把a(bǔ)的值放入發(fā)送緩沖器;
while(!TI);
TI=0;
ES=1; //開串口中斷
}
}
}

void ser() interrupt 4 //用中斷方式接收串行數(shù)據(jù),當(dāng)RI=1或者TI=1時(shí)進(jìn)入此中斷服務(wù)程序
{
RI=0; //手動(dòng)清零RI
a=SBUF; //把接受緩沖器的值賦給變量a
flag=1; //自己定義的標(biāo)志位
}

上面給出了兩種串口通信方法:查詢法和中斷法,一般用中斷法(中斷多好用?。。?,注意用中斷法時(shí)一定要注意軟件清零 RI和 TI寄存器,因?yàn)榇谥袛喾?wù)程序進(jìn)入的條件是RI=1或者TI=1,而只要接受完一幀數(shù)據(jù)后RI會(huì)自動(dòng)置1(發(fā)送完一幀數(shù)據(jù)后TI會(huì)自動(dòng)置1),RI,TI只能手動(dòng)軟件清零,如果不清零則會(huì)反復(fù)進(jìn)入中斷服務(wù)程序,從而使程序進(jìn)入循環(huán)發(fā)送或者接受的狀態(tài)。



關(guān)鍵詞: 89C52串口通

評(píng)論


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

關(guān)閉