基于51单片机的双机串行通信课程设计1000110061.doc

上传人:仙人指路1688 文档编号:4144735 上传时间:2023-04-07 格式:DOC 页数:23 大小:503KB
返回 下载 相关 举报
基于51单片机的双机串行通信课程设计1000110061.doc_第1页
第1页 / 共23页
基于51单片机的双机串行通信课程设计1000110061.doc_第2页
第2页 / 共23页
基于51单片机的双机串行通信课程设计1000110061.doc_第3页
第3页 / 共23页
基于51单片机的双机串行通信课程设计1000110061.doc_第4页
第4页 / 共23页
基于51单片机的双机串行通信课程设计1000110061.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《基于51单片机的双机串行通信课程设计1000110061.doc》由会员分享,可在线阅读,更多相关《基于51单片机的双机串行通信课程设计1000110061.doc(23页珍藏版)》请在三一办公上搜索。

1、 基于AT89C51单片机的双机串行通信设计姓名:杨应伟学号:100110061专业:机械设计制造及其制动化 班级:机电二班 前 言单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成

2、为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBMPC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程

3、中,使用通信协议进行通信。在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBMPC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。 串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信

4、,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。目 录前言11基本原理31.1 串行通信31.2 AT89C51的基本特点41.3波特率选择71.4通信协议的使用81.5双机通信82 总体设计102.1 设计目的102.2 设计要求102.3设计方案103 硬件设计113.1 51单片机串行接口的结构113.2 整体电路设计124 软件设计135 联合调试156总结16参考文献17附录181基本原理1.1串行通信计算机与外界的信息交换称为通信。在通信领域内,有两种数据通信方式:并行通信和串行通信。随着计算机

5、网络化和微机分级分布式应用系统的发展,通信的功能越来越重要。通信是指计算机与外界的信息传输,既包括计算机与计算机之间的传输,也包括计算机与外部设备,如终端、打印机和磁盘等设备之间的传输。 串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。 。串行通信1.2 AT89C51单片机的主要工作特性内含4KB的FLASH存储器,擦写次数1000次;内含28字节的RAM;具有32根可编程I/O线;具有2个16位可编程定时器;具有6个中断源、5个中断矢量、2级优先权的中断

6、结构;具有1个全双工的可编程串行通信接口;具有一个数据指针DPTR;两种低功耗工作模式,即空闲模式和掉电模式;具有可编程的3级程序锁定定位;AT89C51的工作电源电压为5(10.2)V且典型值为5V,最高工作频率为24MHz.AT89C51各部分的组成及功能:外部中断TXDRXDP0 P1 P2 P3扩展控制振荡器和时钟电路数据存储器128字节程序存储器14KBCPU两个16位定时器计数器中断控制总线扩展控制器并行可编程I/O口可编程串行口内部总线 1. 2.1中央处理器(1) 运算器 运算器主要用来实现算术、逻辑运算和位操作。其中包括算术和逻辑运算单元ALU、累加器ACC、B寄存器、程序状

7、态字PSW和两个暂存器等。ALU是运算电路的核心,实质上是一个全加器,完成基本的算术和逻辑运算。算术运算包括加、减、乘、除、增量、减量、BCD码运算;逻辑运算包括“与”、“或”、“异或”、左移位、右移位和半字节交换,以及位操作中的位置位、位复位等。暂存器1和暂存器2是ALU的两个输入,用于暂存参与运算的数据。ALU的输出也是两个:一个是累加器,数据经运算后,其结果又通过内部总线返回到累加器;另一个是程序状态字PSW,用于存储运算和操作结果的状态。累加器是CPU使用最频繁的一个寄存器。ACC既是ALU处理数据的来源,又是ALU运算结果的存放单元。单片机与片外RAM或I/O扩展口进行数据交换必须通

8、过ACC来进行。B寄存器在乘法和除法指令中作为ALU的输入之一,另一个输入来自ACC。运算结果存于AB寄存器中。(2) 控制器控制器是识别指令并根据指令性质协调计算机内各组成单元进行工作的部件,主要包括程序计数器PC、PC增量器、指令寄存器、指令译码器、定时及控制逻辑电路等,其功能是控制指令的读入、译码和执行,并对指令执行过程进行定时和逻辑控制。AT89C51单片机中,PC是一个16位的计数器,可对64KB程序存储器进行寻址。复位时PC的内容是0000H.(3)存储器单片机内部的存储器分为程序存储器和数据存储器。AT89C51单片机的程序存储器采用4KB的快速擦写存储器Flash Memory

9、,编程和擦除完全是电器实现。(4)外围接口电路 AT89C51单片机的外围接口电路主要包括:4个可编程并行I/O口,1个可编程串行口,2个16位的可编程定时器以及中断系统等。AT89C51的工作原理:1. 引脚排列及功能AT89C51的封装形式有PDIP,TQFP,PLCC等,现以PDIP为例。 (1)I/O口线 P0口 8位、漏极开路的双向I/O口。当使用片外存储器及外扩I/O口时,P0口作为低字节地址/数据复用线。在编程时,P0口可用于接收指令代码字节;程序校验时,可输出指令字节。P0口也可做通用I/O口使用,但需加上拉电阻。作为普通输入时,应输出锁存器配置1。P0口可驱动8个TTL负载。

10、P1口 8位、准双向I/O口,具有内部上拉电阻。 P1口是为用户准备的I/O双向口。在编程和校验时,可用作输入低8位地址。用作输入时,应先将输出锁存器置1。P1口可驱动4个TTL负载。P2 8位、准双向I/O口,具有内部上拉电阻。 当使用外存储器或外扩I/O口时,P2口输出高8位地址。在编程和校验时,P2口接收高字节地址和某些控制信号。P3 8位、准双向I/O口,具有内部上拉电阻。 P3口可作为普通I/O口。用作输入时,应先将输出锁存器置1。在编程/校验时,P3口接收某些控制信号。它可驱动4个TTL负载。(2)控制信号线 RST 复位输入信号,高电平有效。在振荡器稳定工作时,在RST脚施加两个

11、机器周期以上的高电平,将器件复位。 EA/VPP 外部程序存储器访问允许信号EA.当EA信号接地时,对ROM的读操作限定在外部程序存储器,地址为0000H-FFFFH;当EA接VCC时,对ROM的读操作从内部程序存储器开始,并可延续至外部程序存储器。在编程时,该引脚可接编程电压5V或12V。在编程校验时,该引脚可接VCC。 PSEN 片外程序存储器读选通信号PSEN,低电平有效。在片外程序存储器取指期间,当PSEN有效时,程序存储器的内容被送至P0口;在访问外部RAM时,PSEN 无效。 ALE/PROG 低字节锁存信号ALE.在系统扩展时,ALE的下降沿将P0口输出的低8位地址锁存在外接的地

12、址锁存器中,以实现低字节地址和数据的分时传送。此外,ALE端连续输出正脉冲,频率为晶振频率的1/6,可做外部定时脉冲使用。 (3)外部晶振引线 XTAL1 片内振荡器反向放大器和时钟发生线路的输入端。使用片内振荡器时,连接外部石英晶体和微调电容。XTAL2 片内振荡器反相放大器的输出端。当使用片内振荡器时,外接石英晶体和微调电容。1.2.2存储器组织和特殊功能寄存器AT89C51的存储器将程序存储器和数据存储器分开,并有各自的存储空间和访问指令。它有4个存储空间:片内存储器、片外存储器、片内数据存储器及片外存储器。振荡器1.2.3时钟电路和工作时序(1) 振荡器电路原理RfXTAL1PD&63

13、 Q2 Q (2)振荡电路的接法外部振荡器信号NCXTAL2XTAL1GNDC1C2XTAL2XTAL1CND1.3波特率选择波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。MCS-51串行端口在四种工作模式下有不同的波特率计算方法。其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。在此模式下波特率计算公式为:波特率=(1+SMOD)*晶振频率/(384*(25

14、6-TH1)其中,SMOD寄存器PCON的第7位,称为波特率倍增位;TH1定时器的重载值。在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。这要根据系统的运作特点,确定通信的频率范围。然后考虑通信时钟误差。使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。则TH1=256-62500/波特率。根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19

15、200。列计数器重载值,通信误差如下表:表1-2通信误差表因此,在通信中,最好选用波特率为1200,2400,4800中的一个。1.4 通信协议的使用 通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定: 0xA1:单片机读取P0端口数据,并将读取数据返回PC机; 0xA2:单片机从PC机接收一段控制数据; 0xA3:单片机操作成功信息。 在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。当单片机接收到0xA1时,读取P0端口数据,并

16、将读取数据返回PC机;当单片机接收到0xA2时,单片机等待从PC机接收一段控制数据;当PC接收到0xA3时,就表明单片机操作已经成功。1.5 双机通信两台机器的通信方式可分为单工通信、半双工通信、双工通信,他们的通信原理及通信方式为:单工通信:是指消息只能单方向传输的工作方式。单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息,数据信号仅从一端传送到另一端,即信息流是单方向的。通信双方采用“按讲”(Push To Talk,PTT)单工通信属于点到点的通信。根据收发频率的异同,单工通信可分为同频通信和异频通信。半双工通信:这

17、种通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。也就是说,通信信道的每一段都可以是发送端,也可以是接端。但同一时刻里,信息只能有一个传输方向。如日常生活中的例子有步话机通信等。双工通信:双工通信是指在同一时刻信息可以进行双向传输,和打电话一样,说的同时也能听,边说边听。这种发射机和接收机分别在两个不同的频率上能同时进行工作的双工机也称为异频双工机。双工机的特点是使用方便,但线路设计较复杂,价格也较高。2 总体设计2.1设计目的1.通过设计相关模块充分熟悉51单片机的最小系统的组成和原理;2.通过软件仿真熟悉keil和proteus的配合使用;3.通过软件编程熟悉5

18、1的C51编程规范;2.2设计要求两片单片机之间进行串行通信,A机将数据发送给B机,在B机的数码管上静态显示。2.3设计方案 软件通过通信协议进行发送接收,主机接10,21,32,43,54,65,76,87,98,09后给从机(从机静态显示),当从机接收到后,向从机发送代表0-f的数码管编码数组,相应显示10,21,32,43,54,65,76,87,98,09。3 硬件设计3.1 51单片机串行接口的结构(1)数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中

19、接收到的数据取出。(2)串行控制寄存器(PCON)SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:SM0SM1SM2RENTB8RB8TIRISM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。串行接口工作方式特点见下表SM0SM1工作方式功能波特率 0008位同步移位寄存器(用于I/O扩展)fORC/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)SM2:多机

20、通信控制位。REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。(3)输入移位寄存器接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。(4)波特率发生器

21、波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。(5)电源控制寄存器PCON其最高位为SMOD。3.2整体电路设计51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用,本系统共用两块单片机,每块单片机均选用AT89S51,最小系统也都一样。由于两块单片机的主要任务是通信,为了得到准确的波特率,采用振荡频率为11.0592MHz的晶振,最终设计电路如下图3所示,发送方的数据由串行口TXD段输出,经过

22、传输线将信号传送到接收端。信号到达接收方串行口的接收端。接受方接收后,通过P1口在数码管上显示接收的信息。 4软件设计通过通信协议进行发送接收,主机先送CDH给从机,当从机接收到CDH后,向主机回答DCH。主机收到DCH后就把数码表TAB16中的10个数据送给从机,并发送检验和。从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接受。从机收到16个正确数据后送到一个数码管显示。4.1串行通信软件实现(1)串行口工作于方式3;用定时器1产生4800bit/s的波特率,晶振频率为 11.0592MHZ。(2)功能:将

23、本机ROM中数码表TAB16中的16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。(3)通信协议:主机首先发送连络信号(CDH),从机接收到之后返回一个连络信号(DCH)表示从机已准备好接收。(4)通信过程使用第九位发送奇偶校验位。(5)从机接收到一个数据后,立即进行奇偶校验,若数据没有错误,则返回00H,否则返回FFH。(6)主机发送一个数据后,等待从机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。(1)程序流程图 (2) 接收方程序流程图主程序开始检验和相等?程序初始化接收数据,计算检验和N发送00H至主机接收完成?N清除

24、标志位发送FFH,重新接收显示5 联合调试 在protues上进行仿真实验。首先使用KeilC将编写完成的程序编译生成HEX文件,将HEX文件烧录到两片单片机中,进行仿真实验,结果如下图所示,可以看到,接收端已将接受到的数据完整的显示了出来。注:1.仿真的过程中并没有体现出单片机的最小系统的组成元素:时钟电路和复位电路,但是实际的硬件电路中这两部分是必不可少的,此外,在实际测试中,程序是事先烧进单片机里的.2. 在数码管的共阴极与地之间接三极管是为了放大数码管的驱动电流,让数码管更加清楚的显示数据。6课设中的心得体会经过繁忙而又紧张的课程设计,终于顺利的完成了设计任务。虽然在这段时间里每天都那

25、么繁忙,但是在这忙碌的过程中却得到了许多的收获。经过课程设计,在查阅资料的过程中,学习了基于单片机的C语言程序设计,了解了单片机串行通信的基本知识,对于以后的学习和工作都有很大的益处。在学习的过程中,也遇到了一些困难,比如开始的时候,由于发送端和接收端的通信协议没有做好,导致数据不能正确的传输,在解决问题的过程中,对于通信协议的实现有了深刻的认识。从最初拿到题目,分析设计要求以及实现的初步思路,然后去查阅资料进行更加具体的设计这次实验无疑要求我们团队协作,互相配合并且整体上比较全面的统筹设计。于是,初步规划后,我们开始将系统要实现功能的各个模块单独开来用PROTEUS仿真,并最终将各个模块组合

26、后整体调试。整个过程中我们在仿真上花费了较长时间,因为知道仿真成功是实现真正硬件电路的基础,仿真是从根本上检验设计者的设计逻辑以及思路的,很好的仿真才能使得设计系统在实现要求功能的基础上更加稳定、简单,仿真中,我们仔细斟酌了电路布线的合理性。在焊接过程中,由于之前的统筹布局使得我们的电路布线简洁、明了,需要注意的是,由于焊接的粗心,有些焊点需要一再解焊导致焊盘脱落,而且对于数码管管脚焊接方式也是值得进一步改进的,这便是我今后所要更加注意的,争取全心全意的焊接电路,不要因为某些粗心的原因是电路焊接发生错误,在那个下午坚持不懈的努力下我们终于完成了任务,可以说是大部分的任务都是在那个下午一气呵成的

27、。总的来说,在实验中,我们尽量统筹并使得团队协作发挥更大作用,第一周的周三分发元器件后,在第二天我们组便基本上完成了设计要求的基本功能,于是,我们利用剩下的时间去调试硬件以及更加深入的总结题目的意义。最后,作为本次实验小组的组长,我对大家辛勤劳作默契配合的合作精神深感欣慰,希望以后得到好的继承与发扬!参考文献【1】 胡伟.单片机C程序设计及应用实例.北京:人民邮电出版社,2003【2】 韩毅刚.计算机通信技术.北京:北京航空航天大学出版社,2007【3】 李朝青.单片机与PC机网络通信技术.北京:北京航空航天大学出版,2007【4】 胡洪波.单片机原理与应用实验教程.湘潭大学出版社,2009.

28、7【5】单片机课程设计指导书 皮大能 北京理工大学出2012.7【6】8051单片机实践与应用 吴金戎 清华大学出版社2003.8【7】单片机技术基础教程与实践 夏路易 电子工业出版2008.1【8】单片机原理及应用 张毅刚 高等教育出版社 2012.11附录程序清单#include /字形码*按列取模char code table=0x5E,0x22,0x52,0xAC,0x7E,0xA1,0x52,0xBF,0x7E,0xA8,0xD2,0xA5,0x5E,0x22,0x00,0x04,0x7F,0xF8,0x46,0x60,0x41,0x80,0x46,0x60,0xFF,0xFC,0x

29、40,0x02,0x00,0x0E,0x00,0x00,0x08,0x20,0x30,0x20,0x20,0x40,0x0AA,0x40,0xAA,0x90,0xAA,0x90,0xA1,0x54,0xFE,0x32,0xA1,0x15,0xAA,0x98,0xAA,0x90,0xAA,0x40,0x20,0x40,0x28,0x20,0x30,0x20,0x00,0x00,0x02,0x00,0x06,0x00,0x7A,0xFC,0x12,0x80,0x12,0x80,0xFF,0xFF,0x12,0x88,0x32,0x84,0x16,0xF8,0x02,0x00,0x1F,0xE0,0

30、x00,0x02,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x1F,0xFF,0xE1,0x00,0x02,0x00,0x0C,0x00,0xF0,0x00,0x1F,0xFF,0x11,0x10,0x11,0x10,0x13,0x10,0x11,0x30,0x30,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x7F,0xCC,0x7F,0xCC,0

31、x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/显示空屏,如果只有一个字或将字全部移出必须设置一个空屏幕0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;void delay(int c)int i,j;for(i=0;ic;i+)for

32、(j=0;j5)/移动间隔时间;取值0-255a=0;b+=2;if(b=160)/显示到最后一个字,回头显示,判断值=字数*32b=0;for(i=0;i16;i+)P1=i;for(k=0;k5;k+)P0=tablej+b;P2=tablej+b+1;delay(2);P0=0x00;P2=0x00;j+=2; a+;#include /初始化串行口void csh()SM0=0;SM1=1;REN=1;TI=0;RI=0;PCON=0;TH1=0xF3;TL1=0XF3;TMOD=0X20;EA=1;ET1=0;ES=1;TR1=1;void main()int i,j;char c=0;csh();while(1)ES=0;TI=0;P0=c;SBUF=c;while(!TI);TI=0;ES=1;for(j=0;j50;j+)for(i=0;i9)c=0;void intrr() interrupt 4char temp;temp=SBUF;P2=temp;RI=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号