微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51串口通信程序(带详细注释)

51串口通信程序(带详细注释)

时间:11-29 来源:互联网 点击:
#include

#include //后面有一个比较函数
#define uchar unsigned char
#define uint unsigned int
bit UART_Flag=0; //定义串口接收标志位

uchar str[50]; //定义一数组
uchar length=0; //数组长度从0开始
void init() //初始化uart
{

TMOD=0X20; //定时器1定时器方式 工作模式2,可自动重载的8位计数器常把定时/计数器1以模式2作为串行口波特率发生器

SCON=0X50; //选择工作模式1使能接收,允许发送,允许接收

EA=1; //开总中断

ES=1; //打开串口中断
ET1=0; //打开定时器中断

PCON=0X80; //8位自动重载,波特率加倍

TH1=0XFF; //用22.1184 mhz波特率

TL1=0XFF;

TR1=1; //打开中时器

}
void UART_Putch(uchar dat) //输出一个字符
{
SBUF=dat; //把数据送给sbuf缓存器中

while(TI!=1);//发送标志位 TI如果发送了为1,没发送为0,没发送等待,到了退出循环

TI=0; //到了,TI清为0

}
void init1() interrupt 4 //uart中断 ,4为串口中断
{

if(RI==1) //收到数据
{
uchar m=SBUF; //m为计算机发送给串口的数据,例,open //总体思想是,计算机通知串口,我要发数据了
RI=0; //收到清0

if(m==) //判断m这位数据有无
{
UART_Putch(); //回车
UART_Putch(); // 换行
str[length]=; //数据最后位加0标志位表示发完了数据
UART_Flag=1; // 传 完 标 志 位
}
else if(m==)
{

}
else if(m==)//b表退格 //下面几句表删锄
{
UART_Putch();

UART_Putch( );

UART_Putch();

length=length-1; //删锄了后总长度减一
}

else
{
str[length++]=m; //比如m为open,先传0后传p,length加一
UART_Putch(m); //输出 比如open
}

}
}
void check(char *str) //计算机发一数据,我来检查,
{
if( strcmp("open",str)==0 ) //比较两数是否相同,相同为0,不同为1 //要加string.h头文件
{
UART_Putch(o); //计算机中写入open我回复ok
UART_Putch(k);
UART_Putch(); //回车是跑到这一行的最前 UART_Putch(); //换行是跳到下一行
}
else if( strcmp("close",str)==0 )
{
UART_Putch(o);
UART_Putch(k);
UART_Putch();
UART_Putch();

}
else //否则出错
{
UART_Putch(e);
UART_Putch(r);
UART_Putch(r);
UART_Putch(o);
UART_Putch(r);
UART_Putch(!);
UART_Putch();
UART_Putch();
}

}
void main()
{
init();
while(1)
{
if(UART_Flag==1) //接收标志位表示接收完成
{
check(str);//检查
length=0; //长度清0
UART_Flag=0;//标志位清0
}

}

}

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

网站地图

Top