51单片机之串口通讯

2018/3/26
51单片机
1.说在前面
今天,将 51一些最基础的功能全部速通了一遍,问我有什么感受嘛,单片机的确挺好玩的,用心去钻研才最重要,当然,对于51而言,点一个灯,按一个键并不是终点,51还有很多可以玩的地方,等待去探索;
2.串口通信
1.为什么要实现串口通信
对于单片机而言,串口通信相当于单片机的交流工具,使用单片机的串口通讯可以让单片机和直连的电脑连接,或者和一些无线模块(esp8266,HC06)进行连接,达到近程或者远程的连接
2.串口通信的一些基础知识
1.同步通信:需要实现发送方对接收方时钟的直接控制,位和字符均同步
2.异步通信:每个字符要附加两到三位的起止位和校验位,操作方便但是传输效率不高
3.比特率(波特率):每秒传输二进制代码的位数
4.寄存器
SCON:
1.八位寄存器,用来设定串行口的工作方式,设置状态(主要对SM0和SM1进行设置)
在51单片机的工作方式中,采用10位异步收发器的时候较多(8位数据)
2.TI为发送中断位,当发送数据停止时,内部硬件设TI为1,然后用软件再次将其清零,取消中断申请
3.RI为接受中断位,当接受数据停止时,内部硬件设RI为1,然后用软件再次将其清零,取消中断申请
PCON
【51单片机之串口通讯】在PCON的第七位,存在波特率放大设备,当置于1,波特率放大;
3.串口的使用(设置串口初始化函数)
1.确定T1的工作方式(对寄存器TMOD进行编程),设置定时器
2.计算T1的初值(波特率),确定波特率一置
3.启动定时器
4.确定串行口的控制(SCON)
5.注意中断控制(启动中断器)
6.SBUF代表着数据的缓冲区,可以暂时用来存储数据
4.由此看来,串口通信和定时器和中断器可以一起使用的

//实现串口通讯 //确定T1的工作方式(TMOD) //计算TH1和TL1的初值(高四位和低四位) //启动串口工具 (启动T1)编程TCON的TR1位置 //确定串行口的控制 //中断控制 #include typedef unsigned int u16; typedef unsigned char u8; void initusart() { TMOD=0X20; //0010 0000控制m1 mo为10,表示8位有效数字定时器 //设置波特率 TH1=0xf3; TL1=0xf3; PCON=0x80; //设置波特率翻倍 TR1=1; //设置中断开关 SCON=0X50; //设置单片机的模式:10位异步收发(常用) ES=1; //串口中断 EA=1; //设置总中断 } void main() { initusart(); while(1); //循环 } void usart() interrupt 4//注意设置中断号 { u8 recdata=https://www.it610.com/article/SBUF; //接受缓冲区 RI=0; //由于硬件将电位拉高,中断,软件可以重新拉低 SBUF=recdata; while(!TI); TI=0; //重新将中断标志位变为0; }


51单片机之串口通讯
文章图片
51单片机之串口通讯
文章图片










    推荐阅读