51单片机 |
您所在的位置:网站首页 › mcu与pc之间通过串口进行传输 › 51单片机 |
目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部结构 2.5.相关寄存器 2.6.工作模式(模式1) 2.7.如何配置串口中断 3.实际应用 3.1.单片机向电脑发送数据 3.2.电脑向单片机发送数据 1.什么是通信 1.1.通信的概念简单来说,通信就是传递信息;我把信息发给你,你把信息发给我,这就是通信;但是我如何把信息准确传递给你,方式有很多。 在硬件领域,通信的方式也有很多种,从简单的串口通信,到I2C,SPI,CAN,MIPI等,不同的通信总线,对应的协议也不同;但通信的本质有相同之处; 按照数据传送方式可分为串行通信和并行通信;按照通信的数据同步方式,可分为异步通信和同步通信;按照数据的传输方向又可分为单工、半双工和全双工通信 1.2.传送方式计算机与外界的信息交换称为通信,通信传送的基本方式可分为并行通信和串行通信两种; 并行通信:将数据字节的各位用多条数据线同时进行传送,如系统总线; 优点:控制简单,传输速度快;缺点:由于传输线较多,长距离传送时成本高;抗干扰能力差,固接受方的各位同时接收存在困难;串行通信:将数据字节分成一位一位的形式,在一条传输线上逐位传送 优点:传输线少,长距离传送时,成本低;抗干扰能力强,适合长距离传送;缺点:控制复杂,传输速度慢;![]() 同步通信:同步通信是一种连续传送数据的通信方式,一次通信传送多个字符数据,称为一帧信息。 特点:数据传输速率较高;其缺点是通信双方必须建立准确的位定时信号,也就是发送时钟和接收时钟保持严格同步;![]() 异步通信:在异步通信中,数据通常是以字符或字节为单位组成数据帧进行传送的。收、发端各有一套彼此独立,互不同步的通信机构,由于收发数据的帧格式相同,因此可以相互识别接收到的数据信息 特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。![]() 串行通信的传送方式有三种,分别是单工、半双工和全双工。 单工: 数据传输只支持数据在一个方向上传输; 半双工: 允许数据在两个方向上传输,但某一时刻只允许数据在一个方向上传输,实际上是一种切换方向的单工通信,不需要独立的接收端和发送端,两者可合并为一个端口; 全双工: 允许数据同时在两个方向上传输,因此全双工通信是两个单工方式的结合,需要独立的接收端和发送端。 ![]() 串口通信(Serial Communication),是指外设和计算机间通过数据信号线地线等按位进行传输数据的一种通信方式,属于串行通信方式。串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。 51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。 2.1.硬件电路简单双向串口通信有两根通信线(发送端TXD和接收端RXD),交叉连接,并且共GND,如图: ![]() 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种: TTL电平:+5V表示1,0V表示0RS232电平:-3~-15V表示1,+3~+15V表示0RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号) 2.3.常见接口![]() 此外,还有CAN、USB等; 2.4.内部结构有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误 ![]() ![]() 1.串口控制寄存器SCON ![]() ![]() 2.电源控制寄存器PCON 只有一位SMOD和串口工作相关,其他位是电源控制相关;那为什么和串口相关的控制位,会放到PCON去呢,原因是串口控制位超过了8位,刚好电源的控制位用不到8位,所以... ![]() 模式1:模式1是10位数据的异步通信口,其中1位起始位,8位数据位,1位停止位,TXD和RXD分别为数据的发送和接收引脚;其传输波特率是可变的,对于51单片机,波特率由定时器1的溢出率决定;通常我们在做单片机与单片机串口通信,单片机与计算机串口通信,计算机与计算机串口通信时,基本都选择模式1,其传输一帧的数据格式如下: ![]() 模式1传输一帧的数据共10位,1位起始位(0),8位数据位,最低位在前,最高位在后,1位停止位(1),帧与帧之间可以有空闲,也可以无空闲,模式1数据输出和输入时序图如下: ![]() ![]() 波特率:模式1的波特率是可变的,波特率=2^SMOD/32*溢出率; 当单片机工作在12T模式时,定时器1的溢出率=SYSclk/12/(256-TH1)当单片机工作在6T模式时,定时器1的溢出率=SYSclk/6/(256-TH1)溢出率:单位时间(秒)内定时器/计数器1回0溢出的次数,即定时器/计数器1的溢出率=定时器/计数器1的溢出次数/秒 2.7.如何配置串口中断在具体操作串行口之前,需要对单片机的一些与串口有关的特殊功能寄存器进行初始化设置,主要是设置产生波特率的定时器1,串行口控制,和中断控制,具体步骤如下: 配置TMOD寄存器:确定定时器的工作模式(T2);配置TCON寄存器:定时器的控制开关;计数器初值配置:装载TH1,TL1;配置SCON寄存器:确定串行口工作模式;中断配置:串行口在中断方式时,要进行中断设置(配置IE,I);![]() 功能需求:串口向电脑发送递增的16进制数据(单片机每隔一段时间通过串口向电脑发送数据) 程序设计:首先,将串口有关的特殊功能寄存器进行初始化设置(初始化);其次,定义串口需要发送的字节(子函数);最后,通过主函数实现想要的效果 #include #include "Delay.h"unsigned char Sec;//全局变量//*串口初始化函数/********************************************因定时器1在工作模式2时,为8位自动重装方式,我们进中断后无事可做,因此,无需打开定时器1的中断,更无需写定时器1的中断服务程序**********************************************/void UART_Init(){ TMOD&=0x0F; TMOD|=0x20; TR1=1; TH1=0xF3; TL1=0xF3; ET1=0; SCON=0x40; PCON|=0x80;}//*子函数void UART_SendByte(unsigned char Byte){ SBUF=Byte; //把Byte的值赋给缓存SBUF while(TI==0); //确认发送控制器TI标志位的状态,只有当TI不等于0时,才会跳出循环 TI=0; //清除发送完成标志位}//*主函数void main(){ UART_Init(); while(1) { UART_SendByte(Sec); Sec++; Delay(1000);//延时1s }}![]() 功能需求:电脑向单片机发送数据,同时控制LED灯亮灭 程序设计:首先,将串口有关的特殊功能寄存器进行初始化设置(初始化);其次,定义串口需要发送的数据(子函数);最后,通过主函数和中断服务程序,实现想要功能 #include //*串口初始化函数void UART_Init(){ TMOD&=0x0F; TMOD|=0x20; TR1=1; TH1=0xF3; TL1=0xF3; ET1=0; SCON=0x50; PCON|=0x80; ES=1; EA=1;}//*子函数void UART_SendByte(unsigned char Byte){ SBUF=Byte; //把Byte的值赋给缓存SBUF while(TI==0); //确认发送控制器TI标志位的状态,只有当TI不等于0时,才会跳出循环 TI=0; //清除发送完成标志位}//*主函数void main(){ UART_Init(); while(1) { }}//*中断函数void UART_Routine() interrupt 4{ if(RI==1) //接收中断 { P2=~SBUF;//将P2口赋值为~SBUF,控制LED亮灭 UART_SendByte(SBUF);//单片机接收电脑发送的数据 RI=0; //清除接收完成标志位 }} |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |