51串口通信程序(带详细注释)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51串口通信程序(带详细注释)
#include#include //后面有一个比较函数#define uchar unsigned char#define uint unsigned intbit 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();