新聞中心

89C52串口通信

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

unsigned char flag,a;
void main()
{

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

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

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

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

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

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



關鍵詞: 89C52串口通

評論


技術專區(qū)

關閉