基于51单片机的双机串行通信
- 格式:doc
- 大小:93.50 KB
- 文档页数:8
单片机双机串行实验报告实验报告:单片机双机串行通信实验一、实验目的本实验旨在通过单片机实现双机间的串行通信,包括数据的发送和接收,并利用这种通信方式完成一定的任务。
二、实验原理1.串行通信:串行通信是将数据一个个位发送或接收的方式。
数据通过一个线路逐位发送或接收,可以减少通信所需的线路数目。
2. UART串口通信:UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的简称,是一种最常用的串口通信方式,通常用于单片机与计算机、单片机与单片机之间的通信。
3.串口模块:串口模块是负责将数据转变为串行传输的硬件模块,包括发送端和接收端。
通过设置波特率、数据位、校验位和停止位等参数,可以实现数据的可靠传输。
4.单片机串口通信:单片机内部集成了UART串口通信接口,只需要通过相应的寄存器配置,可以实现串口通信功能。
5.双机串行通信:双机串行通信是通过串口将两台单片机进行连接,一台单片机作为发送端,负责将数据发送出去;另一台单片机作为接收端,负责接收并处理发送的数据。
三、实验器材与软件1.实验器材:两台单片机、USB转TTL模块、杜邦线若干。
2. 实验软件:Keil C51集成开发环境。
四、实验内容与步骤1.配置发送端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的TXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写发送端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口发送中断。
(4)循环发送指定的数据。
2.配置接收端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的RXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写接收端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口接收中断。
51单片机双机串行通信设计51单片机是一款广泛应用于嵌入式系统中的微控制器,具有高性能和低功耗的特点。
在一些场景中,需要使用51单片机之间进行双机串行通信,以实现数据传输和协同工作。
本文将介绍51单片机双机串行通信的设计,包括硬件连接和软件编程。
一、硬件连接1.串行通信口选择:51单片机具有多个串行通信口,如UART、SPI 和I2C等。
在双机串行通信中,可以选择其中一个串行通信口作为数据传输的接口。
一般来说,UART是最常用的串行通信口之一,因为它的硬件接口简单且易于使用。
2.引脚连接:选定UART口作为串行通信口后,需要将两个单片机之间的TX(发送)和RX(接收)引脚相连。
具体的引脚连接方式取决于所使用的单片机和外设,但一般原则上是将两个单片机的TX和RX引脚交叉连接。
二、软件编程1.串行通信初始化:首先需要通过软件编程来初始化串行通信口。
在51单片机中,可以通过设置相应的寄存器来配置波特率和其他参数。
具体的初始化代码可以使用C语言编写,并根据所使用的开发工具进行相应的配置。
2.发送数据:发送数据时,可以通过写入相应的寄存器来传输数据。
在51单片机中,通过将数据写入UART的发送寄存器,即可将数据发送出去。
发送数据的代码通常包括以下几个步骤:(1)设置发送寄存器;(2)等待数据发送完成;(3)清除数据发送完成标志位。
3.接收数据:接收数据时,需要通过读取相应的寄存器来获取接收到的数据。
在51单片机中,可以通过读取UART的接收寄存器,即可获取到接收到的数据。
接收数据的代码通常包括以下几个步骤:(1)等待数据接收完成;(2)读取接收寄存器中的数据;(3)清除数据接收完成标志位。
4.数据处理:接收到数据后,可以进行相应的数据处理。
根据具体的应用场景,可以对接收到的数据进行解析、计算或其他操作。
数据处理的代码可以根据具体的需求进行编写。
5.中断服务程序:在双机串行通信中,使用中断可以提高通信的效率。
基于51单片机的多机通信系统设计多机通信系统是指通过一台主机与多台从机之间进行数据交互和通信的系统。
在本设计中,我们将使用51单片机实现一个基于串行通信的多机通信系统。
系统硬件设计如下:1.主机:使用一个51单片机作为主机,负责发送数据和接收数据。
2.从机:使用多个51单片机作为从机,每个从机负责接收数据和发送数据给主机。
3.串口:主机和从机之间通过串口进行通信。
我们可以使用RS232标准通信协议。
系统软件设计如下:1.主机设计:a.初始化串口:设置串口参数,如波特率、数据位、停止位等。
b.发送数据:将需要发送的数据存储在发送缓冲区中,通过串口发送给从机。
c.接收数据:接收从机发送的数据,并存储在接收缓冲区中。
2.从机设计:a.初始化串口:设置串口参数,如波特率、数据位、停止位等。
b.接收数据:接收主机发送的数据,并存储在接收缓冲区中。
c.发送数据:将需要发送的数据存储在发送缓冲区中,通过串口发送给主机。
系统工作流程如下:1.主机启动,执行初始化操作,包括初始化串口。
2.从机启动,执行初始化操作,包括初始化串口。
3.主机发送数据给从机:主机将需要发送的数据存储在发送缓冲区中,通过串口发送给从机。
4.从机接收并处理数据:从机接收主机发送的数据,并存储在接收缓冲区中,对接收到的数据进行处理。
5.从机发送数据给主机:从机将需要发送的数据存储在发送缓冲区中,通过串口发送给主机。
6.主机接收并处理数据:主机接收从机发送的数据,并存储在接收缓冲区中,对接收到的数据进行处理。
7.主机和从机循环执行步骤3-6,实现多机之间的数据交互和通信。
多机通信系统的设计考虑到以下几个方面:1.硬件设计:需要合理选择单片机和串口的类型和参数,确保系统的稳定性和可靠性。
2.软件设计:需要设计适应系统需求的通信协议和数据处理提取方法,保证数据的准确性和完整性。
3.通信协议:需要定义主机和从机之间的通信协议,包括数据的格式、传输方式等,以便实现正确的数据交互。
基于单片机的双机串行通信Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】河南机电高等专科学校2015-2016学年第1学期通信实训报告系别:电子通信工程系班级: xxxxxx学号: 13xxxxxxxxx姓名: xxxxxxx2015年12月基于51单片机的双机串行通信摘要:串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。
在通信过程中,使用通信协议进行通信。
关键字:通信双机一、总体设计1设计目的1.通过设计相关模块充分熟悉51单片机的最小系统的组成和原理;2.通过软件仿真熟悉keil和proteus的配合使用;3.通过软件编程熟悉51的C51编程规范;4.通过实际的硬件电路搭设提高实际动手能力。
2.设计要求:两片单片机之间进行串行通信,A机将0x06发送给B机,在B机的数码管上静态显示1,B机将0~f动态循环发送到A机,并在其数码管上显示。
3.设计方案:软件部分,通过通信协议进行发送接收,A机先送0x06(B机数码管显示1)给B机(B机静态显示),当从机接收到后,向B机发送代表0-f 的数码管编码数组。
B收到0x06后就把数码表TAB[16]中的数据送给从机。
二、硬件设计单片机串行通信功能计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。
51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。
串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。
51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。
51单片机双机通信原理(一)51单片机双机通信简介•什么是51单片机双机通信•双机通信的作用和应用场景基本原理•单片机串口通信原理–串口通讯协议–数据帧的构成•串口通信的硬件连接–引脚连接方式–串口信号格式设置单向通信实现•主从模式–主机发送数据–从机接收数据•编程实现–主机端程序设计–从机端程序设计双向通信实现•主从模式–主机发送数据–从机接收数据–主机接收数据–从机发送数据•编程实现–主机端程序设计–从机端程序设计通信协议的设计•自定义通信协议–协议的格式–数据的解析与封装高级功能扩展•多机通信实现•数据加密与解密•异常处理与误码纠错总结•51单片机双机通信的基本原理和实现方式•可能遇到的问题及解决方案•双机通信的进一步应用展望简介51单片机双机通信是指使用51系列单片机实现两台或多台单片机之间的数据传输和通信。
双机通信可以实现在多个单片机之间传递数据、完成控制指令的下发、数据的采集和处理等功能。
在各种电子设备和嵌入式系统中,双机通信被广泛应用,可以实现设备之间的互联和协同工作,提高系统的灵活性和智能化水平。
基本原理单片机串口通信原理串口通信是一种将数据通过串行线路进行传输的通信方式。
在51单片机的串口通信中,常用的是UART(通用异步收发传输器)通信协议。
UART通信采用的是异步传输方式,数据按照固定的数据帧格式进行传输。
串口通信的硬件连接在51单片机的串口通信中,需要将主机和从机的UART引脚连接起来。
常用的连接方式是通过一对直线的串行数据线(TXD和RXD)连接主从机,其中TXD是发送数据的引脚,RXD是接收数据的引脚。
为了确保数据的正确传输,还需要进行串口信号格式的设置,包括波特率、数据位数、停止位数和校验位等。
单向通信实现主从模式在单向通信中,主机负责发送数据,从机负责接收数据。
主机通过串口发送数据帧,从机通过串口接收数据帧,并进行相应的处理。
编程实现在主机端程序设计中,需要配置串口通信的参数,并使用串口发送数据的相关函数来发送数据。
51单片机的2个串口资源分别通信的方法当使用51单片机的2个串口资源进行通信时,比如用一个串口与PLC的串口使用RS485协议通信,一个串口通过蓝牙模块和另一个单片机无线通信时,该如何处理呢?传统的51单片机只有1个串口资源,只能采用分时复用的方法。
STC的15系列增强版51单片机具有多个串口资源,本文将描述如何使用IAP15W4K58S单片机用一个串口资源与PLC的RS485有线通信,另一个串口资源与Arduino单片机通过蓝牙模块无线通信,该通讯连接过程中PLC作为主机,IAP15W4K58S作为中间机,Arduino单片机作为最低层级。
工作过程是按下启动按键,PLC发信息给IAP15W4K58S单片机发高速脉冲控制步进电机驱动的机械臂运动取走货物,当货物取走后,IAP15W4K58S单片机通过蓝牙模块通知Arduino单片机控制的小车将新货物运送过来。
连接结构示意图如下图所示。
本例程使用的单片机型号为:IAP15W4K58S,该单片机有4个采用UART 工作方式的全双工异步串行通信接口(分别为串口1、串口2、串口3和串口4),每个串行口由2个数据缓冲器、1个移位寄存器、1个串行控制寄存器和1个波特率发生器等组成。
本项目使用串行口1和串行口2。
串行口1的两个缓冲器共用寄存器SBUF (99H),串行口2的两个缓冲器共用寄存器S2BUF(9BH)。
10位(1起始位,8位数据位,1停止位)可变波特率(9600)。
串口1对应的硬件部分是TxD和RxD,串行口2对应硬件部分是TxD2和RxD2。
串口1选择引脚P3.0(RxD)和P3.1(TxD),串口2选择引脚P1.0(RxD)和P1.1(TxD)。
串口1既可以选择T1作为波特率发生器,也可以选择T2作为波特率发生器。
本文串口1提供2个选择(T1和T2),串口2只能选择T2作波特率发生器。
但是当串口1和串口2的波特率相同时,可以共用T2作为波特率发器,当T2工作在1T模式时,串行口1的波特率=SYSclk/(65536-[RL_TH2,RL_TL2])/4,SYSclk表示系统时钟频率,[RL_TH2,RL_TL2]表示T2H,T2L的定时初值设置值。
单片机双机串行实验报告实验报告:单片机双机串行通信实验一、实验目的本实验旨在通过单片机实现双机间的串行通信,包括数据的发送和接收,并利用这种通信方式完成一定的任务。
二、实验原理1.串行通信:串行通信是将数据一个个位发送或接收的方式。
数据通过一个线路逐位发送或接收,可以减少通信所需的线路数目。
2. UART串口通信:UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的简称,是一种最常用的串口通信方式,通常用于单片机与计算机、单片机与单片机之间的通信。
3.串口模块:串口模块是负责将数据转变为串行传输的硬件模块,包括发送端和接收端。
通过设置波特率、数据位、校验位和停止位等参数,可以实现数据的可靠传输。
4.单片机串口通信:单片机内部集成了UART串口通信接口,只需要通过相应的寄存器配置,可以实现串口通信功能。
5.双机串行通信:双机串行通信是通过串口将两台单片机进行连接,一台单片机作为发送端,负责将数据发送出去;另一台单片机作为接收端,负责接收并处理发送的数据。
三、实验器材与软件1.实验器材:两台单片机、USB转TTL模块、杜邦线若干。
2. 实验软件:Keil C51集成开发环境。
四、实验内容与步骤1.配置发送端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的TXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写发送端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口发送中断。
(4)循环发送指定的数据。
2.配置接收端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的RXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写接收端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口接收中断。
51单⽚机双机串⾏通信设计******************实践教学*******************XXXXX⼤学计算机与通信学院2013年秋季学期通信系统综合训练课程设计题⽬:51单⽚机双机串⾏通信设计专业班级:通信⼯程x班姓名:xx学号:xx指导教师:xx成绩:摘要双机通信的实质就是解决两单⽚机串⾏通信问题。
针对于89C51单⽚机全双⼯异步串⾏通信⼝,我们采⽤单⽚机直接交叉互连的串⾏通信⽅式。
考虑到本设计应⽤于短距离传输、两单⽚机具有相同的数据格式及电平且为使设计简单,我们最终决定本系统采⽤⽅式⼀单⽚机直接交叉连接的串⾏通信⽅式,上位机发送的数据由串⾏⼝TXD端输出,直接由下位机的串⾏⼝数据接收端RXD接收。
本设计的硬件电路分为数码管显⽰模块、单⽚机⼯作的基本复位电路以及晶振模块。
编程采⽤C语⾔加以实现。
通信的结果使⽤数码管进⾏显⽰,数码管采⽤查表⽅式显⽰,两个单⽚机之间采⽤RS-232进⾏双向通信。
关键字:51单⽚机串⾏通信 RS-232接⼝标准前⾔ (1)1 基本原理 (2)1.1 串⾏通信概述 (2)1.2 串⾏通信的分类 (2)1.3 串⾏通信技术标准 (2)1.4串⾏通信协议 (3)1.5串⾏通信与并⾏通信区别 (4)1.6MCS-51串⾏接⼝的基本特点 (5)1.7波特率选择 (7)1.8通信协议的使⽤ (7)1.951单⽚机的结构和作⽤ (7)1.10双机通信 (8)2 系统分析 (9)2.1汇编语⾔和C语⾔的特点及选择 (9)2.2并⾏通信与串⾏通信的⽐较 (9)2.3串⾏通信程序设计的⽐较 (9)2.4同步通信与异步通信的区别 (9)3 系统设计 (11)3.1设计要求 (11)3.2设计⽅案 (11)3.3硬件设计 (11)3.4软件设计 (14)4 系统调试 (20)总结 (21)参考⽂献 (22)致谢 (26)随着电⼦技术的飞速发展,单⽚机也步如⼀个新的时代,越来越多的功能各异的单⽚机为我们的设计提供了许多新的⽅法与思路。
单片机双机之间的串行通信设计精选文档 TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-专业方向课程设计报告题目:单片机双机之间的串行通信设计单片机双机之间的串行通信设计一.设计要求:两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。
二、方案论证:方案一:以两片51单片机作为通信部件,以4*4矩阵键盘作为数据输入接口,通过16个不同键值输入不同的信息,按照51单片机的方式3进行串口通信,从机采用中断方式接收信息并按照通信协议改变波特率或者用I/O口输出、CD4511译码、数码管显示相关数据,整个系统的软件部分采用C语言编写。
方案二:整个系统的硬件设计与方案一样,但是通信方式采用方式一进行通信,主从机之间的访问采用查询方式,数据输出直接由单片机的译码程序输出译码数据,同时软件编写采用汇编语言。
两种方式从设计上来说各有特色,而且两种方式都应该是可行的。
方案一中按照方式三通信可以输出九位数据而方式一只能输出八位数据,但就本题的要求来说方式一就可以了。
主从机之间的交流采用中断方式是一种高效且保护单片机的选择,但是相比之下本人对查询方式的理解更好一些。
数码管的显示若采用CD4511译码则直接输出数据就可以了,但是这样会增加硬件陈本,而且单片机的资源大部分都还闲置着,所以直接编写一段译码程序是比较好的做法。
另外在软件编写上,采用C语言在后续设计中对硬件的考虑稍少一些,换言之采用汇编可以使自己对整个通信过程及单片机的部分结构有更清晰地认识所以综合考虑采用方案二。
三、理论设计:采用AltiumDesigner绘制的原理图(整图)本系统主要包括五个基本模块:单片机最小系统(包括晶振电路、电源、复位电路及相关设置电路)、4*4矩阵键盘、功能控制电路、数据显示电路、波特率更改指示电路。
本设计的基本思路是通过控制口选择将要实现的功能,然后矩阵键盘输入数据,单片机对数据进行处理(加校验码、设置功能标志位),然后与从机握手,一切就绪之后后就开始发送数据,然后从机对接收数据校验,回发校验结果,主机根据校验结果进行下一步动作,或者重发,或者进入下一数据的发送过程,然后按照此过程不段循环,直到结束。
编号1 单位代码学号分类号密级课程设计基于AT89C51单片机的双机串行通信设计院(系)名称工学院机械系专业名称机械设计制造及其自动化学生姓名指导教师2014年11 月10日前言单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。
串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。
在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。
单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。
同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。
各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。
串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。
在通信过程中,使用通信协议进行通信。
在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。
单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。
同时,IBM-PC 机正好补充单片机人机对话和外围设备薄弱的缺陷。
各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。
河南机电高等专科学校2015-2016学年第1学期通信实训报告系别:电子通信工程系班级:xxxxxx学号:13xxxxxxxxx姓名:xxxxxxx2015年12月基于51单片机的双机串行通信摘要:串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。
在通信过程中,使用通信协议进行通信。
关键字:通信双机一、总体设计1设计目的1.通过设计相关模块充分熟悉51单片机的最小系统的组成和原理;2.通过软件仿真熟悉keil和proteus的配合使用;3.通过软件编程熟悉51的C51编程规范;4.通过实际的硬件电路搭设提高实际动手能力。
2.设计要求:两片单片机之间进行串行通信,A机将0x06发送给B机,在B机的数码管上静态显示1,B机将0~f动态循环发送到A机,并在其数码管上显示。
3.设计方案:软件部分,通过通信协议进行发送接收,A机先送0x06(B机数码管显示1)给B机(B机静态显示),当从机接收到后,向B机发送代表0-f的数码管编码数组。
B收到0x06后就把数码表TAB[16]中的数据送给从机。
二、硬件设计1.51单片机串行通信功能计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。
51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。
串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。
51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。
51单片机串行接口的结构如下:图1.AT89C51(52)(1)数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。
左边1号机,右边2号机,,功能实现1号机程序#include<>#define uint unsigned int#define uchar unsigned charsbit p10=P1^0;uchar a,b,kk;//uchar code d_c[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void delay_ms(uchar y){u char i;w hile(y--)f or(i=0;i<120;i++);}void put(uchar x) //发送函数{SBUF=x; //SBUF:串行口数据缓冲器w hile(TI==0); //等待发送结束T I=0;}void main(){u char j;S CON=0x40; //串行口工作方式1,8位通用异步发送器T MOD=0x20; //定时器1工作方式2 P CON=0x00; //波特率不倍增T H1=0xf4;T L1=0xf4; //波特率2400T R1=1; //定时器1开始计时P2=0xc0;w hile(1){if(p10==0&&j==0){delay_ms(15);while(p10==0);kk=1;P2=0xf9;j=1;}if(p10==0&&j==1){delay_ms(15);while(p10==0);kk=2;P2=0xa4;j=2;}if(p10==0&&j==2){delay_ms(15);while(p10==0);kk=3;P2=0xb0;j=0;}if(kk==1)put('A');if(kk==2)put('B');if(kk==3)put('C');delay_ms(10);}}/***********************************************************************if(p10==0&&j==0){delay_ms(15);while(p10==0);kk=0;P2=~0xf9;j=1;}if(p10==0&&j==1){delay_ms(15);while(p10==0);kk=1;P2=~0xa4;j=2;}if(p10==0&&j==2){delay_ms(15);while(p10==0);kk=2;P2=~0xc0;j=0;}if(kk==0)put('A');if(kk==1)put('B');if(kk==2)put('C');delay_ms(100);***********************************************************i f(p10==0){delay_ms(15);while(p10==0);number=(number+1)%4;switch(oper){case 0:break;case 1:put('A');P2=~0xf9;break;case 2:put('B');P2=~0xa4;break;case 3:put('C');P2=~0xc0;break;}d elay_ms(10);********************************************************************if(p10==0){delay_ms(15);while(p10==0);j=(j+1)%3;}switch(j){case 0:put('A');P2=~0xf9;break;case 1:put('B');P2=~0xa4;break;case 2:put('C');P2=~0xc0;break;}d elay_ms(10);*/2号机程序。
实验三双机通信实验一、实验目的a)UART 串行通信接口技术应用二、实验实现的功能a)甲机向乙机发送按键的键值,同时将乙机发送的键值在数码管上显示并且LED相应的闪烁b)乙机接收甲机发送的键值并在数码管上显示,同时也能向甲机发送键值三、系统硬件设计甲机和乙机的连接一样,将甲机的RXD和乙机的TXD连接,甲机的TXD和乙机的RXD连接,再将两个单片机的GND连接四、系统软件设计甲机发送程序:#include <stc10.h>#define uchar unsigned char#define uint unsigned int#define N 50ucharcodevalue[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0 X5E,0X79,0X71};//0--F的共阴极字段码表uchar codetab[]={0XFD,0X3F,0XFA,0X3F,0XF7,0X1F,0XEF,0X2F,0XDF,0X37,0XBF,0X3B,0X7F,0X3F}; //花型显示uchar ptr=0;sbit P36=P3^6;sbit P37=P3^7;void delay(uint x) //延时函数{uchar i;while(x--){for(i=0;i<120;i++);}}void display(uchar n) //显示函数{P0=0XF7;P1=codevalue[n];delay(N/2);}uchar scan_key()//按键扫描{uchar i,m;P36=0;P37=1;for(i=0;i<2;i++){m=P0;switch(m&0xe0){case 0xc0: ptr=i*3+1;return ptr;break;case 0xa0: ptr=i*3+2;return ptr;break;case 0x60: ptr=i*3+3;return ptr;break;}P36=1;P37=0;}}void shun() //顺时针转{int a,b,i;a=0x01;b=0x04;for(i=0;i<8;i++){P2=~a;a<<=1;delay(5N);}P2=0XFF;for(i=0;i<4;i++){P3&=(~b);b<<=1;delay(5N);}P3=0X3f;}void ni() //逆时针转{int a,b,i;a=0x80;b=0x20;for(i=0;i<4;i++){P3&=(~b);b>>=1;delay(5N);}P3=0X3F;for(i=0;i<8;i++){P2=~a;a>>=1;delay(5N);}P2=0XFF;}void shan() //绿黄红依次点亮{P2=0XB6;P3=0X37;delay(10N);P2=0X6D;P3=0X2F;delay(10N);P2=0XDB;P3=0X1B;delay(10N);P2=0XFF;P3=0X3F;delay(10N);}void hua(){int t;for(t=0;t<7;t++){P2=tab[t*2];P3=tab[t*2+1];delay(20N);}}void sent()//串口发送{SBUF=ptr;while(!TI);TI=0;}void receive() //串口接收并在led上显示{while(!RI);RI=0;switch(SBUF){case 1: display(SBUF);shun();break;case 2: display(SBUF);ni();break;case 3: display(SBUF);shan();break;case 4: display(SBUF);hua();break;case 5: display(SBUF);P2=0x00;P3=0x03;break;case 6: display(SBUF);P2=0xff;P3=0xff;break;}}void main(void){P1M0=0XFF;P1M1=0X00;TMOD=0X20; //T1工作模式2TH1=0XF4; //波特率2400TL1=0XF4;SCON=0XD0; //串口模式3,允许接收PCON=0X00; //波特率不倍增TR1=1;while(1){scan_key();sent();receive();}}乙机接收程序:#include <stc10.h>#define uchar unsigned char#define uint unsigned int#define N 10uchar codevalue[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71};//0--F的共阴极字段码表uchar Num_Buffer[]={0,0,0,0};//缓冲区初始化uchar keyvalue=0,ptr=0;void delay(uint x) //延时函数{uchar i;while(x--){for(i=0;i<120;i++);}}void display(uchar n) //显示函数{Num_Buffer[3]=n/1000;Num_Buffer[2]=n/100%10;Num_Buffer[1]=n/10%10;Num_Buffer[0]=n%10;P0=0XFE;P1=codevalue[Num_Buffer[3]];delay(N/2);P0=0XFD;P1=codevalue[Num_Buffer[2]];delay(N/2);P0=0XFB;P1=codevalue[Num_Buffer[1]];delay(N/2);P0=0XF7;P1=codevalue[Num_Buffer[0]];delay(N/2);}uchar scan_key() //按键扫描函数{uchar a=0x40,i,m;for(i=0;i<2;i++){P3=~a;delay(N);m=P0;switch(m&0xe0){case 0xc0: ptr=i*3+1;return ptr;break;case 0xa0: ptr=i*3+2;return ptr;break;case 0x60: ptr=i*3+3;return ptr;break;}a=a<<1;}}void sent()//串口发送{SBUF=ptr;while(!TI);TI=0;}void receive()//串口接收{while(!RI){display(keyvalue);}RI=0;keyvalue=SBUF;}void main(void){P1M0=0XFF;P1M1=0X00;TMOD=0X20; //T1工作模式2TH1=0XF4; //波特率2400TL1=0XF4;SCON=0XD0; //串口模式3,允许接收PCON=0X00; //波特率不倍增TR1=1;while(1){scan_key(); //获取键值sent();receive();}}五、实验过程中遇到的问题及解决方法问题1:和实验一一样,按键扫描时对P3口赋值会影响LED的显示解决:将按键扫描程序改为uchar scan_key()//按键扫描{uchar i,m;P36=0;P37=1;for(i=0;i<2;i++){m=P0;switch(m&0xe0){case 0xc0: ptr=i*3+1;return ptr;break;case 0xa0: ptr=i*3+2;return ptr;break;case 0x60: ptr=i*3+3;return ptr;break;}P36=1;P37=0;}}问题2:甲机在接收到5后12个LED全亮,然后无论乙机发送什么,甲机都是12个LED 全亮,不会改变状态解决:反复调试检查发现P3口的最低两位为发送与接收端口,在最开始的程序中接收5的程序为case 5: display(SBUF);P2=0x00;P3=0x00;break;,此时P3的最低两位清零,使发送和接收位都无效,所以在以后无论乙机发送什么甲机都无法接收,将其改为case 5:display(SBUF);P2=0x00;P3=0x03;break;后正常问题3:怎样让乙机在开始的时候显示0,解决:开始时写的程序为void receive()//串口接收{while(!RI) ;RI=0;keyvalue=SBUF;display(keyvalue);}这时运行后上电后数码管不显示,分析得出开始时SBUF为空,所以不显示,应当把显示函数放在while后面显示即程序改为void receive()//串口接收{while(!RI){display(keyvalue);}RI=0;keyvalue=SBUF;}指导老师签字:日期:。
课程设计基于AT89C51单片机的双机串行通信设计毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。
据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。
对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。
作者签名:日期:毕业论文(设计)授权使用说明本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。
有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。
学校可以公布论文(设计)的全部或部分内容。
保密的论文(设计)在解密后适用本规定。
作者签名:指导教师签名:日期:日期:注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订3)其它前言单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。
51单片机双机通信原理引言:随着科技的不断发展,人们对通信技术的需求也越来越高。
单片机作为一种小型、低功耗、功能丰富的微处理器,被广泛应用于各个领域。
而双机通信则是单片机应用中的一个重要方面。
本文将以51单片机双机通信原理为主题,探讨其工作原理及应用。
一、概述单片机双机通信是指两个或多个单片机之间通过某种通信方式进行数据传输和交互的过程。
通过双机通信可以实现数据的共享、协作和控制,从而提高系统的可靠性和性能。
二、通信方式1. 串行通信串行通信是指单片机之间通过串行接口进行数据传输的方式。
其中,常用的串行通信协议有RS232、I2C和SPI等。
RS232是一种基于串行通信的标准协议,常用于计算机与外设的数据传输;I2C是一种双线制的串行通信协议,常用于短距离的设备间通信;SPI是一种高速的串行通信协议,常用于单片机与外围设备的通信。
2. 并行通信并行通信是指单片机之间通过并行接口进行数据传输的方式。
在并行通信中,数据同时通过多条线路传输,速度较快。
然而,并行通信所需的引脚较多,布线复杂,限制了其在实际应用中的使用。
三、通信过程单片机之间的通信过程可以分为初始化、数据传输和结束三个步骤。
1. 初始化在进行通信之前,需要对通信接口进行初始化设置。
包括设置通信协议、波特率、数据位数、停止位数等参数。
通过正确的初始化设置,可以保证通信的稳定性和可靠性。
2. 数据传输数据传输是单片机通信的核心过程。
在通信过程中,发送端将要发送的数据通过通信接口发送给接收端,接收端接收到数据后进行处理。
数据传输可以是单向的,也可以是双向的。
在双向通信中,发送端和接收端可以同时发送和接收数据。
3. 结束通信结束后,需要对通信接口进行相应的清理工作,包括关闭通信接口、释放资源等。
通过正确的结束操作,可以保证通信的完整性和稳定性。
四、应用实例单片机双机通信广泛应用于各个领域,如智能家居、工业自动化、车载系统等。
以下是一个智能家居系统的应用实例:智能家居系统中,通过单片机双机通信可以实现各种设备之间的数据共享和控制。
机电高等专科学校2015-2016学年第1学期通信实训报告系别:电子通信工程系班级: xxxxxx学号: 13xxxxxxxxx: xxxxxxx2015年12月基于51单片机的双机串行通信摘要:串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。
在通信过程中,使用通信协议进行通信。
关键字:通信双机一、总体设计1设计目的1.通过设计相关模块充分熟悉51单片机的最小系统的组成和原理;2.通过软件仿真熟悉keil和proteus的配合使用;3.通过软件编程熟悉51的C51编程规;4.通过实际的硬件电路搭设提高实际动手能力。
2.设计要求:两片单片机之间进行串行通信,A机将0x06发送给B机,在B机的数码管上静态显示1,B机将0~f动态循环发送到A机,并在其数码管上显示。
3.设计方案:软件部分,通过通信协议进行发送接收,A机先送0x06(B机数码管显示1)给B机(B机静态显示),当从机接收到后,向B机发送代表0-f的数码管编码数组。
B收到0x06后就把数码表TAB[16]中的数据送给从机。
二、硬件设计1.51单片机串行通信功能计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。
51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。
串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。
51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。
51单片机串行接口的结构如下:图1.AT89C51(52)(1)数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。
有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。
(2)串行控制寄存器(PCON)SM0 SM1 SM2 REN TB8 RB8 TI RI SM0 SM1 工作方式功能波特率0 0 0 8位同步移位寄存器(用于I/O扩展)fORC/120 1 1 10位异步串行通信(UART)可变(T1溢出率*2SMOD/32)1 02 11位异步串行通信(UART)fORC /64或fORC/321 1 3 11位异步串行通信(UART)可变(T1溢出率*2SMOD/32)REN:接收允许控制位。
软件置1允许接收;软件置0禁止接收。
TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。
RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。
TI:发送中断标志。
发送完一帧数据后由硬件自动置位,并申请中断。
必须要软件清零后才能继续发送。
RI:接收中断标志。
接收完一帧数据后由硬件自动置位,并申请中断。
必须要软件清零后才能继续接收。
(3)输入移位寄存器接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。
(4)波特率发生器波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。
波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。
(5)电源控制寄存器PCON其最高位为SMOD。
(6)波特率计算当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。
由于是定时方式,T1计数率= f/12。
产生溢出所需机ORC器周期数=模M-计数初值X。
2.整体电路设计最终设计电路如下图3所示,发送方的数据由串行口TXD段输出,经过传输线将信号传送到接收端。
信号到达接收方串行口的接收端。
接受方接收后,通过P1口在数码管上显示接收的信息。
图3.串行通信电路三、软件设计(1)串行口工作于方式1;用定时器1产生9600bit/s的波特率,工作于方式2。
(2)功能:将本机ROM中数码表TAB[16]中的16个数发送到从机,并保存在从机部ROM中,从机收到这16个数据后送到一个数码管循环显示。
(3)通信协议:主机首先发送连络信号从机接收到之后返回一个连络信号表示从机已准备好接收。
四、联合调试在protues上进行仿真实验。
首先使用KeilC将编写完成的程序编译生成HEX 文件,将HEX文件烧录到两片单片机中,进行仿真实验,结果如下图所示,可以看到,接收端已将接受到的数据完整的显示了出来。
图4.仿真图注:1.仿真的过程中并没有体现出单片机的最小系统的组成元素:时钟电路和复位电路,但是实际的硬件电路中这两部分是必不可少的,此外,在实际测试中,程序是事先烧进单片机里的,所以这里并没有涉及到电平转换的问题(max232芯片和串口的连接)。
2.在数码管的共阴极与地之间接三极管是为了放大数码管的驱动电流,让数码管更加清楚的显示数据。
附:主要器件:两个STC89C52RC 晶振模块:两个11.0592M的晶振四个30pf的电容复位模块:两个开关两个10uf的电容两个10K的电阻两个1K的电阻显示模块:两个单显共阴极数码管两个NPN型三极管五、程序清单1.A机程序#include<reg51.h>#include<absacc.h>sbit key=P3^6;void sendrecieve();void main(){P1=0XFF;TMOD=0x20;//定时器1工作作方式2TH1=0XFD;TL1=0XFD;//波特率为9600PCON=0X00;//波特率不加倍TR1=1;SCON=0X50;//串口工作方式为3,即11为可变波特率,//开启允许串口接收中断,多机通讯位SM2置1(广播),TB8置1(表示发送地址)//开发送及接受中断EA=1;key=1;sendrecieve();}void sendrecieve(){SBUF=0X06;while(TI!=1);//等待数据发送完成,发送完则ti置1,否则为0TI=0;while(1){while(RI!=1);//等待接收数据完成RI=0;P1=SBUF; //显示B发送来的数据}}1.B机程序#include<reg51.h>#include<absacc.h>void sendrecieve();sbit key=P3^6;unsigned char code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x 39,0x5e,0x79,0x71};//共阴极,标准接法(a--h PX.0--PX.7)unsigned int i;delay(unsigned int z){unsigned int x,y;for(x=z;z>0;z--){for(y=6000;y>0;y-- ); //50ms}}void main(){P1=0XFF;TMOD=0x20;//定时器1工作作方式2TH1=0XFD;TL1=0XFD;//波特率为9600PCON=0X00;//波特率不加倍TR1=1;SCON=0X50;//串口工作方式为3,即11为可变波特率,key=1; //开启允许串口接收中断,多机通讯位SM2置1EA=1;delay(20);sendrecieve();}void sendrecieve(){while(RI!=1);P1=SBUF;RI=0;for(i=0;i<16;i++){SBUF=led[i]; //向A发送信息while(TI!=1);//等待数据发送完成,发送完则ti置1,否则为0TI=0;delay(60); //3s}i=0;}六、课设中遇到的问题及解决办法:由于这次的课设容比较简单,所以我们在软件环节没有没遇到什么困难,在软件仿真时也很顺利,但是在最后焊接板子的时候,我们却遇到了问题:数码管的各管脚的排列顺序不是遵循一定的规律的,所以在焊接时要特别注意布局与布线,在这个环节上我们花费了吗大半的时间。
七、心得体会:本次课程设计我的是双机通信实验,在开始的前两天中,主要是通过查找资料,或是在图书馆里查看书籍来学习有关双机通信实验的基本要求和实验所需要的器件,以及各实验器件所实现怎样的功能。
并且也学会了单片机的有关中断设计的思想,由于制作双机通信的课程设计,所以在实验中需要用到两片单片机作为主从机来控制信号的接受与发送。
还学习到了单片机在使用中断的时候,如果有中断申请的话,硬件电路会自动把单片机里接受发送中断的TI和RI置1.这样就表示单片机此时有外部中断的申请,必须开中断来接受发送过来的信号。
大概两天的时间,我们就把初步的软件程序和硬件电路设计好了。
并且在PROTEUS的仿真器件中实现了硬件电路的连接,然后我们把PROTEUS的仿真硬件和51的程序下载到单片机过调节实验硬件和共同修改软件程序最终实现了器件的仿真。
接下来就是焊接电路的工作了,在完成了所有的焊接的时候,把程序下载到单片机中后,发现了数码管显示的和预期设置的有些不同,在经过简单的修改之后,我们成功的完成了我们的实验作品。
在此次课程设计中我学习到了好多新的知识,使受益匪浅。
这次课程设计所用到的知识都是在自己理解的基础之上,采用了一位动态显示的数码管,数码管的工作原理;在硬件连接完成好以后进行检测,当检测所有的焊点都没有问题后,让单片机发送数据。
用了C语言程序,实现了实验的要求。
软件编写时,对于某些指令的功能,功能模块的连接,等都到了小问题,不过我查阅资料得到了解决,与此同时,了解了不少的问题。
在这次设计中,我收获不少东西,也遇到了不少的问题。
首先,在完成单片机课程学习任务后,对容的掌握不够,缺乏灵活运用的能力,对于知识的扩展也存在一定的问题,因此,初面对设计课题,无法系统地进行设计思路的拟定。
通过本次课程设计,不仅使理论知识得到了实践,有效巩固了知识。
同时对于单片机发展历史、强大功能、应用领域以及系列知识得到了大概的系统认识,同时也初步了解了一个完整的系统开发的过程,对于创造思维的培养和开发能力的锻炼,本次设计,为此提供了一个很好的平台。