微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 串口

51单片机 串口

时间:11-25 来源:互联网 点击:
串口这货,重要性就不用说了。哪里有单片机,哪里就有串口了。

直接上代码:

#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() interrupt 4
{
flag=1;
RI=0;
accept_data=SBUF;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top