您的位置 首页 测评

89C52串口通讯

includereg52h>unsignedcharflag,a;voidmain(){TMOD=0x20;设置定时器1为工作方式2TH1=0xfd;TL1=0xfd;用T1定时器设置波

#include

unsigned char flag,a;
void main()
{

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发数据时应关掉串口中止,由于发数据时
//也会引起中止,会进入中止服务程序,然后引起死循环,这一步很重要
flag=0;
SBUF=1;//发字符1
while(!TI); //等候TI是否为1,TI=1时阐明发送数据完结
TI=0;//手动清零TI
SBUF=a; //把a的值放入发送缓冲器;
while(!TI);
TI=0;
ES=1; //开串口中止
}
}
}

void ser() interrupt 4 //用中止办法接纳串行数据,当RI=1或许TI=1时进入此中止服务程序
{
RI=0; //手动清零RI
a=SBUF; //把承受缓冲器的值赋给变量a
flag=1; //自己界说的标志位
}

上面给出了两种串口通讯办法:查询法和中止法,一般用中止法(中止多好用啊!),留意用中止法时必定要留意软件清零 RI和 TI寄存器,由于串口中止服务程序进入的条件是RI=1或许TI=1,而只需承受完一帧数据后RI会主动置1(发送完一帧数据后TI会主动置1),RI,TI只能手动软件清零,假如不清零则会重复进入中止服务程序,然后使程序进入循环发送或许承受的状况。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/259901.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部