51单片机双机串行通信设计.docx
- 文档编号:11765244
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:23
- 大小:250.75KB
51单片机双机串行通信设计.docx
《51单片机双机串行通信设计.docx》由会员分享,可在线阅读,更多相关《51单片机双机串行通信设计.docx(23页珍藏版)》请在冰豆网上搜索。
51单片机双机串行通信设计
*******************
实践教学
*******************
XXXXXX大学
XXXXXXX学院
XXXX年XXX季学期
XXXXX课程设计
题目:
51单片机双机串行通信设计
专业班级:
姓名:
学号:
指导教师:
成绩:
前言
在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。
单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。
同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。
各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。
串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。
在通信过程中,使用通信协议进行通信。
关键字:
51单片机串行通信RS-232接口标准
1基本原理
1.1串行通信与并行通信
计算机与外界的信息交换称为通信。
在通信领域内,有两种数据通信方式:
并行通信和串行通信。
随着计算机网络化和微机分级分布式应用系统的发展,通信的功能越来越重要。
通信是指计算机与外界的信息传输,既包括计算机与计算机之间的传输,也包括计算机与外部设备,如终端、打印机和磁盘等设备之间的传输。
串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。
其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。
在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。
如果一组数据的各数据位在多条线上同时被传输,这种传输方式称为并行通信。
图1-1串行通信与并行通信的区别
1.2串行接口的基本特点
MCS-51单片机的串行端口有4种基本工作方式,通过编程设置,可以使其工作在任一方式,以满足不同场合的需要。
其中,方式0主要用于外接移位寄存器,以扩展单片机的I/O电路;工作方式1多用于双机之间或与外设电路的通信;方式2、3除有方式1的功能外,还可以作多机通信,以构成分布式多微机系统。
串行端口有两个控制寄存器SCON、PCON,用于设置工作方式、发送或接收的状态、特征位、数据传送波特率[每秒传送的位数]以及作为中断标志等。
串行端口有一个数据寄存器SBUF在特殊功能寄存器中的字节地址为99H,该寄存器为发送和接收所共用。
串行端口的波特率可以用程序来控制。
在不同工作方式中,由时钟振荡频率的分频值或由定时器T1的定时溢出时间确定,使用十分方便灵活。
串口控制寄存器
输入:
在(REN)=1时,串行口采样RXD引脚,当采样到1至O的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。
只有当8位数据接收完,并检测到高电平停止位后,只有满足①(R1)=0;②(SM2)=0或接收到的第9位数据为1时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。
所以在方式1接收时,应先用软件清零RI和SM2标志。
1.方式2
方式2为固定波特率的11位UART方式。
它比方式1增加了一位可程控为1或0的第9位数据。
输出:
发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。
它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。
当CPU执行一条数据写入SUBF的指令且TI=0时,就启动发送器发送。
发送一帧信息后,置位中断标志TI。
输入:
在(REN)=1时,串行口采样RXD引脚,当采样到1至O的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。
在接收到附加的第9位数据后,当满足①(RI):
0;②(SM2)=0或接收到的第9位数据为1时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志Ri;否则信息丢失。
且不置位RI。
2.工作方式3
方式3为波特率可变的11位UART方式。
除波特率外,其余与方式2相同。
波特率的选择
如前所述,在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。
在MCS-51串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。
1> 方式1
方式1的波特率固定为主振频率 的1/12。
2> 方式2
方式2的波特率由PCON中的选择位SMOD来决定,可表示为:
波特率=2sMoD×fosc/64也就是当SMOD=1时,波特率为1/32×fosc,当SMOD=0时,波特率为1/64×fosc。
3> 方式1和方式3
定时器T1作为波特率发生器,其公式如下:
波特率=2SMOD/32×定时器T1溢出率
T1溢出率=T1计数率/产生溢出所需的周期数
式中T1计数率取决于它工作在定时器状态还是计数器状态。
当工作于定时器状态时,T1计数率为Fosc/2:
当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于Fosc/24。
产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
定时器T1工作于方式O:
溢出所需周期数=8192-X
定时器T1工作于方式1:
溢出所需周期数=65536-X
定时器T1工作于方式2:
溢出所需周期数=256-X
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
这种方式下,T1的溢出率[次/秒]计算式可以表示为:
T1溢出率=Fsoc/12[256-X]
1.3 波特率选择
波特率(BoudRate)就是在串口通信中每秒能够发送的位数(bits/second)。
MCS-51串行端口在四种工作模式下有不同的波特率计算方法。
其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。
在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。
在此模式下波特率计算公式为:
波特率=(1+SMOD)*晶振频率/(384*(256-TH1))
其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;
TH1——定时器的重载值。
在选择波特率的时候需要考虑两点:
首先,系统需要的通信速率。
这要根据系统的运作特点,确定通信的频率范围。
然后考虑通信时钟误差。
使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。
为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。
下面举例说明波特率选择过程:
假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。
则
TH1=256-62500/波特率
根据波特率取值表,我们知道可以选取的波特率有:
1200,2400,4800,9600,19200。
列计数器重载值,通信误差如下表:
表1-2 通信误差表
因此,在通信中,最好选用波特率为1200,2400,4800中的一个。
1.4通信协议的使用
通信协议是通信设备在通信前的约定。
单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。
假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定:
0xA1:
单片机读取P0端口数据,并将读取数据返回PC机;
0xA2:
单片机从PC机接收一段控制数据;
0xA3:
单片机操作成功信息。
在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。
当单片机接收到0xA1时,读取P0端口数据,并将读取数据返回PC机;当单片机接收到0xA2时,单片机等待从PC机接收一段控制数据;当PC接收到0xA3时,就表明单片机操作已经成功。
1.5 51单片机的结构和作用
51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。
51单片机串行接口的结构如下:
数据缓冲器(SBUF)
接受或发送的数据都要先送到SBUF缓存。
有两个,一个缓存,另一个接受,用同一个直接地址99H,发送时用指令将数据送到SBUF即可启动发送:
接收时用指令将SBUF中接收到的数据取出。
串行控制寄存器(PCON)
SCON用于串行通信法师的选择,首发控制及状态指示。
利用AT89C51芯片、复位电路、时钟电路、LED数码管等,使A机控制B机的两个LED闪烁,B机控制A机的数码管加一显示。
使用DS18B20温度传感器,由B机测量温度后由A机显示. 把P1口的高7位与数码管相连,绿灯表示通行方向。
P2口与LED显示器相连,用来输出显示的数字。
图1-3系统和原理框图
1.6双机通信
两台机器的通信方式可分为单工通信、半双工通信、双工通信,他们的通信原理及通信方式为:
单工通信:
是指消息只能单方向传输的工作方式。
单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息,数据信号仅从一端传送到另一端,即信息流是单方向的。
通信双方采用“按——讲”(PushToTalk,PTT)单工通信属于点到点的通信。
根据收发频率的异同,单工通信可分为同频通信和异频通信。
半双工通信:
这种通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。
也就是说,通信信道的每一段都可以是发送端,也可以是接端。
但同一时刻里,信息只能有一个传输方向。
如日常生活中的例子有步话机通信等。
双工通信:
双工通信是指在同一时刻信息可以进行双向传输,和打电话一样,说的同时也能听,边说边听。
这种发射机和接收机分别在两个不同的频率上能同时进行工作的双工机也称为异频双工机。
双工机的特点是使用方便,但线路设计较复杂,价格也较高。
2系统分析
2.1汇编语言和C语言的特点及选择
本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。
在单片机的应用系统程序设计时,常用的是汇编语言和C语言。
主机硬件,程序可读性和可一直性比较差。
而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算方便,表达花类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。
本着学习和创新的精神,我们采用两种语言分别编写了程序。
2.2并行通信与串行通信的比较
计算机与外界的信息交换称为通信,常用的通信方式有两种:
并行通信和串行通信。
51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信得特点是传输信号的速度快,但所用的信号线不较多,成本高,传输的距离较近。
串行通信的特点是只用两条信号线即可完成通信,成本低,传输的距离较远。
2.3串行通信程序设计的比较
串行通信程序设计主要有微机发送接收程序和单片机发送接收程序。
微机发送接收程序复杂难懂,操作不便。
单片机发送接收程序简单易懂,操作方便。
故而,此系统采用后者。
2.4同步通信与异步通信的区别
“异步通信”是一种很常用的通信方式。
异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。
当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。
发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。
异步通信的好处是通信设备简单、便宜,但传输效率较低。
异步通信也可以是以帧作为发送的单位。
接收端必须随时做好接收帧的准备。
这是,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始。
这也称为帧定界。
帧定界还包含确定帧的结束位置。
这有两种方法。
一种是在帧的尾部设有某种特殊的比特组合来标志帧的结束。
或者在帧首部中设有帧长度的字段。
需要注意的是,在异步发送帧时,并不是说发送端对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,发送端可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的。
在一帧中的所有比特是连续发送的。
发送端不需要在发送一帧之前和接收端进行协调。
每个字符开始发送的时间可以是任意的t00110110起始位结束位t每个帧开始发送的时间可以是任意的以字符为单位发送以帧为单位发送帧开始帧结束
“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。
收发双方不停地发送和接收连续的同步比特流。
但这时还有两种不同的同步方式。
一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。
另一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。
3系统设计
3.1设计要求
在本设计中,要求完成51单片机与串口的线路连接、并用C语言编写程序实现PC机与51单片机通过串口实现异步通信,并能根据设置调整异步传行通信参数。
3.2设计方案
本次设计,对于两片89C51,采用RS-232进行双机通信。
发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS-232点评输出,经过传输线将信号传送到接收端。
接收方也是用MAX232芯片惊醒电平转换后,信号到达接收方串行口的接收端。
接收方接收后,在数码管上显示接收的信息。
软件部分,通过通信协议进行发送接收,主机先送AAH给从机,当从机接收到AAH后,向主机回答BBH,主机收到BBH后就把数码表中的10个数据送给从机,并发送检验和。
从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接受。
从机收到16个正确数据后送到一个数码管显示。
3.3硬件设计
AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
A、B两台51单片机机通过串行接口相连,B机的七段数码管显示其接收到(A机发出)的数字;而A机的七段数码管则显示其接收到(B机发出)的数字。
电路原理图如下所示。
在桌面上双击图标打开ISIS7Professional窗口。
在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。
表3-1元件选择表
51单片机AT89C51二片
晶体CRYSTAL11.0592MHz二只
瓷片电容CAP22pF四只
电解电容CAP-ELEC10uF二只
电阻RES10K二只
双列电阻网络Rx8300R(Ω)二只
七段数码管7SEG-MPX1-CA二只
图3-2AT89C51管脚图
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能 P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0) P3.3/INT1(外部中断1) P3.4T0(记时器0外部输入) P3.5T1(记时器1外部输入) P3.6/WR(外部数据存储器写选通) P3.7/RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
在工具栏中单击虚拟仪器按纽,再在对象选择器中选择虚拟终端——VIRTUALTERMINAL,放置两个虚拟终端。
若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1、U2的31脚,都可以不画,它们都是默认的。
在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。
放置好元件后,布好线。
左键双击各元件,设置相应元件参数,完成电路图的设计。
最后将其保存的文件名为“串1.DSN”。
3.4软件设计
A、B两机进行异步串行通信,当B机接收到A机发出的数据后,一方面通过其数码管显示,另外加上偏移量后发出。
当A机收到B机发出的数据后,一方面通过其数码管显示,另外经延时后再发出下一个数据。
A、B两机的流程图如下所示。
(1)发送端程序流程图
(2)接收方程序流程图
A、B两台51单片机的异步串行接收采用查询方式,它们详细的C51程序如下所示。
//A机程序
#include
unsignedcharcodeddata[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e
};//0,1,2,3,4....E,F的段码
/************************
函数功能:
发送一个字节数据
*************************/
voidSend(unsignedchardat)
{
SBUF=dat;
While(TI==0)
;//等待
TI=0;
}
/***********************
函数功能:
接收一个字节数据
************************/
unsignedcharReceive(void)
{
unsignedchardat;
while(RI==0)
;//等待,直至接收完毕(RI=1)
RI=0;//为了接收下一帧数据,需将RI清0
dat=SBUF;//将接收缓冲器中的数据存于dat
returndat;
}
/**********************
函数功能:
延时约150ms
***********************/
voiddelay(void)
{
unsignedcharm,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/*****************
函数功能:
主函数
******************/
voidmain(void)
{
unsignedchari;
TMOD=0x20;//TMOD=00100000B,定时器T1工作于方式2
SCON=0x50;//SCON=01010000B,串口工作方式1,允许接收
PCON=0x00;
TH1=0xfd;//定时器TH1赋初值,波特率9600
TL1=0xfd;//定时器TL1赋初值
TR1=1;//启动定时器T1
while
(1)
{
for(i=0;i<8;i++)
{
Send(i);//发送数据i
P0=ddata[Receive()];//将接收到的数据送P0口显示
delay();//600ms后发送下一个数据
delay();
delay();
delay();
}
}
}
//B机程序
#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 双机 串行 通信 设计