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

51 单片机的多机通信[摘要] 目前,在通信领域里,一对一的通信方式已经远远不能满足人们设计的需要,多机通信 已经成为通信控制领域的主流通信形式.通过它对MCS-51系列单片机多机通信的研 究,阐述了单片机多机通信方式及 iic 接口的原理,介绍了单片机 iic 接口多机通信的应用. [关键词] 51 单片机;iic 总线;多机通信;at24c02 存储器; rtx51 多任务操作系统1 引言单片机从根本上改变了传统的控制系统设计思想和设计方法, 以前必须由模拟电路和数 字电路实现的大部分功能,现在已经用单片机通过软件方法实现了。
这种用软件代替硬件 的控制技术也称控制技术,是对传统控制技术的一次革命。
矚慫润厲钐瘗睞枥。
在实际应用系统中,经常需要多个微处理机协调工作才能完成某个过程或任务。
本次 使用 rtx51 多任务操作系统进行研究,能方便地实现多机通讯功能,利用它构成各种分布 式系统。
由于单片机具有体积、成本低、运用灵活、易于产品化、它能方便地组成各种智 能化的控制设备和仪器,做到机电一体化,面向控制、能针对性地解决从简单到复杂的各 类控制任务,能获得最佳工作性能价格比,抗干扰能力强、适用温度范围特别广、在各种 恶劣的环境下都能可靠的工作,这是其他类似计算机无法比拟的,可以方便地实现多机和 分布式控制,使整个系统的效率和可靠性大为提高。
所以单片机及其多机通信技术在现实 生活中发挥着重要作用,研究它具有重要的意义。
聞創沟燴鐺險爱氇。
本课程设计论文对 51 系列单片机的多机通信原理作了全面介绍,详细论证单片机多机 通信系统的相关技术。
Rtx51 操作系统在 51 系列单片机上的使用,并对其相应的软件编程 技术进行了详细的论述。
研究了查询通信方式,并对其相应的软件编程技术进行了详细的 论述。
残骛楼諍锩瀨濟溆。
我所做的单片机多机通信,主要在电脑上仿真完成,个人完成电路的设计、连接、检 查、调试,再根据自己的电路和通信协议用 c 语言写发送和显示程序,然后加电调试,最 终达到了准确无误的发送和显示。
基于51单片机的双机串行通信课程设计-1000110061

基于51单片机的双机串行通信课程设计-1000110061基于AT89C51单片机的双机串行通信设计姓名:杨应伟学号:100110061专业:机械设计制造及其制动化班级:机电二班前言单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。
串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。
在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。
单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。
同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。
各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。
串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。
在通信过程中,使用通信协议进行通信。
在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。
单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。
同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。
各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。
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单片机实现一个基于串行通信的多机通信系统。
系统硬件设计如下: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单片机的多机通信系统设计

单片机多机通信系统一、引言随着单片机技术的不断发展,单片机的应用已经从单机向多机互联化方向发展。
单片机在实时数据采集和数据处理方面,有着成本低、能满足一般要求、开发周期短等优点,其在智能家居、计算机的网络通信与数据传输、工业控制自动化等方面有着广泛的应用。
本系统是面向智能家居应用而设计的。
在初期,采用红外无线通信方式,其传输距离短,适于一般家庭应用,且成本相对较低;待方案成熟、成本允许,可以改用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]](https://img.taocdn.com/s3/m/d061166a5acfa1c7aa00cc40.png)
一﹑数据通信协议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单片机计课程设计一、课程目标知识目标: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单片机课程设计一、课程目标知识目标: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课时,分组进行项目实践,培养学生的动手操作能力和团队协作能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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:原理图。