您的位置:首页 > 其它

[51单片机] 串口通讯 简单通信

2014-06-14 21:08 239 查看
/*-------------------------------------------
简单的串口通信
-------------------------------------------*/
#include<reg51.h>

#define uint unsigned int
#define uchar unsigned char

uchar flag,a,i;                    //标志接收串口中断标志,接收SBUF内容
uchar code table[]="I get ";
/*--------------------------------------------
延时函数
---------------------------------------------*/
void delay_ms(uint z)
{
uint y;
while(z--)
for(y=110;y>0;y--);
}
/*--------------------------------------------
USAR初始函数
---------------------------------------------*/
void USRT_init()
{
TMOD=0x20;            //设置T1定时器工作方式2
TH1=0xfd;            //T1定时器装初值
TL1=0xfd;
TR1=1;                //启动T1定时器
REN=1;                //允许串口中断接收
SM0=0;                //设定串口工作方式
SM1=1;
EA=1;                //开总中断
ES=1;                //开串口中断
}
/*--------------------------------------------
串口中断程序
---------------------------------------------*/
void ser()interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
/*--------------------------------------------
主函数
---------------------------------------------*/
void main()
{
USRT_init();
while(1)
{
if(flag==1)                //检测到串口中断。表示有数据传过来了
{
ES=0;                //关闭串口中断,接下来要发送数据,如果不关闭每次发送之后串口中断都会执行又进入if(flag==1)那里,然后死循环
for(i=0;i<6;i++)    //将table[]中的前6个发送出去
{
SBUF=table[i];
while(!TI);        //每次等待发送完毕,再执行下一条
TI=0;            //手动清0
}
SBUF=a;                //将收到的数据发送出去
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: