51单片机之串口通讯

2019-04-15 15:40发布

2018/3/2651单片机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在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=SBUF;//接受缓冲区 RI=0;//由于硬件将电位拉高,中断,软件可以重新拉低 SBUF=recdata; while(!TI); TI=0;//重新将中断标志位变为0; }