51单片机多机通信课程设计

合集下载

51单片机的多机通信

51单片机的多机通信

51 单片机的多机通信[摘要] 目前,在通信领域里,一对一的通信方式已经远远不能满足人们设计的需要,多机通信 已经成为通信控制领域的主流通信形式.通过它对MCS-51系列单片机多机通信的研 究,阐述了单片机多机通信方式及 iic 接口的原理,介绍了单片机 iic 接口多机通信的应用. [关键词] 51 单片机;iic 总线;多机通信;at24c02 存储器; rtx51 多任务操作系统1 引言单片机从根本上改变了传统的控制系统设计思想和设计方法, 以前必须由模拟电路和数 字电路实现的大部分功能,现在已经用单片机通过软件方法实现了。

这种用软件代替硬件 的控制技术也称控制技术,是对传统控制技术的一次革命。

矚慫润厲钐瘗睞枥。

在实际应用系统中,经常需要多个微处理机协调工作才能完成某个过程或任务。

本次 使用 rtx51 多任务操作系统进行研究,能方便地实现多机通讯功能,利用它构成各种分布 式系统。

由于单片机具有体积、成本低、运用灵活、易于产品化、它能方便地组成各种智 能化的控制设备和仪器,做到机电一体化,面向控制、能针对性地解决从简单到复杂的各 类控制任务,能获得最佳工作性能价格比,抗干扰能力强、适用温度范围特别广、在各种 恶劣的环境下都能可靠的工作,这是其他类似计算机无法比拟的,可以方便地实现多机和 分布式控制,使整个系统的效率和可靠性大为提高。

所以单片机及其多机通信技术在现实 生活中发挥着重要作用,研究它具有重要的意义。

聞創沟燴鐺險爱氇。

本课程设计论文对 51 系列单片机的多机通信原理作了全面介绍,详细论证单片机多机 通信系统的相关技术。

Rtx51 操作系统在 51 系列单片机上的使用,并对其相应的软件编程 技术进行了详细的论述。

研究了查询通信方式,并对其相应的软件编程技术进行了详细的 论述。

残骛楼諍锩瀨濟溆。

我所做的单片机多机通信,主要在电脑上仿真完成,个人完成电路的设计、连接、检 查、调试,再根据自己的电路和通信协议用 c 语言写发送和显示程序,然后加电调试,最 终达到了准确无误的发送和显示。

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

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

基于51单片机的双机串行通信课程设计-1000110061基于AT89C51单片机的双机串行通信设计姓名:杨应伟学号:100110061专业:机械设计制造及其制动化班级:机电二班前言单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。

串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。

在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。

单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。

同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。

各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。

串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。

在通信过程中,使用通信协议进行通信。

在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。

单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。

同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。

各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。

51单片机双机串行通信设计

51单片机双机串行通信设计

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单片机的多机通信系统设计

基于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.通信协议:需要定义主机和从机之间的通信协议,包括数据的格式、传输方式等,以便实现正确的数据交互。

基于51单片机的多机通信系统设计

基于51单片机的多机通信系统设计

单片机多机通信系统一、引言随着单片机技术的不断发展,单片机的应用已经从单机向多机互联化方向发展。

单片机在实时数据采集和数据处理方面,有着成本低、能满足一般要求、开发周期短等优点,其在智能家居、计算机的网络通信与数据传输、工业控制自动化等方面有着广泛的应用。

本系统是面向智能家居应用而设计的。

在初期,采用红外无线通信方式,其传输距离短,适于一般家庭应用,且成本相对较低;待方案成熟、成本允许,可以改用GSM无线通信方式。

二、系统原理及方案设计1 、系统框架介绍本系统为基于51单片机的多机红外无线通信系统,由三个51单片机模块组成。

其中一个作为主机(即上位机),负责接收来自从机1(即下位机)采集的数据信息,以及向从机2(即下位机)发送控制信息。

从机1是数据采集模块,采集温度、光强等室内数据,并将其发送给主机。

主机经分析处理,作出相应判断,并给从机2发送控制信息,使由从机2控制的电机作出相应反应,调节室内环境状况。

系统总体框图如下图1所示,图2为红外收发模块简图:图1 系统总体框图图2 红外收发模块简图2 、多机通信原理介绍在多机通信系统中,要保证主机与从机间可靠的通信,必须要让通信接口具有识别功能,51单片机串行口控制寄存器SCON中的控制位SM2正是为了满足这一要求而设置的。

当串行口以方式2或方式3工作时,发送或接收的每一帧信息都是11位的,其中除了包含SBUF 寄存器传送的8位数据之外,还包含一个可编程的第9位数据TB8或RB8。

主机可以通过对TB8赋予1或0,来区别发送的是数据帧还是地址帧。

根据串行口接收有效条件可知,若从机的SCON控制位SM2为1,则当接收的是地址帧时,接收数据将被装入SBUF并将RI标志置1,向CPU发送中断请求;若接收的是数据帧时,则不会产生中断标志,信息将被丢弃。

若从机的SCON控制位SM2为0,则无论主机发送的是地址帧还是数据帧,接收数据都会被装入SBUF并置1标志位RI,向CPU发出中断请求。

单片机多机通信(课程设计)[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。

51单片机计课程设计

51单片机计课程设计

51单片机计课程设计一、课程目标知识目标:1. 理解51单片机的基本组成、工作原理及其在嵌入式系统中的应用。

2. 掌握51单片机的编程语言(C语言),能够阅读和编写简单的程序。

3. 学习51单片机的I/O口编程、定时器/计数器、中断系统等基础应用。

4. 了解51单片机与其他外围设备的通信接口,如串行通信。

技能目标:1. 能够使用51单片机的开发环境,如Keil uVision和Proteus进行程序设计和仿真。

2. 培养学生的动手实践能力,通过实验箱或面包板搭建简单的51单片机应用电路。

3. 培养学生的问题分析和解决能力,通过编程解决实际问题。

4. 学会查阅技术文档和参考资料,提升自主学习能力。

情感态度价值观目标:1. 培养学生对电子制作和编程的兴趣,激发创新意识和探索精神。

2. 强调团队合作和交流分享的重要性,培养学生的团队协作能力。

3. 增强学生的工程意识,认识到科技对于社会发展的重要性。

4. 引导学生形成严谨的科学态度,注重实践操作的准确性和程序的逻辑性。

本课程针对高年级学生,考虑其已有一定电子和编程基础,课程设计注重理论与实践相结合,通过项目驱动的教学方法,使学生在实践中掌握知识,提升技能,同时培养积极的情感态度价值观。

通过本课程的学习,学生将能够独立完成简单的51单片机项目设计,为后续深入学习嵌入式系统打下坚实基础。

二、教学内容1. 51单片机基础知识- 51单片机结构及工作原理- 51单片机引脚功能及内部资源- 编程环境Keil uVision与Proteus使用方法2. 51单片机C语言编程- 数据类型、运算符与表达式- 控制语句(循环、分支)- 函数的定义与调用- 中断处理程序编写3. 51单片机I/O口编程- I/O口输入输出控制- 延时函数编写- 按键与LED控制4. 定时器/计数器- 定时器/计数器工作原理- 定时器/计数器编程方法- 定时器应用案例5. 中断系统- 中断系统原理与分类- 中断系统编程- 中断应用案例6. 串行通信- 串行通信原理- 51单片机串口编程- 串口通信应用案例7. 综合项目设计与实践- 项目需求分析- 硬件电路设计与搭建- 软件程序设计与调试- 项目展示与评价教学内容依据课程目标和学科特点进行安排,注重知识体系的科学性和系统性。

51单片机课程设计

51单片机课程设计

51单片机课程设计一、课程目标知识目标:1. 理解51单片机的硬件结构,掌握其工作原理;2. 学会使用51单片机的指令集,能进行基本的编程操作;3. 掌握51单片机中断、定时器等模块的使用方法;4. 了解51单片机在嵌入式系统中的应用。

技能目标:1. 能够运用C语言编写51单片机程序,实现简单功能;2. 能够使用仿真器进行51单片机程序调试,解决常见问题;3. 能够结合实际需求,设计并实现51单片机控制系统;4. 培养学生的动手操作能力和团队协作能力。

情感态度价值观目标:1. 培养学生对电子技术、嵌入式系统的兴趣,激发学生的学习热情;2. 培养学生严谨、细心的学习态度,提高学生的自主学习能力;3. 培养学生面对问题的解决能力,增强学生的自信心;4. 培养学生的创新意识和团队精神,为未来职业发展奠定基础。

分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够独立完成51单片机的硬件连接和编程;2. 学生能够利用51单片机实现至少两个实际项目(如温度控制器、智能小车等);3. 学生能够在课程结束后,对51单片机有更深入的理解,为后续学习嵌入式系统打下坚实基础。

二、教学内容本章节教学内容围绕51单片机的原理与应用展开,分为以下四个部分:1. 硬件结构与原理:详细介绍51单片机的内部结构,包括CPU、存储器、I/O口、定时器、中断系统等模块,使学生掌握其工作原理。

2. 指令系统与编程:讲解51单片机的指令集,教授C语言编程基础,使学生能够编写简单的51单片机程序,掌握编程技巧。

3. 中断与定时器:深入讲解51单片机的中断系统和定时器功能,通过实例分析,使学生能够灵活运用中断和定时器实现特定功能。

4. 实践项目:结合实际应用,开展至少两个实践项目,如温度控制器、智能小车等,让学生动手实践,提高学生的实际操作能力和创新能力。

教学内容安排如下:1. 硬件结构与原理:2课时,重点讲解51单片机的内部结构及其工作原理;2. 指令系统与编程:4课时,教授指令集和C语言编程,配合实例演示;3. 中断与定时器:3课时,通过案例分析,使学生掌握中断和定时器的应用;4. 实践项目:6课时,分组进行项目实践,培养学生的动手操作能力和团队协作能力。

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

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

基于51单片机的双机串行通信设计一、设计任务设计要求:两个AT89C51单片机使用串口进行通信。

1)1机发送,二机接收时。

使用1机发送一个数字0xAA给2机。

2)如果2机收到数据后要给1机回复,回复0xBB。

3)1机收到回复后要下发数据,下发的同时要将数据显示出来,下发的数据通过4*4的矩阵键盘产生,可以由用户进行控制。

4)2机收到后将这些数值显示出来,一次传输完毕要回复0x00。

可以使用点阵显示或者数码管显示或者 LCD显示。

二、硬件设计1、单片机串行通信功能AT89C51计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。

51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。

串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。

51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。

51单片机串行接口的结构如下:(1)数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。

有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。

(2)串行控制寄存器(PCON)SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:SM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10, 11对应于工作方式0、1、2、3。

串行接口工作方式特点见下表SM2:多机通信控制位。

REN:接收允许控制位。

软件置1允许接收;软件置0禁止接收。

TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。

RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。

(完整版)51单片机串行通信课程设计

(完整版)51单片机串行通信课程设计
串行通信 ..................................................................................................................................................... 3
.................................................................................................................................................................. 22
设计方案 ..................................................................................................................................................... 9
硬件设计 ..................................................................................................................................................... 9
号:
绩:
1 摘 要 通信技术根据传输方式的不同,分为串行通信和并行通信,而单片机在现代通信中非常实用。本次课程设计就是要利用单片机来完成一个系统,实现单片机双机串行通信。通信的结果用数码管进行显示,数码管采用查表方式显示。两个单片机之间采用RS232接口标准进行双机通信。在通信过程中,使用通信协议进行通信,实现两个单片机之间串行异步通信。 关键词:51单片机,串行通信,RS-232接口;

51单片机多机通信程序

51单片机多机通信程序

51单片机多机通信程序(主机部分) /* multi_m.c *//* 多机通信的主机部分*/#ifndef __MULTI_M_C__#define __MULTI_M_C__#include <AT89X51.H>#include <STRING.H>#define __MAX_LEN_ 64 // 数据最大长度#define _MHZ_ 11 // 设置单片机使用的晶振频率(11.0592MHz) /* 以下为程序协议中使用的握手信号*/#define __SUCC_ 0x0f // 数据传送成功#define __ERR_ 0xf0 // 数据传送错误void init_serial(); // 串口初始化void send_data(unsigned char *buf); // 发送数据void delay10ms(unsigned int count); // 延时子程序(10ms) void main(){char buf[__MAX_LEN_];unsigned char i = 0;unsigned char tmp;unsigned char addr; // 该字节用于保存要通信的从机地址/* 为缓冲区赋初值*/P0 = 0xff;while(P1 != 0) // 每隔100ms从P0口读取,若读取到0则表明数据采集结束{*(buf+i) = P0;delay10ms(10); // 延时100msP0 = 0xff;i++;}*(buf+i) = 0; // 缓冲区最后一个字节为0表示数据结束/* 读要访问的分机地址*/P0 = 0xff;addr = P0;/* 串口初始化*/init_serial(); // 初始化串口EA = 0; // 关闭所有中断/* 发送地址帧并接收应答信息,如果接收的信号与发送的地址信息不同,则重新发送地址帧*/tmp = addr-1;while(tmp != addr){/* 发送从机地址*/TB8 = 1; // 发送地址帧SBUF = addr;while(!TI);TI = 0;/* 接收从机应答*/RI = 0;while(!RI);tmp = SBUF;RI = 0;}/* 发送数据并接收校验信息,如果接收的信号为0FH,表示从机接收成功,否则将重新发送该组数据*/tmp = __ERR_;while(tmp != __SUCC_){send_data(buf); // 发送数据RI = 0;while(!RI);tmp = SBUF;RI = 0;}while(1); // 程序结束,进入死循环}/* 初始化串口*/void init_serial(){TMOD = 0x20; //定时器T1使用工作方式2TH1 = 250; // 设置初值TL1 = 250;TR1 = 1; // 开始计时PCON = 0x80; // SMOD = 1SCON = 0xd0; //工作方式3,9位数据位,波特率9600bps,允许接收}/* 发送数据*/void send_data(unsigned char *buf){unsigned char len; // 保存数据长度unsigned char ecc; // 保存校验字节len = strlen(buf); // 计算要发送数据的长度ecc = len; // 开始进行校验字节计算/* 发送数据长度*/TB8 = 0; // 发送数据帧SBUF = len; // 发送长度while(!TI);TI = 0;/* 发送数据*/for(i=0; i<len; i++){ecc = ecc^(*buf); // 计算校验字节TB8 = 0; // 发送数据帧SBUF = *buf; // 发送数据buf++;while(!TI);TI = 0;}/* 发送校验字节*/TB8 = 0; // 发送数据帧SBUF = ecc; // 发送校验字节while(!TI);TI = 0;}/* 延时10ms,精度较低,参数count为延时时间*/ void delay10ms(unsigned int count){unsigned int i, k;unsigned char j;unsigned int tmp;tmp = (int)((100*_MHZ_)/12);for(i=0; i<count; i++)for(j=0; j<100; j++)for(k=0; k<tmp; k++);}#endif51单片机多机通信程序(从机部分)/* multi_s.c *//* 多机通信的从机部分*/#ifndef __MULTI_S_C__#define __MULTI_S_C__#include <AT89X51.H>#include <STRING.H>#define __MAX_LEN_ 64 // 数据最大长度#define _MHZ_ 11 // 设置单片机使用的晶振频率(11.0592MHz)/* 以下为程序协议中使用的握手信号*/#define __SUCC_ 0x0f // 数据传送成功#define __ERR_ 0xf0 // 数据传送错误void init_serial(); // 串口初始化unsigned char recv_data(unsigned char *buf); // 接收数据void Beep_ok(); // 蜂鸣表示数据接收ok,该函数代码未给出void main() {char buf[__MAX_LEN_];unsigned char i = 0;unsigned char tmp = 0xff;unsigned char addr; // 保存本机地址/* 从P1口读取本机地址*/P1 = 0xff;addr = P1;/* 串口初始化*/init_serial(); // 初始化串口EA = 0; // 关闭所有中断/* 进入设备应答阶段*/while(1){SM2 = 1; // 只接收地址帧/* 如果接收到的地址帧不是本机地址,则继续等待*/ tmp = addr-1;while(tmp != addr){RI = 0;while(!RI);tmp = SBUF;RI = 0;}/* 发送应答信号,并做好接收数据的准备*/TI = 0;TB8 = 0; // 主机不检测该位SBUF = addr;while(!TI);TI = 0;SM2 = 0; // 允许接收数据信息/* 数据接收*/tmp = 0xff;while(tmp == 0xff) // 如果数据校验失败则重新接收数据{tmp = recv_data(buf); // 校验失败返回0xff,检测到地址帧则返回0xfe,接收成功则返回0}if(tmp == 0xfe) // 在数据接收过程中,如果发现地址帧,则重新开始整个接收过程continue;Beep_ok(); // 蜂鸣表示数据接收成功}}/* 初始化串口*/void init_serial(){TMOD = 0x20; //定时器T1使用工作方式2TH1 = 250; // 设置初值TL1 = 250;TR1 = 1; // 开始计时PCON = 0x80; // SMOD = 1SCON = 0xd0; //工作方式3,9位数据位,波特率9600bps,允许接收}/* 接收数据,注意该函数使用buf指向的缓冲区保存数据,在数据末尾使用’\0’表示数据结束* 返回值为0,数据校验成功,返回值为0xfe,接受过程中接收到地址帧,返回值为0xff,数据校验失败*/unsigned char recv_data(unsigned char *buf){unsigned char len; // 该字节用于保存数据长度unsigned char ecc; // 该字节用于保存校验字节unsigned char i,tmp;/* 接收数据长度*/RI = 0;while(!RI);if(RB8 == 1) // 若当前接收为地址帧则返回0xfereturn 0xfe;len = SBUF;RI = 0;/* 使用len的值为校验字节ecc赋初值*/ecc = len;/* 接收数据*/for(i=0; i<len; i++){while(!RI);if(RB8 == 1) // 若当前接收为地址帧则返回0xfe return 0xfe; *buf = SBUF; // 接收数据ecc = ecc^(*buf); // 进行字节校验RI = 0;buf++;}*buf = 0; // 表示数据结束/* 接收校验字节*/while(!RI);if(RB8 == 1) // 若当前接收为地址帧则返回0xfe return 0xfe; tmp = SBUF;RI = 0;/* 进行数据校验*/ecc = tmp^ecc;if(ecc != 0) // 校验失败{*(buf-len) = 0; // 清空数据缓冲区TI = 0; // 发送校验失败信号TB8 = 0;SBUF = __ERR_;while(!TI);TI = 0;return 0xff; // 返回0xff表示校验错误} TI = 0; // 校验成功TB8 = 0;SBUF = __SUCC_;while(!TI);TI = 0;return 0; // 校验成功,返回0}#endif。

单片机多机通信课程设计

单片机多机通信课程设计

1设计任务多机串行通信的设计基本任务1.设计三个以上单片机实现主从式串行通信的系统,主机发送数据到指定站号的从机端,也可以群发到所有从机端,并在LED数码管上显示。

2.可通过接在主机上的键盘输入数据,通过主机发送到从机。

3.从机也可输入数据,并可在查询到主机空闲时将数据发送给主机。

4*.从机间可相互通信(从机—)主机 另一从机),通信协议遵从modbus规范。

4@. 其他功能(创新部分)仿真模块例2设计方案2.1设计任务本文在参考了现在普遍的多机通信系统的基础上,设计了一种基于51单片机STC89C51的多机通信系统。

在proteus上设计并仿真电路图。

进入proteus程序仿真,启动程序系统,首先主机通过按键选择准备通信的从机,接通后,主机通过矩阵键盘上的数字按键与从机通信,使从机上的数码管显示对应的数字,以此实现多机通信。

如,与2号机通信并传输“8”这个数字。

首先主机从选择从机按键上按“2号机”键,与2号机连通后按下主机矩阵键盘上的“8”键,对应的2号机数码管上会显示数字“8”,证明通信成功。

2.2串行通信简介串行通信可以分为同步通信和异步通信两类。

同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。

这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。

它们均由同步字符、数据字符和校验字符(CRC)组成。

其中同步字符位于帧开头,用于确认数据字符的开始。

数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。

同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。

异步通信中,在异步通行中有两个比较重要的指标:字符帧格式和波特率。

数据通常以字符或者字节为单位组成字符帧传送。

字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。

发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。

51单片机课程设计

51单片机课程设计
16.问题解决与故障排查:教授学生在遇到编程和电路设计问题时,如何分析问题、查找资料以及解决故障的方法。
17.课后实践与持续学习:鼓励学生在课后继续进行单片机实践,培养自主学习能力,推荐相关学习资源,引导学生持续深入学习。
18.课程总结与反馈:在课程结束时,组织学生进行课程总结,反馈学习体验和收获,为后续课程的教学提供改进方向。
13.安全教育与操作规范:在教学过程中,穿插安全教育,让学生了解单片机实验操作中的安全注意事项,遵守实验室操作规范。
14.成果展示与评价:组织学生进行课程设计成果的展示,通过自评、互评和教师评价相结合的方式,对学生的设计作品进行评价,促进学生能力的全面提升。
4、教学内容
15.知识拓展与前沿技术:介绍51单片机在现实生活中的应用以及相关前沿技术,如物联网、智能家居等领域的应用,拓宽学生知识面。
51单片机课程设计
一、教学内容
本节“51单片机课程设计”依据八年级下册《信Байду номын сангаас技术》教材第四章“单片机控制”内容展开,主要包括以下知识点:
1. 51单片机的结构和原理:介绍51单片机的内部结构、工作原理及其各个组成部分的功能。
2. 51单片机的指令系统:列举常用的51单片机指令,如数据传送、逻辑运算、算术运算等。
3. 51单片机的I/O口编程:讲解如何通过编程控制51单片机的输入输出口,实现LED灯、蜂鸣器等器件的控制。
4. 51单片机的定时器/计数器:介绍定时器/计数器的工作原理和编程方法,实现精确的时间控制。
5. 51单片机的中断系统:讲述中断的概念、中断源以及中断编程方法,提高程序的响应速度。
6. 51单片机的外部扩展:探讨如何通过外部扩展,实现更多的功能,如扩展RAM、ROM、键盘、显示器等。

51双机通讯课程设计

51双机通讯课程设计

51 双机通讯课程设计一、课程目标知识目标:1. 学生能理解双机通讯的基本概念,掌握双机通讯的基本原理。

2. 学生能掌握双机通讯中常用的数据传输协议和通信接口。

3. 学生能了解双机通讯在现实生活中的应用场景。

技能目标:1. 学生能够运用所学知识,独立完成双机通讯的硬件连接和软件配置。

2. 学生能够运用编程语言实现双机之间的数据传输,具备简单通信程序的开发能力。

3. 学生能够通过实际操作,解决双机通讯过程中遇到的问题,具备一定的故障排查能力。

情感态度价值观目标:1. 学生通过学习双机通讯,培养对信息科技的兴趣和热情,提高探索新技术的积极性。

2. 学生能够在团队合作中发挥自己的优势,培养良好的沟通能力和团队协作精神。

3. 学生能够认识到双机通讯在科技发展中的重要性,增强对科技创新的社会责任感。

本课程针对初高中年级学生,结合课程性质、学生特点和教学要求,将双机通讯知识分解为具体的学习成果。

课程设计注重理论与实践相结合,旨在提高学生的动手操作能力和实际问题解决能力,为培养具备创新精神和实践能力的优秀人才奠定基础。

二、教学内容1. 双机通讯基本概念:介绍双机通讯的定义、分类及发展历程,使学生了解双机通讯的背景和基本知识。

教材章节:《信息技术》第5章第1节。

2. 双机通讯原理:讲解双机通讯的工作原理,包括信号传输、编码解码、数据帧等基本概念。

教材章节:《信息技术》第5章第2节。

3. 数据传输协议与通信接口:介绍常用的数据传输协议(如串行通信协议、USB通信协议等)及通信接口(如串口、并口、USB等)。

教材章节:《信息技术》第5章第3节。

4. 双机通讯应用场景:分析双机通讯在现实生活中的应用实例,如智能家居、工业控制等领域。

教材章节:《信息技术》第5章第4节。

5. 硬件连接与软件配置:讲解双机通讯的硬件连接方法、软件配置步骤及注意事项。

教材章节:《信息技术》第5章第5节。

6. 编程实现双机通讯:通过实例教学,指导学生运用编程语言(如C语言、Python等)实现双机之间的数据传输。

51单片机串行通信课程设计

51单片机串行通信课程设计

51单片机串行通信课程设计一、课程设计背景随着科技的发展,各种设备和系统之间的数据交换变得越来越普遍。

而串行通信正是其中一种常用的数据交换方式。

51单片机已经成为了许多嵌入式系统的主要控制芯片,其中串行通信是一项非常重要的技术。

因此,本文将介绍如何通过51单片机完成串行通信,帮助读者更好地了解该技术,且能够设计出简单的串行通信系统。

二、课程设计目标本课程设计主要包括以下几个目标:1.掌握51单片机的串行通信原理和基本知识;2.理解串行通信的概念、特点和应用;3.学会设计简单的串行通信系统, 并能正确处理串口数据。

三、课程设计内容1.串行通信原理和基本知识介绍–串行通信的概念和特点–常用的串口协议(如UART、SPI、I2C等)–串口通信的通信协议2.51单片机串行通信实验–串口配置和初始化–数据发送和接收的实现–模拟串口通信3.串口通信协议实验–实现一个简单的通信协议–验证串口通信协议的可靠性4.应用实验–设计一个可以向计算机发送字符并显示字符的系统。

四、课程设计步骤1.掌握串行通信原理和基本知识,了解常用的串口协议。

2.学习51单片机串行通信的相关知识。

3.对串口进行配置和初始化,包括参数设置和波特率;4.实现数据的发送和接收,通过模拟实现串口通信的过程;5.实现一个简单的通信协议,并验证其可靠性;6.设计一个简单的串行通信系统,向计算机发送并显示字符。

7.总结串行通信的过程和应用,提高对该技术的理解。

五、课程设计总结通过本次课程设计,我们了解并掌握了串行通信的原理和基本知识,学习了51单片机串行通信的相关知识,同时学会了串口的配置和初始化方法,以及数据发送和接收的实现方法。

此外,我们还学会了如何设计一个简单的通信协议,并验证其可靠性,最终设计出了一个能够向计算机发送并显示字符的系统。

总之,本次课程设计使我们更深入地了解了串行通信的应用场景和实现过程,是一次非常有意义的学习经历。

MCS-51单片机的多机通信方式

MCS-51单片机的多机通信方式

多机通信原理
每台从机一个地址(编号) 系统中的通信总是由主机发起 主机向从机发送的信息分为地址字节和数据字节两种。地址字
节用于寻址从机,数据字节为发给从机的实际数据,二者可以 使用第9位来区分。地址字节帧的第9位为1,数据字节帧的第9 位为0 系统初始化时,将所有从机的SM2位置为1,并允许串行口接收 中断。这样,只有主机送来的地址帧才会被接收
单片机原理与应用
MCS-51单片机的多机通信方式
SCON中的SM2位可以作为多处理机通信位,使单片机方便地 应用于集散式分布系统中
集散式分布系统,或者称为分布式控制系统(DCS),是相对于 集中式控制系统而言的一种新型计算机控制系统,它是在集中 式控制系统的基础上发展、演变而来的。这种系统中,有一台 主机和多台从机。主机负责全局运行情况的监视、统计、控制 等,各从机负责本地信号的采集处理、本地资源的控制。主机 和从机通过通信线路相联系
1.2 通信协议的设计
通信协议中,除规定命令、数据的格式,还有以下一些方面需 要特别考虑
命令的顺序 差错处理 超时处理
单片机原理与应用
ห้องสมุดไป่ตู้
1.1 多机通信原理
主从式多机通信连接方式
多机通信原理
当串行口工作在方式2或3时 若SM2=1,则只有接收到的第9位数据(RB8)为1时,才将数据
送入接收缓冲器SBUF,并置位RI,申请中断,否则丢弃接收 到的数据 若SM2=0,则无论第9位数据(RB8)是1还是0,都将数据装入 SBUF,置位RI,申请中断

51单片机的课程设计

51单片机的课程设计

51单片机的课程设计一、课程目标知识目标:1. 理解51单片机的硬件结构,掌握其工作原理;2. 学会使用51单片机的开发环境,掌握基本的编程语法和技巧;3. 掌握51单片机中断、定时器、串行通信等模块的应用;4. 了解51单片机在嵌入式系统中的应用,培养对单片机应用场景的认识。

技能目标:1. 能够独立设计简单的51单片机程序,完成基础的控制任务;2. 能够运用51单片机解决实际问题,具备一定的编程调试能力;3. 能够阅读和分析51单片机的相关资料,提高自学能力和技术文献阅读能力。

情感态度价值观目标:1. 培养学生对单片机技术的兴趣,激发学生探索嵌入式领域的热情;2. 培养学生的团队合作意识,提高沟通与协作能力;3. 引导学生关注我国单片机技术的发展,增强学生的民族自豪感;4. 培养学生严谨、细致、负责的学习态度,养成良好的编程习惯。

课程性质:本课程为实践性较强的学科,旨在通过51单片机的学习,让学生掌握基本的单片机原理和编程技能,培养实际操作和解决问题的能力。

学生特点:学生具备一定的电子基础和编程基础,对单片机有一定了解,但实践经验不足。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,以实例教学为主,培养学生动手实践能力。

同时,关注学生的情感态度价值观培养,激发学生的学习兴趣和探究欲望。

在教学过程中,将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 51单片机硬件结构:介绍51单片机的内部结构、引脚功能、工作原理等,结合教材第二章内容进行讲解。

- 微控制器原理- 51单片机引脚功能- 时钟与复位电路2. 开发环境与编程工具:学习51单片机的开发环境搭建,掌握编程工具的使用。

- Keil C51集成开发环境安装与配置- 51单片机程序编写、编译与下载3. 51单片机编程语言:学习单片机C语言编程基础,掌握基本语法和编程技巧。

- C语言基础语法- 特定寄存器的操作与编程4. 中断与定时器:学习中断系统、定时器的工作原理和应用实例。

通信行业-课程设计0861130123+吴斌+MCS51单片机多机通信系统的实现 精品

通信行业-课程设计0861130123+吴斌+MCS51单片机多机通信系统的实现 精品

课程设计说明书题目:基于MCS51单片机多机通信系统的实现院(系):信息与通信学院专业:电子信息工程学生姓名:吴斌学号: 0861130123 指导教师:武小年职称:副教授20XX年12月3日基于MCS51单片机多机通信系统的实现摘要目前,MCS51单片机在多机通信领域应用很广。

研究最多的是上位机与下位机的通信及多单片机构成的主从式多机通信系统。

本文重点研究了主从式多机通信系统和平权式多机通信系统,把主从式多机通信系统与平权式多机通信系统有效地结合到了一起。

所谓主从式结构,即在两个单片机中,一个主机负责通信管理,另一个为从机,从机要负责主机的调度与支配。

该设计用AT89S52芯片,并用C语言程序来控制AT89S52,使之能实现两个单片机之间的通信。

通信方式为单工通信,一个为主单片机,作为发送方,另一个为从单片机,作为接收方。

对于两片MCS51单片机,发送方的数据由串行口TXD端输出,接收方的数据由串行口RXD端输入。

通信成功时,对应的LED灯会闪烁,表现通信成功。

平权式结构,必须从平权式多机通信协议入手,首先设计了具体平权式多机通信协议;单片机通信用按键开关控制,编程实现地址寻址。

1号机按下按键,2号机的数码管就会显示数字,每按一次就累加1,显示16进制;反之,2号机按下按键,1号机的数码管也会显示数字,每按一次也累加1,显示16进制。

不存在主从机之分,权限是平等的,并且通信的时候,对应的LED灯会闪烁,表现通信正在进行。

本文已经仿真通过,真实可行。

具有一定的检错能力,串行通信的比特率是9600bit/s,通信速度较快,且可靠性高。

关键词:单片机;多机通信系统;主从;平权;AT89S52Based on the MCS51 single-chip microputer munication systemAbstractAt present, MCS51 MCU in multi machine munication domain application is very wide. The most studied is the position machine and the lower position machine munication and multi chip microprocessor master-slave multiprocessor munication system. This paper focuses on the study of the master slave munication system and affirmative type multiputer munication system, the master slave munication system and affirmative type multiputer munication system effectively bine together.The so-called master-slave structure, i.e., in two single chip microputer, a host is responsible for munication management, another from the machine, from machine responsible for a host of scheduling and control. The design of AT89S52 chip, and C language program to control AT89S52, so that it can realize munication between two single chip microputer. munication method for simplex munication, a main chip, as the sender, another from the chip, as the receiver. For the two MCS51 single chip microputer, the data from the serial port TXD ends output, receiving data from the serial port RXD input. The munication is successful, the corresponding LED light flashes, performance munication success.Equity structure, must from affirmative type multi machine munication protocol to start, first designed specific affirmative type multi machine munication protocol; single-chip microputer munication with key switch control, programming address. Unit 1 keys are pressed, the No. 2 engine digital control will display the number, each time increment 1, show 16 hex; conversely, the No. 2 engine press, machine 1 digital tube will also display digital, every time also accumulated 1, show 16 hex. There is no master / slave machine branch, authority is equal, and the munication time, corresponding to the LED light flashes, performance munication is.This paper has been adopted by simulation, practical. Has a certain error detection capability, serial munication bit rate is 9600bit / s, munication speed, and high reliability.Key words: single chip microputer; munication system; master-slave; equality; AT89S52目录引言 (4)1 课题背景 (6)1.1 课题研究的背景及意义 (6)1.2单片机多机通信领域的历史及国内外发展现状 (6)1.3 本课题研究的内容 (7)2 单片机多机通信理论及方案选择 (8)2.1 单片机串口通信 (8)2.1.1单片机串口介绍 (8)2.1.2 单片机串口控制寄存器 (8)2.1.3单片机串口的四种工作方式 (9)2.2 系统网络协议 (10)2.3微处理器的选择 (10)2.4 数码管介绍 (15)3 单片机多机通信协议设计 (15)4 硬件电路设计 (16)4.1 单片机最小系统设计 (16)4.2 矩阵键盘电路设计 (17)4.3 数码管显示电路设计 (18)4.4 电源电路设计 (18)5 软件设计 (19)5.1多机通信协议的算法设计 (19)5.2 键盘程序设计 (20)5.3 系统初始化程序设计 (21)6 Keil和Proteus介绍和联调 (21)6.1 Proteus的介绍 (21)6.2 Keil的介绍 (22)7 结论 (24)致谢 (24)........................................................................................................错误!未定义书签。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《单片机应用与仿真训练》设计报告单片机多机通信姓名:学号:专业班级:指导老师:所在学院:2011年7月5 日摘要本设计是基于AT89S52单片机温度检测传输的三机通信系统,有三个单片机组成,其中一个作为主机(上位机),控制并负责接收来自从机1号和从机2号采集的数据信息,并显示在数码管上。

由主机发送控制信息(通过按键控制),确定是接收来自想要得到各从机数据。

从机1号和2号是数据采集模块,用来采集室内或室外温度信息,并通过通信协议传送给主机。

为保证三机通信可靠性,通信口要有识别功能,51单片机串行口控制寄存器SCON中SM2位正是满足这一要求而设置的。

当串行口以工作方式三工作时,接收和发送的信息都是11位数据,既包含SBUF寄存器传送的8位数据,还包括SCON中可编程第9位数据即TB8或RB8,主机可通过设定TB8是0或1,来区别发送的是地址还是数据。

从机都先将SCON中的SM2设置为1,待主机发送地址信息,与本身的地址对照,如果是,则令从机SM2为0,准备接收主机信息并发送温度信息,如果不是,则继续等待。

主机通过中断口接收数据,处理后显示在数码管上。

此次设计由于只有一个18b20温度传感器,这里用三个任意的数据代替从机2采集温度数据,由于传输距离较短,这里不用MAX232,直接将主机的发送端接从机接收端,主机接收端连接从机发射端,仿真结果正常显示,实验结果正常。

目录1概述 (1)1.1设计概述 (1)1.2多机通信基本原理 (1)1.3 通信协议 (2)2系统总体方案及硬件设计 (3)2.1总体设计方案 (3)2.2硬件电路设计 (3)3软件设计 (7)3.1控制流程图 (7)3.2串行口采集步骤 (7)3.3软件流程图 (8)PROTEUS仿真 (9)课程设计体会 (11)参考文献: (12)附件1:主机A源程序代码 (13)附件2:原理图 (24)1概述1.1设计概述目前在通信领域里,单片机一对一通信已经不能满足人们设计的需要,多机通信已经成为主要通信方式。

单片机多机通信是指两台以上的单片机组成的网络结构,可以通过串行通信方式共同实现对某一过程的控制。

目前单片机多机通信形式较多,常见的有星形、环形,串行总线型通信和主从式多机型四种。

本设计采用的是主从式多机型,它是一种分散性网络结构,具有接口简单、使用灵活等优点。

下图为主从式多机通信示意图:多机通信示意图1.2多机通信基本原理51用于多机通信时必须工作在方式2或方式3。

以方式3为例,每发送一帧数据为11位:1位起始位(0),8位数据位和1位停止位(1),附加的第9位数据在非多机系统中为奇偶校验位,在发送端有SCON的TB8产生,在接收端传送到开关电源模块SCON的RB8。

它还可设定为“0”或“1”作为在MTD2002多机通信中区分数据帧(0标志)还是地址帧(1标志)的标志。

在MCS-51多机系统中有以下协议:所有的各从机均处于听命状态,即SM2=1,以便接收主机发来的地址,当接收到一帧信息的RB8为“1”时,表示主机发送来的是地址信息,所有的从机均发生接收中断,否则中断屏蔽。

当一从机进入相应的中断服务程序,把接收到的地址和本机的地址比较,如果相符合就令其SM2=0,并向主机发回本机地址以作应答,该从机就与主机联通,准备接收主机发来的命令或数据信息,而其他的未被寻址从机保持SM2=1并退出各自的中断服务程序。

这样,只有SM2=0的从机才能接收到主机发送来的数据信息,顺利实现地址帧和数据帧的分离。

被寻址从机在通信完成后重新使SM2=1,并退出中断服务程序,等待下次通信。

1.3 通信协议要实现单片机和PC机的正常通信,必须正确设定它们两者之间的通信方式,保证双方都用相同的波特率、起始位、停止位、奇偶校验位,并且要建立双方通信的应答信号。

单片机既可工作在同步移位寄存器方式下也可工作在UART(通用异步收发器)下。

串行口的通信方式是由特殊功能寄存器SCON来控制的。

其各控制定义如下:SM0,SM1:工作模式设定位;SM2:允许使用方法2、3多机通信控制位;RB8:接收数据第9位;TB8:发送数据第9位;TI:发送中断标志;RI:接收中断标志。

本文中工作方式为3,即9位UART定时器T1作为波特率发生器。

1)串行通信波特率为9600bps;2)帧格式为8位数据位,一位起始位,一位可编程的第9位(即发送和接收的地址/数据位的标志位),一位停止位;3)主机和从机遵循主从原则,主机用呼叫方式选择从机,数据在主机和从机之间双向传递,各从机之间的相互通信需通过主机作为中介;4)主从机之间还应传送一些供它们识别的命令和状态字,如以‘c’表示主机发送从机接收命令,以‘d’表示从机发送主机接收命令等。

2系统总体方案及硬件设计2.1总体设计方案多机通信模块共有四个基本模块组成,一是主单片机,主要功能是控制发送命令和接受从机发送的数据;二是从单片机1,负责采集温度数据,并发送到主机;三是从机2,功能作用同上,但也可以是其他数据,比如空气空气湿度、水分、相关气体含量等;四是显示模块,本设计采用数码管显示,数码管便宜简单、编程容易、易控制,同时硬件电路比较好设计等。

下图为总体设计框图:总体设计方案框图2.2硬件电路设计单片机最小系统有时钟电路、复位电路、电源电路组成,如下图(1)时钟电路:单片机工作时,是一条一条地从ROM中取指令,然后一步一步地执行。

单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。

—个机器周期包括12个时钟周期。

如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,它的一个机器周期是12×(1/12)us,也就是1us。

没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。

旁边的两个电容叫负载电容。

一般单片机的晶振工作于并联谐振状态,它是根据晶振厂家提供的晶振要求负载电容选值的。

晶振的频率就是在它提供的负载电容下测得的,能最大限度的保证频率值的误差。

两个电容的取值都是相同的,或者说相差不大,如果相差太大,容易造成谐振的不平衡,容易造成停振或者干脆不起振。

(2)复位电路:上电复位电路上图是用作上电复位用的,VCC一上电,由于电容两端电压不能突变,所以RST上为高电平,然后电容放电,RST就为低电平了,放电时间为1/(R10*C),这个时间应该大于三个晶振周期。

而那个开关的作用就是手动复位用的了。

(3)电源电路:电源电路见最小系统中的电源即是,较简单。

(4)显示电路:显示电路由四位共阴数码管组成,其中位选由单片机P2口提供,段选由P0(P0口已上拉电阻)口提供,其中位选处加限流电阻。

(5)温度采集电路:18B20传感器是独特的一线接口,只需要一条口线通信,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源测量温度范围为-55 °C至+125 ℃。

根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

(6)传输电路:上图为MAX232电平转换芯片电路,其主要特点是:1、符合所有的RS-232C技术标准。

2、只需要单一+5V电源供电。

3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-。

4、功耗低,典型供电电流5mA 。

5、内部集成2个RS-232C驱动器。

6、高集成度,片外最低只需4个电容即可工作。

由于本次通信是单片机之间的通信,距离较近,此次设计过程中没用,直接将主机的发射口接从机接收口,主机接收口连接从机发射口。

3软件设计3.1控制流程图多机温度检测系统设计流程图主机发送控制命令,确定由哪一个从机传送采集的温度数据,然后经过处理,显示在数码管上。

3.2串行口采集步骤主机发送信息,可以传送到各个从机或指定从机,各从机发送的信息只能被主机接收。

多机通信(关键是地址帧的识别)主机发送:地址帧、数据帧的鉴别是通过第9位数据确定:TB8=1,地址帧,TB8=0,数据帧;从机接收:各从机串行口工作在方式2、方式3下;多机通信标志SM2(SCON.5)=1;检查接收到的第9位RB8(SCON.2),当 RB8=1:地址帧,将地址装入SBUF ,置位RI ,发出接收中断请求;判断主机发送地址温度采集从机1处理传送主机显示温度温度采集从机2处理是否与本机相符,若相符,则将从机SM2清0(变成直通方式),准备接收其后传送来的数据。

RB8=0:数据帧,对SM2=1,RB8=0的从机,接收数据丢弃,而对SM2=0的从机:直通方式,不论RB8是0还是1,都将接受到的数据送SBUF,并发出中断请求。

多机通信的过程总结如下:(1)全部从机串行口工作方式初始化为2或3,置位SM2,允许中断;(2)主机置位TB8,发送要寻址的从机地址;(3)所有的从机均接收主机发送的地址,进入中断进行地址比较;(4)确认寻址从机,自身SM2清0,向主机返回地址供主机核对;(5)主机核对无误,向被寻址从机发送发送命令,通知从机进行一对一数据通信。

3.3软件流程图PROTEUS仿真从机1显示如下:按下开关后,主机发送从机A地址,从机A收到地址和自己相比较,如果正确,则回应主机,然后发送温度数据,如果不正确,则继续等待。

从机B温度显示如下:按下开关后,主机发送从机B地址,从机B收到地址和自己相比较,如果正确,则回应主机,然后发送温度数据,如果不正确,则继续等待。

课程设计体会通过本次课程设计,进一步熟悉了单片机编程原理和数字控制电路技术的相关知识,使自己所学的理论知识得到巩固,并充分认识到了自己所学的专业知识的实用性和重要性,同时对Proteuls操作更加熟练。

过程中遇到了一些困难,如:多机通信协议部分地址和数据的如何安排发送等,显示电路中的驱动是否需要驱动等问题。

经过查找相关资料和科技文献,和电子发烧友的同学们交流,一步步解决所遇到的困难。

但是在解决这些问题的过程无疑是对自己自身专业素质的一种提高,同时也加深自己对专业技术的认识。

这次课程设计,使我看到自身的不足和缺点,也使我学到了如何克服电子电路设计时的困难,希望今后类似这样的课程设计会更多,让我多一些机会锻炼自己的创新能力!参考文献:[1] 康华光.电子技术基础(模拟部分)(第五版).北京:高等教育出版社,2006.[2] 康华光.电子技术基础(数字部分)(第五版).北京:高等教育出版社,2006.[3]单片机原理及应用技术(第一版).中国矿业大学出版社,2008附件1:主机A源程序代码#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar ch[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; uchar ch1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; uchar Mode;uchar m1,m2,m3,m4;sbit P10 = P1^0;sbit P13 = P1^3;sbit P17 = P1^7;sbit P20 = P2^0;sbit P21 = P2^1;sbit P23 = P2^3;sbit P22 = P2^2;sbit P24 = P2^4;sbit P25 = P2^5;sbit key=P1^4;sbit key0=P1^2;void UART_init(){TMOD = 0x20;TH1 = 0xfd;TL1 = 0xfd;TR1 = 1;SCON = 0xd0;ES = 1;EX0 = 1;IT0 = 1; //INT0下跳触发EA = 1;TI = 0;}void DelayMs(int ms){uchar i;while(ms--)for(i=0; i<120; i++);}void putc_to_SerialPort(uchar c){SBUF = c;while(TI == 0);TI = 0;}void MasterControl(unsigned char Addr)//, unsigned char Comd) {TB8 = 1;putc_to_SerialPort(Addr);DelayMs(50);TB8 = 0;}void delay(int us){ int s;for ( s=0; s<us; s++);}void disp(){//int t1,t2, t0;P0 = 0xff;P0 = ch[m1];P23=0;delay(200);P23=1;P0 = 0xff;P0= ch1[m2];P22=0;delay(200);P22=1;P0 = 0xff;P0 = ch[m3];P24=0;delay(200);P24=1;P0 = 0xff;P0 = ch[0];P20=0;delay(200);P20=1;}com_int(void) interrupt 4{uchar i,k;ES=0;if(RI==1){RI = 0;if(SBUF=='b'){i=i+1;}elseif(SBUF=='d'){k=k+1;}else if(i==1){m1=0;m1=SBUF;i=i+1;}else if(i==2){m2=0;m2=SBUF;i=i+1;} else if(i==3){// i=0;m3=0;m3=SBUF;i=i+1;}else if(i==4){i=0;m4=0;m4=SBUF;}else if(k==1){m1=0;m1=SBUF;k=k+1;}else if(k==2){ m2=0;m2=SBUF;k=k+1;}else if(k==3){ // k=0;m3=0;m3=SBUF;k=k+1;}else if(k==4){ k=0;m4=0;m4=SBUF;}}ES=1;}void main(void){P1 = 0xff;UART_init();Mode = 0;while(1){if(key==0){DelayMs(35);if(key==0){key0==1;P10 = 1;MasterControl('b');//,'O');}}if(key0==0){DelayMs(35);if(key0==0){key==1;P13 = 1;MasterControl('c');}}disp();}}从机B程序代码:#include <reg51.h>#include"DS18B20.H"#include"intrins.h"#define uchar unsigned charuchar m1,m2,m3;uchar RecData;sbit P10 = P1^0;sbit P13 = P1^3;sbit P24 = P2^4;sbit P23 = P2^3;sbit P25 = P2^5;void UART_init(){TMOD = 0x21;TH1 = 0xfd;TL1 = 0xfd;TR1 = 1;SCON = 0xf0;ES = 1;PS = 1;EA = 1;}void DelayMs(int ms){uchar i;while(ms--)for(i=0; i<120; i++);}void delay1(uint ms){uchar y ;while(ms--){for(y = 0 ; y<250 ; y++){_nop_() ;_nop_() ;_nop_() ;_nop_() ;}}}void putc_to_SerialPort(uchar c) {SBUF = c;while(TI == 0);TI = 0;}void dispy(){// P0 = 0xff;P0 = ch[disp[0]];P23=0;delay(60);P23=1;// P0 = 0xff;P0= ch[disp[1]];P25=0;delay(60);P25=1;// P0 = 0xff;P0 = ch[disp[2]];P24=0;delay(60);P24=1;}com_int(void) interrupt 4{ES=0;if(RI){uchar i;RecData = SBUF;RI = 0;if(RB8 == 1){if(RecData == 'b'){SM2 = 0;putc_to_SerialPort('b');delay1(20);for(i=0;i<=3;i++){putc_to_SerialPort(disp[i]);delay1(300);}SM2=1;}else {SM2 = 1;}}}RI=0;TI=0;SM2=1;ES=1;}void main(void){P0 = 0xff;P1 = 0xff;UART_init();// dispy();while(1){dispy();ReadTemperature();}}其中18B20.H文件如下:#define uchar unsigned char#define uint unsigned intsbit DQ =P2^2; //定义通信端口uchar disp[3]; //待显示的数据,高2位整数部分,低2位小数部分//延时函数void delay(unsigned int i){while(i--);}//初始化函数Init_DS18B20(void){uchar x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20);}//读一个字节ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}//写一个字节WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}delay(4);}//读取温度void ReadTemperature(void){uchar a=0,temp;uchar b=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp=b;temp&=0xf0;if(temp==0) //正温{disp[3]=(b<<4)|(a>>4)/100;disp[2]=(((b<<4)|(a>>4))%100)/10;disp[1]=(((b<<4)|(a>>4))%100)%10;disp[0]=((a&0x0f)*625)/1000;}else //负温{if(a==0){a=~a+1;b=~b+1;}else{a=~a+1;b=~b;}disp[3]=22;disp[2]=((b<<4)|(a>>4))/10;disp[1]=((b<<4)|(a>>4))%10;disp[0]=((a&0x0f)*625)/1000;}}附件2:原理图。

相关文档
最新文档