单片机实验报告多机通讯
单片机多机通信实现
单片机多机通信实现随着科技的进步和应用的需求,单片机成为了嵌入式系统中不可或缺的一部分。
在很多应用场景中,我们需要将多个单片机之间进行通信,以实现数据的传输和协同工作。
本文将介绍单片机多机通信的实现方法。
一、串口通信串口通信是最常见和简单的单片机通信方式之一。
单片机通过串口将数据以字节的形式传输给另一个单片机。
常见的串口通信协议有RS232、RS485和UART等。
其中,RS232是单片机与计算机之间的标准通信协议,而RS485适用于单片机与多个设备之间的通信。
串口通信需要注意以下几个方面:1. 波特率的设置:通信双方需要设定相同的波特率,以确保数据的准确传输。
2. 数据格式的规定:包括数据位、校验位和停止位等,通讯双方需要设置相同的数据格式。
3. 通信控制的实现:通过编程控制单片机的串口发送和接收功能,实现数据的传输。
二、I2C通信I2C(Inter-Integrated Circuit)是一种串行总线协议,它可实现多个单片机的通信和协同工作。
I2C通信需要引入一个主设备和多个从设备的概念,主设备控制通信的起止和数据的传输,从设备用于接收和发送数据。
I2C通信需要注意以下几个方面:1. I2C地址的分配:每个从设备通过唯一的地址与主设备进行通信,地址的分配需要事先规划好。
2. 数据的读写操作:通过发送特定的控制信号,主设备可以向从设备发送读或写的命令,并接收从设备返回的数据。
3. 时序的控制:I2C通信依赖于时钟信号和数据信号的同步,通信双方需要根据协议规定好时序的控制。
三、SPI通信SPI(Serial Peripheral Interface)通信是一种全双工、同步的通信协议。
它通过4根线进行通信,包括时钟、数据输入、数据输出和片选信号。
SPI通信适用于多个主设备与多个从设备之间的通信,可以实现数据的传输和设备的控制。
SPI通信需要注意以下几个方面:1. 主从设备的选定:SPI通信中,每次只有一个主设备能够与从设备进行通信,其他设备通过片选信号进行选择。
双机通讯实验报告
.单片机实验报告(自动化15级)实验名称:串行通讯实验一、实验目的1.掌握单片机串行口工作方式;2.掌握双机通讯的接口电路设计及程序设计。
二、实验设备1. PC机;2.单片机最小系统教学实验模块;3. 数码管显示模块三、实验内容1.双机通信由两套单片机试验装置(两个实验小组)共同完成该实验。
我们U1为甲机,U2为乙机。
甲机发送本机(学生本人)学号后8位给乙机,乙机接收该8位数据,并显示在8位数码管上。
电路如图1所示。
要求串行通信方式为方式1,波特率为2400bit/s,不加倍,单片机外部晶振频率为11.0592M。
图1 双机通信原理示意图附加要求:乙机接收完毕后,将本机(乙机)的学号后8位发送回甲机,甲机显示在数码管上。
2.单片机与PC机通信单片机向PC机发送数据。
单片机向PC机重复发送本机(学生本人)学号,发送波特率为1200,采用方式1,单片机外部晶振频率为11.0592M。
四、实验原理4.1 串行通讯的方式在串行通讯中,有两种基本的通讯方式:异步通讯,同步通讯。
异步串行通讯规定了字符数据的传送格式,既每个数据以相同的帧格式发送。
每个帧信息由起始位、数据位、奇偶校验位和停止位组成。
本实验主要学习异步通讯的实现方法。
在异步通讯中,每一个字符要用起始位和停止位作为字符开始和结束的标志,以至占用了时间。
所以在数据块传送时,为了提高通讯速度,常去掉这些标志,而采用同步通讯。
同步通讯不像异步通讯那样,靠起始位在每个字符数据开始时发送和接受同步。
而是通过同步字符在每个数据块传送开始时使收/发双方同步。
按照通讯方式,又可将数据传输线路分成三种:单工方式、半双工方式、全双工方式。
(1)单工方式在单工方式下,通讯线的一端联接发送器,另一端联接接收器,它们形成单向联接,只允许数据按照一个固定的方向传送。
(2)半双工方式在半双工方式下,系统中的每个通讯设备都由一个发送器和一个接收器组成,通过收发开关接到通讯线路上,如图33-1所示。
单片机用proteus仿真双机串口通信总结体会
单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。
《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。
Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。
本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。
电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。
2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。
主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。
串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。
3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。
首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。
然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。
总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。
单片机双机通信实验报告
计算机与信息工程学院综合性实验报告专业:物联网年级/班级: 2015—2016学年第一学期课程名称单片机原理及应用指导教师学号姓名实验地点实验时间2015.11.14项目名称单片机双机通信实验类型综合性一、实验目的1.学习双机通信的基本使用方法。
2.学习双机通信程序的编程方法。
二、实验仪器或设备CPU挂箱、AT89S51CPU模块三、总体设计(设计原理、设计方案及流程等)1.设计原理:串行口工作方式1为波特率可变的8位UART方式。
主要用于单片机系统之间或单片机与PC之间的数据通信。
方式1通信时,一帧数据由10位组成:1个起始位、8个数据位和1个停止位。
这种方式常通过发送数据块的累加和实现数据校验。
2.设计方案:设有甲、乙两个AT89S51单片机应用系统,现需要将甲单片机外RAM 4000H~43FFH 单元的内容传送到乙单片机,并将数据存放到乙单片机从8000H开始的单元,电路图如下图所示。
如传送正确,图中发光二极管灭,否则发光二极管亮。
3.流程:使用查询方式进行通信,通信过程分为两步:第一步为握手,第二步为传输数据。
如果甲单片机收到乙单片机的应答为“A”,则重复上述发送过程,直到数据发送完成,并且置p1.3为1;否则,置P1.2为1,图中发光二极管亮,并退出。
四、实验步骤(包括主要步骤、代码分析等)五、结果分析与总结结果图:①结果分析程序作用为甲乙两台机器进行连接通讯,如果通讯成功则亮灯提示(Led1),在通讯成功以后开始发送数据,如果发送成功则乙机器会发送一个确认信息,在比对确认乙收到的是正确信息以后亮灯提示(Led3)。
②总结本次实验为双机通信实验,在本次实验中,我们使用给定的代码进行操作,但是在实验中却发现很多问题。
比如在设备连接好以后发现无法传输数据,我们发现错误发生在给定的代码上,两台计算机所使用的频率不同,导致无法传输数据。
在程序没有编写错误的时候,我们不会去找程序的错误,而是反复的查看和检测连接方面的问题,这反映了我们对错误应变能力太差,一味的去相信书中的程序,有时候正确的程序在不合适的设备上使用就会出现错误。
单片机双机通信课程设计报告
目录1.题目设计要求 (4)2.系统的组成及工作原理 (4)2.1系统组成 (4)2.1工作原理 (4)2.3双机通讯的方案选择 (5)3.器件的功能及作用 (6)3.1硬件设计 (6)3.2电气设置 (8)3.3DB-9连接器 (8)4.系统硬件设计 (10)5.软件设计 (11)6.系统仿真调试 (18)7.设计体会和收获 (18)8.參考资料 (19)1.题目设计要求:甲乙两机串口双向通信设计要求:利用51单片机,RS232芯片,LED灯,数码管进行双机通信设计。
甲机可按键控制乙机的LED显示;乙机可按键控制甲机的数码管显示。
完成以下设计环节:1)使用Altium Desinger开发工具,设计电路原理图。
2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。
3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。
2.系统的组成及工作原理2.1系统组成图2.1 总体框图2.2工作原理双机通信系统通过甲乙单片机的串行口来实现数据的收发。
甲单片机通过开关电路来启动发送程序,甲机当开关按下时向乙机发送一个数据,乙机上蜂咛器发出声音提示有数据发送过来,乙机通过接收中断来接收和开关判断是否接收甲机发送过来的数据,并通过编写好的数据代码在8个发光二极管上显示主机发送过来的数据。
乙单片机通过开关电路来启动发送程序,乙机给甲机发送一数据,甲机上蜂咛器发出声音提示有数据发送过来,甲机通过接收中断来接收和开关判断是否接收乙机发送过来的数据,并通过编写好的数据代码在8个发光二极管上显示乙机发送过来的数据。
2.3 双机通讯的方案选择设计方案:该系统采用主从共两片AT89C52单片机来实现上位机对下位机的控制,由于是近距离的双机通信,我们采用单片机直接交叉连接的方式,上位机发送的数据由串行口TXD端输出,直接由下位机的串行口数据接收端RXD接收。
需要注意的是一定要保证主从机相同的数据传输速率,即要求设置相同的波特率。
双机通信实验报告.doc
双机通信实验报告。
单片机实验报告(自动化15级)实验名称:串行通信实验1.实验1的目的。
掌握单片机串口的工作模式;2.掌握双机通信的接口电路设计和程序设计。
2.实验设备1。
个人电脑;2.单片机最小系统教学实验模块:3.数码管显示模块三、实验内容1。
两套单片机测试装置(两个实验组)共同完成了实验。
我们U1是机器A,U2是机器B。
机器A将学生的学号后的8位数字发送到机器B。
机器B接收到这8位数字,并将其显示在8位数字的电子管上。
该电路如图1所示。
串行通信模式要求为模式1,波特率为2400位/秒,不是双倍,单片机外部晶振频率为11.0592米。
图1双机通信原理附加要求示意图:机器b收到后,该机器(机器b)的学生编号的最后8位数字被送回机器a,并显示在数码管上。
2.单片机与PC机之间的通信单片机向PC机发送数据。
单片机将本机的学生号(学生本人)反复发送到PC机,发送波特率为1200,采用模式1,单片机外部晶振频率为11.0592米四、实验原理4.1串行通信模式在串行通信中,有两种基本通信模式:异步通信。
异步串行通信规定了字符数据的传输格式,即每个数据以相同的帧格式传输。
每个帧信息由起始位、数据位、奇偶校验位和停止位组成。
本实验主要研究异步通信的实现方法。
在异步通信中,每个字符使用一个起始位和一个停止位作为字符开始和结束的符号,因此占用时间。
因此,为了提高传输数据块时的通信速度,这些标记通常被去除,并采用同步通信。
同步通信不像异步通信那样依赖起始位在每个字符数据的开头发送和接收同步。
相反,同步字符用于在每个数据块传输开始时同步发送方和接收方。
根据通信方式,数据传输线可分为三种类型:单工模式、半双工模式、全双工模式。
(1)单工模式在单工模式中,通信线路的一端连接到发射机,另一端连接到接收机,这形成单向连接,并且仅允许数据在固定方向上传输。
(2)半双工模式在半双工模式下,系统中的每个通信设备由一个发射机和一个接收机组成,它们通过收发器开关连接到通信线路,如图33所示-1.实验1的目的。
单片机多机通信实现 毕业论文.
单片机多机通信实现1、设计要求三片单片机利用串行口进行串行通信:串行通信的波特率为9600bit/s。
串行口工作方式为方式1的单工串行通信。
2、设计方案一个主机和两个从机,主机通过按键选择要通信的从机,按键确认后通过矩阵键盘输入要传输的信息,从机接收主机发送的信息并发回长度校验码给主机,主机确认校验信息是否正确,若正确,主机液晶显示“send:信息”和从机数,从机液晶显示所接收的信息;若错误则主机从发信息,重复前面的步骤。
3、硬件电路设计3.1 单片机最小系统的设计本系统共用三块单片机,每块单片机均选用AT89S52,最小系统也都一样。
由于三块单片机的主要任务是通信,为了得到准确的波特率,采用振荡频率为11.0592MHz的晶振,再接两个30pF的瓷片电容即可构成单片机的时钟电路。
单片机最小系统电路如下:图3-1 单片机最小系统电路复位电路也可以换成看门狗电路实现,可使单片机可靠的复位。
为了简化电路设计,本系统采用简单方法,可使单片机上电复位,此外可以通过按键手动复位。
单片机上电即可复位,R1与C3的充电时间大于两倍的机器周期,使RST引脚有足够长的时间保存高电平,使单片机可靠的复位。
正常工作时,按下按键SW1就可以使单片机复位。
3.2 矩阵键盘电路设计图3-2 矩阵键盘电路P1口接4×4的矩阵键盘,共16个按键,分别为0~C及“开始通信”,“选择从机”和“输入信息”键。
P1.0~P1.3接矩阵键盘的行,P1.4~P1.7接矩阵键盘的列。
3.3 液晶显示电路设计液晶显示电路如下图:图3-3 液晶LCD1602显示电路P0口上拉10K×8的排阻,自己画的排阻符号如下:图3-4 排阻符号排阻具有九个引脚,一个公共端,另外八个脚分别接到需要接上拉电阻的单片机的P0口。
排阻相当于8个大小均为10K的电阻,在电路中主要其电平转化作用,通过的电流很小,每只电阻的功耗也很小。
如接5V电源,每只电阻的电流约为0.5mA,很小,但是由于P0口是接液晶,不用接排阻也能实现,本着节约的原则在本设计中没有接排阻。
单片机双机通信实验报告
单片机双机通信实验报告
实验目的:
1. 了解单片机之间的串口通信原理;
2. 掌握单片机之间的双机通信方法;
3. 实现单片机之间的数据互相传输。
实验器材:
1. 单片机开发板(两块);
2. USB转串口模块(两个);
3. 杜邦线若干;
4. 电脑。
实验步骤:
首先,将单片机开发板和USB转串口模块进行连接,具体的连接方法如下:
1. 将USB转串口模块的TXD引脚连接到单片机开发板的RXD引脚上;
2. 将USB转串口模块的RXD引脚连接到单片机开发板的TXD引脚上;
3. 将USB转串口模块的GND引脚连接到单片机开发板的GND引脚上;
4. 将USB转串口模块的VCC引脚连接到单片机开发板的VCC引脚上。
接下来的步骤如下:
1. 打开两台电脑上的串口调试助手软件,并分别将波特率设置为相同的数值(例如9600);
2. 在一台电脑上,发送数据给另一台电脑。
具体的操作是在串口调试助手软件上输入要发送的数据,然后点击发送按钮;
3. 在另一台电脑上,接收来自第一台电脑发送的数据。
具体的操作是在串口调试助手软件上点击接收按钮,然后可以看到接收到的数据。
实验结果:
通过实验可以看到,单片机之间成功地实现了数据的双向传输。
一台单片机发送的数据可以被另一台单片机接收到。
实验总结:
本实验通过串口通信的方式实现了单片机之间的双机通信。
通过这种方式,可以方便地实现单片机之间的数据互相传输,可以用于各种应用场景,如传感器与控制器之间的数据传输等。
同时要注意,串口通信的波特率要设置一致,否则数据将无法正确接收。
基于单片机的双机通信实训报告
一.设计方案根据题目分析可知硬件电分为主机模块和从机模块。
主机模块中包含单片机子模块、lcd1602显示子模块和矩阵键盘模块,从机模块则包括单片机子模块、LED显示模块。
在主模块中由AT89C51单片机担任主机,LCD1602担任显示设备和由4位独立按键做矩阵键盘。
在整个系统中有一个从机模块,有一片AT89C51单片机担任从机模块的控制模块,串口采用单工及异步通信方式。
整个硬件结构原下图所示。
主机从机二.硬件分析(1)控制模块控制模块采用AT89C51作为主控芯片,11.0592MHZ的晶振频率作为时钟震荡电路。
基本电路图如下所示。
仿真图由于在protues里面,单片机内部默认自带晶振,所以不需要再连接振荡电路。
控制模块原理图(2)显示模块采用LCD1602作为显示模块,LCD1602用来显示当前从机LED的状态。
仿真图如下所示:仿真图在画原理图时,由于没有LCD1602的封装。
所以,本人直接用16跟引脚的排针代替。
然后在给相应的引脚表上网络位口。
但是再画PCB,必须控制好原件之间的距离,以免导致制版时,元件位置冲突。
原理图如下所示:原理图(3)矩阵键盘模块矩阵键盘用来给单片机输入一个电平值,然后再通过主机CPU发送给从机,最后从机CPU接收,并通过LED显示出结果。
当按键按下,相当于给主机CPU 送入一个低电平,主机再把这个电平值发送给从机。
因为LED是采用共阳连接的方式,所以可以点亮LED。
矩阵键盘仿真图,以及原理图如下所示:仿真图原理图(4)LED显示模块LED显示模块,主要用来显示主机送给从机的电平值是高电平还是低电平,同时也可以用来检测,整个通信系统是否能够正常工作。
为了整个电路简化,以及效果更明显,所以决定采用共阳连接的方式。
LED显示模块的仿真图,以及原理图如下所示:仿真图原理图三.软件分析根据题目分析可知硬件电分为主机模块和从机模块。
AT89C51单片机担任主机模块和从机模块的控制模块,串口采用单工及异步通信方式。
单片机双机串行实验报告
单片机双机串行实验报告实验目的:通过单片机实现双机串行通信功能,掌握串行通信的原理、方法和程序设计技巧。
实验原理:双机串行通信是指通过串行口将两台单片机连接起来,实现数据的传输和互动。
常用的串行通信方式有同步串行通信和异步串行通信。
异步串行通信是指通过发送和接收数据时的起始位、停止位和校验位进行数据的传输。
而同步串行通信是指通过外部时钟信号进行数据的同步传输。
实验器材:1.两台单片机开发板(MCU7516)2.两个串口线3.两台计算机实验步骤:1.将两台单片机开发板连接起来,通过串口线连接它们的串行口。
2.在两台计算机上分别打开串口调试助手软件,将波特率设置为相同的数值(例如9600)。
3.在编程软件中,编写两个程序分别用于发送数据和接收数据。
4.在发送数据的程序中,首先要设置串口的波特率、数据位、停止位和校验位,并将数据存储在缓冲区中。
然后利用串口发送数据的指令将数据发送出去。
5.在接收数据的程序中,同样要设置串口的参数。
然后使用串口接收数据的指令将接收到的数据存储在缓冲区中,并将其打印出来。
实验结果与分析:经过实验,我们成功地实现了单片机之间的双机串行通信。
发送数据的单片机将数据发送出去后,接收数据的单片机能够正确地接收到数据,并将其打印出来。
实验中需要注意的是,串口的波特率、数据位、停止位和校验位必须设置为相同的数值。
否则,发送数据的单片机和接收数据的单片机无法正常进行通信。
同时,在实验之前,需要了解单片机开发板支持的串口通信相关的指令和函数。
实验总结:通过本次实验,我们深入了解了单片机之间的双机串行通信原理和方法。
掌握了串口的设置和使用方法,以及相关的指令和函数。
在实验中,我们学会了如何通过串行口实现数据的传输和互动,为今后的单片机应用和开发打下了基础。
同时,我们还发现,双机串行通信在实际应用中有着广泛的用途。
例如,可以通过串行通信实现两台计算机之间的数据传输,或者实现单片机与计算机之间的数据收发。
单片机单片机课程设计报告-双机串行通信
基于51单片机的双机串行通信设计【摘要】串行通信是单片机的一个重要应用。
本次课程设计就是要利用单片机来完成一个系统,实现双片单片机串行通信。
通信的结果实用数码管进展显示,数码管采用查表方式显示。
两个单片机之间采用RS232进展双机通信。
在通信过程中,使用通信协议进展通信。
【关键字】51单片机,串行通信,接口一、总体设计1.设计要求:两片单片机之间进展串行通信,发送端将0~f循环发送到接收端,并在接收端显示。
2.设计方案:本次设计,对于两片89C51,采用RS232进展双机通信。
发送方的数据由串行口TXD 段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。
接收方也使用MAX232芯片进展电平转换后,信号到达接收方串行口的接收端。
承受方接收后,在数码管上显示接收的信息。
为提高抗干扰能力,还可以在输入输出端加光耦合进展光电隔离。
软件局部,通过通信协议进展发送接收,主机先送AAH给从机,当从机接收到AAH 后,向主机答复BBH。
主机收到BBH后就把数码表TAB[16]中的10个数据送给从机,并发送检验和。
从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进展比拟,假设检验和一样那么发送00H给主机;否那么发送FFH给主机,重新承受。
从机收到16个正确数据后送到一个数码管显示。
二、硬件设计1.51单片机串行通信功能图1.AT89C51计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。
51单片机用4个接口与外界进展数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,本钱高,传输的距离较近。
串行通信的特点是只用两条信号线〔一条信号线,再加一条地线作为信号回路〕即可完成通信,本钱低,传输的距离较远。
51单片机的串行接口是一个全双工的接口,它可以作为UART〔通用异步承受和发送器〕用,也可以作为同步移位存放器用。
单片机双机之间的串行通讯设计报告
单片机双机之间的串行通讯设计报告摘要:本文介绍了一种基于单片机的双机之间的串行通讯设计。
该设计使用两个单片机,通过串行通信协议进行数据传输。
通讯过程中,两台单片机之间通过数据线连接,并使用中断方式进行数据接收和发送。
同时,本文还介绍了串行口工作方式 0 的应用,以及如何使用移位寄存器进行串行口扩展。
通过该设计,可以实现两台单片机之间的高速数据传输,并且具有良好的稳定性和可靠性。
关键词:单片机,串行通讯,中断方式,移位寄存器,串行口扩展一、引言串行通讯是计算机系统中常用的一种数据传输方式,它可以实现不同设备之间的数据传输。
在单片机应用中,串行通讯也是一种常见的数据传输方式。
本文介绍了一种基于单片机的双机之间的串行通讯设计,该设计使用两个单片机通过串行通信协议进行数据传输。
本文还介绍了串行口工作方式 0 的应用,以及如何使用移位寄存器进行串行口扩展。
通过该设计,可以实现两台单片机之间的高速数据传输,并且具有良好的稳定性和可靠性。
二、设计原理该串行通讯设计使用两个单片机,分别为发送单片机和接收单片机。
发送单片机将数据通过串行口发送到接收单片机,接收单片机再将接收到的数据进行处理。
两台单片机之间通过数据线连接,并使用中断方式进行数据接收和发送。
在串行通讯中,数据是通过串行口进行传输的。
串行口工作方式0 是一种常见的串行口工作方式,它使用移位寄存器进行数据接收和发送。
在移位寄存器中,数据被移位到寄存器中进行传输,从而实现了数据的串行传输。
三、设计实现1. 硬件设计在该设计中,发送单片机和接收单片机分别使用一个串行口进行数据传输。
发送单片机将数据通过串行口发送到接收单片机,接收单片机再将接收到的数据进行处理。
两台单片机之间通过数据线连接,并使用中断方式进行数据接收和发送。
硬件设计主要包括两个单片机、串行口、数据线和中断控制器。
其中,两个单片机分别拥有自己的串行口,并且都能够接收和发送数据。
数据线将两台单片机连接在一起,中断控制器用于处理数据的接收和发送。
单片机多机通信(课程设计)[1]
一﹑数据通信协议1.帧格式:总字节数+命令+地址+内容+校验2.帧格式说明:总字节数:4 位命令:4 位地址:1 字节校验:1 字节内容:实际传送的数据,最大为13字节3.总字节数说明:总字节数4位,一帧数据最大16个字节,最小3个字节4.命令格式说明:0000:寻址命令,此时地址表示从机的ID0001:应答寻址命令0010:主机向从机写数据命令0011:主机向从机读数据命令0100:从机应答主机的读/写命令此时是片内寻址命令。
地址表示从机内存的起始地址,主机读/写数据的起始地址,地址的增长方向由主机决定,寻址范围:0~ 2550101:从机向主机写数据命令0110:从机向主机读数据命令0111:主机响应从机读/写此时是片内寻址命令。
地址表示主机内存的起始地址,从机读/写数的起始地址,地址的增长方向由从机决定,寻址范围:0 ~2551000:1001:1010:1011:1100:1101:此时是片外寻址命令,地址增为2个字节,寻址范围:0 ~ 64K此命令是未开发命令1110:帧错误1111:通信结束命令5.地址格式说明:当片内寻址命令时,地址是一个字节,寻址片内范围:0 ~ 255当片外寻址命令时,地址是两个字节,寻址范围:0 ~ 64K 6.内容格式说明:是传输的数据,总大小有帧大小以及命令格式决定7.校验格式说明:校验是存储帧中数字1的个数二、主机通信程序流程图三、从机通信程序流程图NYYNYNNY开始主机初始化置M 为计数标志M = 0?发送地址帧,M = M-1收到从机应答帧解析应答帧帧校验正确?重设M 的值M = 0 ?发送数据帧M = M-1通信失败通信失败NYYN解析应答帧解析应答帧帧校验正确?收到应答帧等待从机应答帧返回通信结束NYNYYNYNYNYNYN从机初始化等待主机广播收到地址帧解析地址帧校验正确?地址匹配?回复应答帧值SM2 = 0置M 为计数器M = 0 ?接受一帧数据收到一帧数据解析帧数据校验正确?处理接受的一帧数据是数据帧?重置M 的值通信失败结束帧准备接受下一帧四、主机通信功能模块1、主机初始化模块设置缓冲区16个字节(既是发送,又是接收缓冲区)设置计数值M设置堆栈指针2、帧设置模块设置帧的通信方式(总字节数、命令、地址、内容、校验)计算校验方式即设置校验字节3、接受帧模块送数据到指定的缓冲区4、发送帧模块设置发送缓冲区5、解析帧模块解析帧大小解析帧命令解析地址五、从机通信功能模块1、主机初始化模块设置缓冲区16个字节(既是发送,又是接收缓冲区)设置计数值M设置堆栈指针2、帧设置模块设置帧的通信方式(总字节数、命令、地址、内容、校验)计算校验方式即设置校验字节3、接受帧模块设置接收缓冲区4、发送帧模块根据解析格式发送数据5、解析帧模块解析帧大小解析帧命令解析地址/*多机通信中的主机通信程序将以地址04H开始的数据发送到从机缓冲区中*/org 0000hljmp startorg 0024h ;0014h~0023h,16字节为数据缓冲区start:mov sp,#03h ;0004h~0013h为堆栈区mov r2,#6 ;计数值Nmov 07h,#255clr es ;关闭串口中断sloop1:call set_framemov a,r2jz errorcall send_framedec r2call receive_framemov a,07hjz sloop1 ;没有收到应答帧call analy_frame ;有收到应答帧cjne r6,#01h,sloop1 ;没有收到从机地址应答帧mov r2,#6 ;重设N的值sloop2:call send_frame ;发送数据帧mov a,r2jz errordec r2call receive_framemov a,07hjz sloop2 ;没有收到应答帧call analy_frame ;有收到应答帧cjne r6,#04h,error;没有收到数据应答帧,失败jmp mreturnerror:sjmp $mreturn:ljmp start/*函数名称:set_frame入口参数:r0(帧缓冲区首址)、r1(帧数据区首址) r7(帧大小)、r6(帧命令)r5(地址)、r4(校验)、r3(帧数据大小)出口参数:r0(帧缓冲区首址)、r1(帧数据区首址)r7(帧大小)、r6(帧命令)r5(地址)、r4(校验)、r3(帧数据大小)功能:设置帧*/set_frame:mov r0,#14hmov a,r7 ;设置帧的大小swap amov @r0,amov a,r6 ;设置帧命令orl a,@r0mov @r0,ainc r0mov a,r5mov @r0,a ;设置地址(从机地址或内存地址)cjne r3,#0,sloopjmp sreturnsloop:inc r0mov a,@r1mov @r0,adjnz r3,sloopsreturn:call check_frame ;此处应该增加一个校验函数ret/*函数名称:send_frame入口参数:r0(帧缓冲区首址)、r7(帧大小)、r3(帧数据大小)出口参数:无功能:发送帧*/send_frame:loop2:mov a,@r0mov sbuf,ajnb ti,$inc r0djnz r7,loop2clr tiret/*函数名称:receive入口参数:r0(帧缓冲区首址)、07h(表示接受时限)07h = 0表示主机等待超时,接收失败出口参数:r0(帧缓冲区首址)、07h函数功能:*/receive_frame:wait:jb ri,recdjnz 07h,waitjmp rreturnrec:mov a,sbufmov @r0,aswap a ;计算接收帧的大小anl a,#0ehmov r7,aclr riloop3: ;接收帧的数据jnb ri,$inc r0mov @r0,sbufdjnz r7,loop3call analy_framerreturn:ret/*函数名称:check_frame出口参数:r0(帧缓冲区首址)入口参数:r0(帧缓冲区首址)r4(校验)功能:帧校验函数,累加帧中1个数*/check_frame:mov r4,#00hmov a,@r0anl a,#0f0hswap amov r7,amov a,#01hcheck: ;累加帧中1的个数anl a,@r0jz cloopinc r4cloop:rl adjnz r7,checkret/*函数名称:analy_frame入口参数:r0(帧缓冲区首址)出口参数:r0(帧缓冲区首址)、r1(帧数据区首址) r2(帧命令标志)、r7(帧大小)、r6(帧命令)r5(地址)、r4(校验)、r3(帧数据大小)函数功能:*/analy_frame:mov a,@r0 ;取帧大小,存到r7中anl a,#0f0hswap amov r7,amov a,@r0 ;取帧命令,存到r6中anl a,#0fhinc r0mov r5,@r0mov r6,a ;判断帧命令cjne r6,#00h,rel0cjne r6,#01h,rel1cjne r6,#02h,rel2cjne r6,#03h,rel3cjne r6,#04h,rel4cjne r6,#05h,rel5cjne r6,#06h,rel6cjne r6,#07h,rel7cjne r6,#0eh,relecjne r6,#0fh,relfrel0:ajmp areturnrel1:clr TB8ajmp areturnrel2:ajmp areturnrel3:ajmp areturnrel4:ajmp areturnrel5:ajmp areturnrel6:ajmp areturnrel7:ajmp areturn rele:ajmp areturn relf:ajmp areturn areturn:retEnd实验心得:/*从机通讯程序,从机地址为:ID*/org 0000hljmp startorg 0024h ;0014h~0023h,16字节为数据缓冲区start:mov sp,#03h ;0004h~0013h为堆栈区mov r2,#6 ;计数值Nmov 07h,#255clr es ;关闭串口中断setb SM2sloop1:mov a,r2jz errorcall receive_framedec r2mov a,07hjz sloop1 ;没有收到帧call analy_frame ;有收到应答帧,解析收到的帧cjne r6,#00h,sloop1cjne r5,ID,sloop1sloop2:call receive_frame ;接收数据帧mov a,r2jz errordec r2call send_framemov a,07hjz sloop2 ;没有收到应答帧call analy_frame ;有收到数据帧cjne r6,#04h,error;没有收到数据应答帧,失败jmp mreturnerror:sjmp $mreturn:ljmp start/*函数名称:set_frame入口参数:r0(帧缓冲区首址)、r1(帧数据区首址) r7(帧大小)、r6(帧命令)r5(地址)、r4(校验)、r3(帧数据大小)出口参数:r0(帧缓冲区首址)、r1(帧数据区首址) r7(帧大小)、r6(帧命令)r5(地址)、r4(校验)、r3(帧数据大小)*/set_frame:mov r0,#14hmov a,r7 ;设置帧的大小swap amov @r0,amov a,r6 ;设置帧命令orl a,@r0mov @r0,ainc r0mov a,r5mov @r0,a ;设置地址(从机地址或内存地址)cjne r3,#0,sloopjmp sreturnsloop:inc r0mov a,@r1mov @r0,adjnz r3,sloopsreturn:call check_frame ;此处应该增加一个校验函数ret/*函数名称:send_frame入口参数:r0(帧缓冲区首址)、r7(帧大小)、r3(帧数据大小)出口参数:无功能:发送帧*/send_frame:loop2:mov a,@r0mov sbuf,ajnb ti,$inc r0djnz r7,loop2clr tiret/*函数名称:receive入口参数:r0(帧缓冲区首址)、07h(表示接受时限) 07h = 0表示主机等待超时,接收失败出口参数:r0(帧缓冲区首址)、07hreceive_frame:wait:jb ri,recdjnz 07h,waitjmp rreturnrec:mov a,sbufmov @r0,aswap a ;计算接收帧的大小anl a,#0ehmov r7,aclr riloop3: ;接收帧的数据jnb ri,$inc r0mov @r0,sbufdjnz r7,loop3call analy_framerreturn:ret/*函数名称:check_frame出口参数:r0(帧缓冲区首址)入口参数:r0(帧缓冲区首址)r4(校验)功能:帧校验函数,累加帧中1个数*/check_frame:mov r4,#00hmov a,@r0anl a,#0f0hswap amov r7,amov a,#01hcheck: ;累加帧中1的个数anl a,@r0jz cloopinc r4cloop:rl adjnz r7,checkret/*函数名称:analy_frame入口参数:r0(帧缓冲区首址)出口参数:r0(帧缓冲区首址)、r1(帧数据区首址) r2(帧命令标志)、r7(帧大小)、r6(帧命令)r5(地址)、r4(校验)、r3(帧数据大小)函数功能:*/analy_frame:mov a,@r0 ;取帧大小,存到r7中anl a,#0f0hswap amov r7,amov a,@r0 ;取帧命令,存到r6中inc r0mov a,@r0anl a,#0fhmov r6,a ;判断帧命令cjne r6,#00h,rel0cjne r6,#01h,rel1cjne r6,#02h,rel2cjne r6,#03h,rel3cjne r6,#04h,rel4cjne r6,#05h,rel5cjne r6,#06h,rel6cjne r6,#07h,rel7cjne r6,#0eh,relecjne r6,#0fh,relfrel0:ajmp areturnrel1:clr TB8ajmp areturnrel2:ajmp areturnrel3:ajmp areturnrel4:ajmp areturnrel5:ajmp areturnrel6:ajmp areturnrel7:ajmp areturnrele:ajmp areturn relf:ajmp areturn areturn:retend。
单片机实验报告流水灯双机通信交通灯定时时钟
实验一流水灯实验一、实验目的1)简单 I/O 引脚的输出2)掌握软件延时编程方法3)简单按键输入捕捉判断二、实验实现的功能1)开机是点亮 12 发光二极管,闪耀三下2)依据顺时针循环挨次点亮发光二极管3)经过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计流水灯原理图四、系统软件设计演示程序按键正转闪耀反转五、实验过程中碰到的问题及解决方法1) 每次循环不论正转仍是反转程序,总先是先履行P1 口的 8 位 led 灯。
原由:在利用 KEIL 自带的库函数中的 _crol_ 和_cror_ 时,在正转和反转程序中应当调动次序的,开始没注意到。
更正后显示正常。
2)在开始实验的时候推行的是向来循环的方式,利用按键嵌套。
以后发现不理想,每次按键按到三次以上后进入死循环。
解决方案:利用一个按键,显示一次。
并加入按键开释,防备误动作。
指导老师署名:日期:实验一程序 :/******************************************************************** **************工程说明:本工程主要达成了一下功能:1,复位后演示全部功能2,灯闪耀三次3,流水灯正转4,流水灯反转函数说明:yanshi() :演示程序dengss() :闪耀程序right():正转程序left():反转程序scankey() :按键扫描********************************************************************* **************/#ifndef _led_h#define _led_h#define uint unsigned int#define uchar unsigned charuchar i,j,a,b,c,d;uchar flag=0;//亮灯判断标记uchar aa,bb,cc,dd,ss;sbit H1=P3^6;sbit key1=P0^5;sbit key2=P0^6;sbit key3=P0^7;void delay(uint);//1ms 延时void yanshi(void);//演示全部亮灯方式void dengss(void);//闪耀三次void left(void); //左循环亮灯void right(void);//右循环亮灯void scankey(); //按键扫描#endif#include"stc10.h"#include<intrins.h>#include<led.h> //包含各样变量定义及函数申明main(){yanshi();delay(2000); //两秒后进入可控大循环while(1){scankey();if(flag==0)right();if(flag==1)left();if(flag==2)dengss();}}void delay(uint x){uint i,j;for(i=110;i>0;i--)for(j=x;j>0;j--);}void yanshi(){dengss();right();left();P2=0XFF;P3=0XFF;}void dengss(){for(ss=3;ss>0;ss--)P2=0;P3=0xc3;delay(1000);P2=0xff;P3=0xff;delay(1000);}flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void right(){aa=0xfe;for(a=8;a>0;a--){P2=aa;aa=_crol_(aa,1);delay(500);}bb=0xfb;P2=0xff;//熄灭循环后亮着的for(b=4;b>0;b--){P3=bb;bb=_crol_(bb,1);delay(500);}//D12 保存发亮flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void left(){cc=0xdf;for(c=4;c>0;c--){P3=cc;cc=_cror_(cc,1);delay(500);P3=0xff;// 熄灭 D9dd=0x7f;for(d=8;d>0;d--){P2=dd;dd=_cror_(dd,1);delay(500);}//D1 保存发亮flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void scankey(){H1=0;if(key1==0){delay(10);if(key1==0){flag=0;while(!key1);//等候按键开释}}if(key2==0){delay(10);if(key2==0){flag=1;while(!key2);//等候按键开释}}if(key3==0){delay(10);if(key3==0){flag=2;while(!key3);//等候按键开释}}}实验二准时器或实不时钟实验一、实验目的1)数码管动向显示技术2)准时器的应用3)按键功能定义二、实验实现的功能1) 经过按键能够设定准不时间,启动准时器,准不时间到,让12 个发光二极管闪耀,达成准时器功能。
用单片机实现一主三从式多机通信(包括论文)
目录一、题目要求与功能分析 (2)1.1题目要求 (2)1.2功能及整体模块分析 (2)二方案论证 (3)2.1设计目的 (3)2.2设计思路 (3)2.2.1原理分析和讨论 (3)2.2.2题设分析 (4)三、电路设计 (6)3.1 整体功能框架设计 (6)3.2 硬件电路设计 (7)3.2.1 主机硬件电路设计 (8)3.2.2 从机硬件电路设计 (11)3.3软件电路设计 (13)3.3.1 协议设计 (13)3.3.2 主机程序流程图设计 (14)3.3.3 从机程序流程图设计 (15)四系统的调试与实现 (17)4.1主机模块功能调试 (17)4.2从机模块调试 (17)4.3整体设计功能调试 (17)五总结与体会 (19)参考文献 (20)附录 (21)一、题目要求与功能分析1.1题目要求本小组的试验题目如下:一、任务:设计实现多台单片机系统之间的串行通信二、基本要求(难度系数0.8):(1)设计一个主从式多机通信系统,包含1台主机和3台从机,主机和从机全部为单片机;(2)选择合适总线接口芯片,正确连接主机和从机;(3)编程实现分布式数据采集功能,主机可以获取各分机当前AD转换结果,并显示。
三、发挥部分:(1)完善通信功能。
(根据完成情况加分,上限+0.2)1.2功能及整体模块分析随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,多机通信系统设计的监控系统逐步普及。
此多机通信系统具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。
在检测大量模拟量的工业现场使用相似的多机通讯系统;单片机接口丰富,与A/D转换模块组合可以完成相同的工作,并且系统可靠、成本低。
本次实验的目的是就是应用单片机的串口通信功能实现一个分布式采集系统。
整个系统中包含一片主机和三片从机,主机的任务是实现对三片从机的AD 转换结果的采集并在数码管上显示之。
双机通信实验报告
一、实验目的1. 掌握双机通信的基本原理和实现方法。
2. 熟悉串行通信的硬件接口和软件编程。
3. 通过实验,加深对单片机串行通信的理解和应用。
二、实验原理双机通信是指两台计算机或单片机之间的数据交换。
串行通信是双机通信中常用的一种通信方式,它将数据一位一位地按顺序传送,适合于远距离通信。
本实验采用单片机串行通信,通过串行口实现数据传输。
三、实验设备1. 两套单片机实验装置(如AT89S51单片机最小系统)2. 串行通信线(如RS-232线)3. 串口调试工具(如串口助手)4. 连接线和电源四、实验内容1. 硬件连接将两套单片机实验装置通过串行通信线连接起来,确保连接线正确无误。
2. 软件编程(1)单片机编程编写单片机程序,实现数据的发送和接收。
程序主要包括以下部分:- 初始化串行口:设置波特率、数据位、停止位和校验位等。
- 发送数据:将数据写入发送缓冲区,启动发送。
- 接收数据:检测接收缓冲区是否有数据,读取数据。
(2)PC端编程编写PC端程序,实现数据的发送和接收。
程序主要包括以下部分:- 串口配置:设置串口号、波特率、数据位、停止位和校验位等。
- 发送数据:将数据写入串口缓冲区,启动发送。
- 接收数据:从串口缓冲区读取数据,显示或处理。
3. 调试与测试(1)单片机端调试- 使用串口调试工具,发送数据到单片机。
- 检查单片机接收到的数据是否正确。
(2)PC端调试- 使用串口调试工具,发送数据到PC。
- 检查PC接收到的数据是否正确。
五、实验结果与分析1. 硬件连接硬件连接正确,两套单片机实验装置通过串行通信线连接。
2. 软件编程(1)单片机程序```c// 单片机程序示例(AT89S51)#include <reg51.h>#define BAUDRATE 9600sbit TXD = P3^1; // 发送引脚sbit RXD = P3^0; // 接收引脚void Serial_Init() {TMOD = 0x20; // 定时器1工作在模式2TH1 = 0xFD; // 设置波特率TL1 = 0xFD;TR1 = 1; // 启动定时器1SCON = 0x50; // 设置串行口工作在模式1 }void main() {Serial_Init();while (1) {// 发送数据TXD = 1; // 发送起始位while (!TXD); // 等待发送完成// 发送数据字节for (char i = 0; i < 8; i++) {TXD = 1; // 发送数据位while (!TXD);TXD = 0; // 发送停止位while (!TXD);}// 接收数据RXD = 1; // 接收起始位while (!RXD); // 等待接收完成// 接收数据字节for (char i = 0; i < 8; i++) {RXD = 1; // 接收数据位while (!RXD);RXD = 0; // 接收停止位while (!RXD);}}}```(2)PC端程序```c// PC端程序示例(C#)using System;using System.IO.Ports;class Program {static void Main() {SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);serialPort.Open();while (true) {// 发送数据serialPort.WriteLine("Hello, world!");// 接收数据string receivedData = serialPort.ReadLine();Console.WriteLine("Received: " + receivedData);}serialPort.Close();}}```3. 调试与测试通过串口调试工具,发送数据到单片机和PC,检查接收到的数据是否正确。
单片机双机之间的串行通信设计
单片机双机串行实验报告实验报告:单片机双机串行通信实验一、实验目的本实验旨在通过单片机实现双机间的串行通信,包括数据的发送和接收,并利用这种通信方式完成一定的任务。
二、实验原理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)配置串口通信的波特率、数据位、校验位和停止位,并打开串口接收中断。
单片机双机通信实验报告
单片机双机通信实验报告《单片机双机通信实验报告》摘要:本实验通过使用两台单片机,利用串口通信实现双机之间的信息传输。
在实验过程中,先分别对两台单片机进行初始化设置,并分别确定了波特率和通信协议。
随后,通过串口线连接两台单片机,并编写发送和接收程序,实现了双机之间的信息传输。
实验结果表明,双机通信实验成功,信息传输准确可靠。
关键词:单片机、双机通信、串口通信、波特率、信息传输1.引言:单片机是一种集成电路,内包含了处理器、存储器和各种外设,广泛应用于嵌入式系统中。
双机通信是指两个单片机之间通过一定的通信方式实现信息的传递和交换。
利用双机通信,可以实现多个单片机之间的协同工作,提高系统的性能和可靠性。
本实验旨在通过串口通信方式,实现双机之间的信息传输。
2.实验原理:串口通信是一种常用的通信方式,将信息按照一定的协议格式转换成串行的数据,通过串口线传输。
串口通信需要设置波特率和通信协议。
波特率是指每秒钟传输的位数,通信协议是指发送和接收的数据格式和规则。
本实验使用两台单片机,每台单片机通过串口线连接。
其中一台单片机作为发送机,另一台单片机作为接收机。
发送机将要传输的信息按照通信协议和波特率发送出去,接收机按照相同的通信协议和波特率接收信息。
接收机接收到信息后,进行处理。
3.实验步骤:(1)初始化设置:分别对发送机和接收机进行初始化设置,包括引脚的设置和串口通信设置。
设置引脚为串口通信模式,并确定波特率和通信协议。
(2)连接单片机:将两台单片机通过串口线连接,发送机的发送引脚连接到接收机的接收引脚,接收机的接收引脚连接到发送机的发送引脚。
(3)编写发送程序:在发送机上编写发送程序,将要发送的信息按照通信协议和波特率发送出去。
(4)编写接收程序:在接收机上编写接收程序,按照相同的通信协议和波特率接收信息,并进行处理。
(5)测试实验:将发送机和接收机分别接入电源,观察实验现象。
4.实验结果:通过实验测试,发送机成功将信息发送给接收机,并在接收机上进行了处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CLR ACC.7
MOV SBUF,A
SJMP KEYBORD
INT_1:;中断判断是发送还是接收
JNB RI,SEND
SJMP CEV
SEND:
CLRTI ;发送子程序
MOVSCON, #00H
MOV LED0,#00H
LCALLSHOW
MOVSCON, #50H
SJMP BACK
CEV:
MOV R7, #0FFH
MOV R6, #0FFH
LOOP1:
DJNZ R6, $
LOOP2:
DJNZ R7, LOOP2
DJNZ R2, LOOP1
RET
TABLE1:
DB 0BBH, 09H,0EAH, 6BH,59H,73H,
DB0F3H, 0BH,0FBH,7BH, 0DBH,0F1H,0B2H,0E9H,0F2H,0D2H
(4)将PC机所接收的字符发送给单片机,与此同时运行单片机接受程序,检查实验板LED数码管所显示的字符是否与PC机发送的字符相同。
调试之前,显示为乱码,修改相关代码后显示正常。
六.
LED0 EQU 30H;预设数值缓存存储位置
ORG 0000H
AJMP START
ORG 0023H
AJMP INT_1
二.
利用8051单片机串行口,实现与PC机通讯。
本实验实现以下功能,将从实验板键盘上键入的字符或数字显示到PC机显示器上,再将PC机所接收的字符发送回单片机,并在实验板的LED上显示出来。
三.
89C51内部有一个可编程全双工串行通信接口。该部件不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。
单片机系统设计及应用实验报告
第次实验
实验名称:单片机串行口与PC机通讯实验
专业:
姓名:学号:
同组人员:学号:
实验地点:
实验时间:2016.12.15
评定成绩:审阅教师:
一.
(1)掌握串行口工作方式的程序设计,掌握单片机通讯的编制;
(2)了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议;
(3)了解PC机通讯的基本要求。
LCALL LOOP
POP A
JZ KEYBORD
JB ACC.0, CH0
JB ACC.1, CH1
JB ACC.2, CH2
JB ACC.3, CH3
JB ACC.4, CH4
JB ACC.5, CH5
JB ACC.6, CH6
JB ACC.7, CH7
CH0:
MOV A,#00H
SJMP MAIN
CLRRI ;接收子程序
MOVA, SBUF ;接收数据
MOV R3,A
MOVSCON, #00H;改变串口工作模式0
LCALL FIND
LCALLSHOW
MOVSCON, #50H;换回串口工作模式1
BACK:
RETI
SHOW: ;LED送显
MOV A,LED0
MOV SBUF,A看出,分别按键S1-S7对应00-07八个数值。
当PC发送数据给单片机时,可以在LED上显示对应数值。上图分别为0F和09。
八.实验心得
本次实验实现的是单片机和PC的通讯,而单片机与单片机之间的通讯原理和本次实验也是类同的,我们可以举一反三掌握其通讯方法。
本实验LED显示是在方式0下,串行口作为同步移位寄存器使用。此时SM2、RB8、TB8均应设置为0。发送数据:TI=0时,执行“MOV SBUF,A”启动发送,8位数据由低位到高位从RXD引脚送出,TXD发送同步脉冲。发送完后,由硬件置位TI。
方式0的波特率为fosc/12,即一个机器周期发送或接收一位数据。
四.实验流程图
四.
五.
(1)编写单片机发送和接收程序,并进行汇编调试。
运行PC机通讯软件“commtest.exe”,将单片机和PC机的波特率均设定为1200。
(2)运行单片机发送程序,按下不同按键(每个按键都定义成不同的字符),检查PC机所接收的字符是否与发送的字符相同。
(3)最初,显示的不是数字而是符号,这是通讯软件的设置,HEX显示,没有勾选。只能实现一次数据传输,原因是串口的工作方式改为0显示led后没有改回方式1。
ORG 0040H
START:
MOV SP,#30H
MOV TMOD,#20H;设置定时器工作模式2
MOV TL1,#0E6H;设置波特率
MOV TH1,#0E6H
MOV SCON,#50H;设置串口工作模式
MOV PCON,#00H
MOV LED0,#0BBH;初始化led
MOV R5,#03H
SETB EA
CH1:
MOV A,#01H
SJMP MAIN
CH2:
MOV A,#02H
SJMP MAIN
CH3:
MOV A,#03H
SJMP MAIN
CH4:
MOV A,#04H
SJMP MAIN
CH5:
MOV A,#05H
SJMP MAIN
CH6:
MOV A,#06H
SJMP MAIN
CH7:
MOV A,#07H
与PC通讯是方式1:一帧10位的异步串行通信方式,包括1个起始位,8个数据位和一个停止位。
当TI=0时,执行“MOV SBUF,A”指令后开始发送。发送时的定时信号由定时器T1送来的溢出信号经过16分频或32分频得到的。在接收到第9位数据(即停止位)时,必须同时满足以下两个条件:RI=0和SM2=0或接收到的停止位为“1”,才把接收到的数据存入SBUF中,停止位送RB8,同时置位RI。在方式1下,SM2应设定为0。
SETB ES
SETB TR1
KEYBORD:;键盘检测按键
MOV P1, #0FFH
MOV A, P1
CPL A
JZ KEYBORD ;是否全为0
LCALL LOOP
MOV A, P1
CPL A
JZ KEYBORD
PUSH A
THEN:
MOV A, P1
CPL A
ANL A, #0FFH
JNZ THEN
CLR TI
L:
MOV A,#00H
MOV SBUF,A
JNB TI, $
CLR TI
DJNZ R5, L
MOV R5,#03H
RET
FIND: ;查找对应断码
MOV DPTR, #TABLE1
MOV A, R3
MOVC A, @A+DPTR
MOV LED0, A
RET
LOOP:
MOV R2, #9FH