新闻中心

51单片机 串口

作者: 时间:2016-11-25 来源:网络 收藏
串口这货,重要性就不用说了。哪里有单片机,哪里就有串口了。

本文引用地址://m.amcfsurvey.com/article/201611/321314.htm

直接上代码:

#include
#define uint unsigned int
#define uchar unsigned char

uint flag;//串口中断标志变量
uchar accept_data;//串口接收到的数据
uint i;//用于把"I get "六个字符型数据发送出去
uchar code table[]="I get ";//字符型编码数组

void init();//串口中断初始化函数声明
void send();//发送函数声明

void main()
{
init();
while(1)
{
if(flag==1)
{
send();
}
}
}
//串口初始化函数主体
void init()
{
//t1定时器初始化(由于t0定时器溢出之后没有动作需要,所以这里不需要打开t0中断,不需要写t0中断服务程序)
TMOD=0x20;
TH0=0xfd;
TL0=0xfd;
TR1=1;
//串口中断初始化
REN=1;//允许接受数据
SM0=0;
SM1=1;//选择方式一
EA=1;//打开总中断
ES=1;//打开串口中断
}
//串口数据发送函数主体
void send()
{
if(flag==1)//如果接受了数据,因为接受数据完成之后,单片机会自动申请中断,又串口中断打开的,所以中断有效
{
ES=0;//关闭串口中断,此时只是发送数据,不需要接受数据。必须关闭
for(i=6;i>0;i--)
{
SBUF=table[i];//"I_get_"一共六个字符,需要一个一个发送出去
while(!TI)//发送一个字符结束之后,TI=1(自动)
{
}
TI=0;//软件清零
}
SBUF=accept_data;//发送接受到的数据
while(!TI)
{
}
TI=0;
ES=1;//打开串口中断,下一次接受数据准备
flag=0;
}
}
//串口中断服务程序主体
void serial_port()interrupt4
{
flag=1;
RI=0;
accept_data=SBUF;
}



关键词:51单片机串口收

评论


技术专区

关闭