基于485总线的超声波的液位测量与控制系统毕业论文

上传人:s**** 文档编号:81452555 上传时间:2022-04-27 格式:DOC 页数:39 大小:389KB
收藏 版权申诉 举报 下载
基于485总线的超声波的液位测量与控制系统毕业论文_第1页
第1页 / 共39页
基于485总线的超声波的液位测量与控制系统毕业论文_第2页
第2页 / 共39页
基于485总线的超声波的液位测量与控制系统毕业论文_第3页
第3页 / 共39页
资源描述:

《基于485总线的超声波的液位测量与控制系统毕业论文》由会员分享,可在线阅读,更多相关《基于485总线的超声波的液位测量与控制系统毕业论文(39页珍藏版)》请在装配图网上搜索。

1、. . . . 基于485总线的超声波的液位测量与控制系统一、 设计任务和性能指标1.1 设计任务1、从机能够在现场对油罐或水罐的液位高度和现场的温度进行采集,能够基于液位的情况对油泵或水泵进行控制,能够把现场采集到的信息和设备的状态信息传送给上位机(485总线)。2、对上位机,要求能够动态显示不同485节点的液位、温度与泵的工作状态。能够方便的通过人机界面对通讯参数进行设置。3、基于上述要求,用protel完成硬件系统设计(主要是485节点的硬件部分,要考虑电磁兼容和抗干扰设计等容)。4、软件系统设计,要求学院能够熟练应用VB(或VC)、汇编、C语言等工具编写应用程序(从机数据采集、通讯、上

2、位机人机界面设计、通讯程序)。1.2性能指标液位显示:用三位LED数码管进行显示(单位是CM);在上位机上动态显示。环境温度:用四位数码管进行显示温度,单位是mm。测距围:20mm到 4000mm之间。键盘功能定义:1.当enter键按下之后,锁定led,使显示的数字固定,便于计数。cancel键按下之后,取消led锁定。2.按下up键,屏幕显示当前温度,按下cancel键后,恢复显示位移单片机接口: 5 P3.3为触发信号的输出TRIG, P3.2外部方式0,接回响信号ECHO, P3.4为RS-485的控制信号, P0.6接18b20的端口, P0.4为设备1的接口, P0.5为设备2的接

3、口。6 通信标准:转换部件把上位机的RS232转换成RS485,然后单片机接收到485电平之后,通过MAX485把485电平转换成TTL电平,从而实现了上位机和单片机的通信二、 设计方案按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、电源模块、显示模块、键扫描模块、超声波发射模块,超声波接收模块,温度补偿模块共七个模块组成。主控芯片使用51系列STC89C52单片机,该单片机工作性能稳定,同时也是在单片机课程设计中经常使用到的控制芯片。本设计在接受模块采用了由索尼公司生产的CX2016A红外接收芯片来实现超声波的接收。本大作业用的是HC-SR04超声波传感器,可提供20mm4000

4、mm的非接触式距离感测功能,测距精度可达3mm;模块包括超声波发射器、接收器与控制电路。工作电压为DC 5v,测量角度为15度,输入触发信号为10us的TTL脉冲,输出TTL电平信号,与射程成比例。实验证明其具有很高的灵敏度和较强的抗干扰能力。同时通过改变部分参数来改变接受电路的灵敏度和抗干扰能力,所以我们采用该芯片作为接收模块主要组成部分。HC-SR04超声波模块测距采用IO口TRIG触发测距,给至少10us的高电平信号,模块自动发送8个40khz的方波,自动检测是否有信号返回。有信号返回,则通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时

5、间*声速)/2;系统设计框图如图2-1超声波接收模块超声波发射模块单片机控制系统(STC89C52)显示模块键盘模块温度补偿模块(DS18B20)图2-1系统设计框图 三、系统硬件设计硬件电路的设计主要包括单片机系统与显示电路、温度补偿电路,超声波发射电路和超声波检测接收电路四部分。单片机采用STC89S52或其兼容系列。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P3.3端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS273驱动。3.1 单片机最小系统5l系列

6、单片机中典型芯片(STC89S52)采用40引脚双列直插封装(DIP)形式,部由CPU, ROM、 RAM、定时计数器TO和T1,4个8 位的全双工IO端 P0,P1,P2,P3,一个全双功串行通信口等组成。特别是该系列单片机片的Flash可编程、可擦除只读存储器(EPROM),使其在实际中有着十分广泛的用途,在便携式、省电与特殊信息保存的仪器和系统中更为有用。该系列单片机所组成的最小系统如图3-1所示。图3-1单片机最小系统原理图3.2 超声波发射电路超声波发射电路原理图如图2-2所示。单片机P1.0端口输出的40kHz的方波信号.HC-SR04超声波模块测距采用IO口TRIG触发测距,给至

7、少10us的高电平信号,模块自动发送8个40khz的方波,自动检测是否有信号返回。有信号返回,则通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速)/2。P1.0连接TRIG引脚,发送驱动信号,INT0连接ECHO引脚接收回响信号。VCC接+5V引脚,GND接地。图3-2 超声波发射电路原理图 3.3 超声波检测超声波通过ECHO接收超声波发生器产生的超声波的回响信号,然后接收引脚产生一段时间的高电平,然后这就是超声波从发送到接收到的时间。如果测出这段时间的长度,就可以求出具体的距离是多少。图3-3 超声波接收电路原理图 3.4 温度补

8、偿电路温度传感器使用了DSl8B20数字温度计提供可选择的12位(二进制)温度读数来指示周围环境的温度信息。经过单线接口DQ与单片机进行数据交互。从主机CPU到DSl8B20仅需一条数据接线(和地线)。DSl8B20的电源可以由数据线本身提供而不需要接外部电源。由于每一个DSl8B20在出厂时已经给定了唯一的序号因此任意多个DSl8B20可以存放在同一条单线总线上实现多点温度测量。温度传感器DSl8B20的测温围从-55摄 氏度到+125摄氏度增量值为0.5度可在l s(典型值)把温度变换成数字量,因此采用DS18B20实现温度补偿电路的设计。图3-4 温度补偿电路原理图 3.5 显示电路显示

9、电路主要由74ls273芯片驱动,用PNPC8550三级管进行位选,七段共阳极数码管显示,硬件电路图如图3-5所示:图3-5 显示电路原理图 39 / 39四. 系统软件设计4.1 主程序设计主程序中包括温度补偿子程序,计算子程序,显示子程序,键盘扫描程序,测距程序,校正偏差程序:在主程序设计中,我们采用了汇编编程。首先进行系统初始化。然后键盘扫描,判断那个键按下,然后执行相应的操作。第三,执行测距程序,测得当前的距离对应的时间,然后通过时间*速度=位移,求出相应的距离,然后放在显示缓冲区(数码管)显示。第四,复位18b20,然后经过一系列过程测得当前的温度。第五,因为超声波在空气中的传播速度

10、跟温度有关,所以根据第四步得到的温度进行温度校正。最后,运行显示程序,显示得到的距离。;*主程序*MAIN:MOV SP,#70HCLR P3.2 ;与超声波传感器有关的接口CLR P1.0MOV A,#00HMOV BUFGAO,A MOV BUF0,#00H ;最后温度 MOV BUF1,A MOV BUF2,A MOV BUF3,A CLR FLAG_SERIAL CLR FLAG03 CLR FLAG07 CLR FLAG11 CLR FLAG13 CLR FLAG14 CLR FLAG15 MOV KEY_NUM,#00H CLR FLAG3 ;正or负标志位 CLR FLAG1 ;

11、初始化标志 SETB EA ;开总中断 SETB ET0 ;T0 MOV TMOD,#21H ;T0方式1,T1方式2 MOV TL1,#0FDH ;设置T1的波特率 MOV TH1,#0FDH SETB TR1 MOV SCON,#50H ;方式1,REN=1允许接受; MOV SCON,#0F0H SETB ES CLR P3.4 ;控制RS_485的控制引脚,使RS-485处于接收状态 MOV TL0,#00H MOV TH0,#00H MOV TEMP,#2LOOP:LCALL KEY_SCAN;*以下为标志位定义*;判断各标志位是否为1,然后执行相应的动作 JNB FLAG_SERI

12、AL,C0 ; 串行中断标志位如果为1,则把当前求出的位移,一定时间往上位机发送一次。C0: JNB FLAG14,C1 ;cancel键 CLR FLAG03 CLR FLAG07 CLR FLAG11 CLR FLAG13 CLR FLAG14 CLR FLAG15C1: JNB FLAG03,C2 ;up键 LJMP DDDDC2: JNB FLAG07,C3 ;down键C3: JNB FLAG11,C4 ;setup键C4: JNB FLAG13,C5 ;偏移量为十三的,键按下,动作,小数点C5: JNB FLAG15,C6 ;enter键 LJMP BBBBC6: LCALL DI

13、SPLAY DJNZ TEMP,LOOP LCALL MEASURE ;测得时间 LCALL CHULI ;时间*速度=位移 LCALL JIAOZHENG ;校正偏差 LCALL BTOD ;把二进制转换成十进制,然后放在显示区显示; LCALL DISPLAY LCALL DISPLAYDDDD:LCALL INITIAL ;复位程序 FLAG1,AAAA ;复位成功跳转 RETAAAA: LCALL TEMPERATURE ;复位成功跳转 JNB FLAG03,CCCC ;显示温度 MOV A,BUF0 ;取出温度 MOV B,#100 DIV AB MOV BUF1,A ;BUF1是第

14、四位置上的led,最右边的 MOV A,B MOV B,#10 DIV AB MOV BUF2,A ;BUF2是第三位置上的led,倒数第二位 MOV BUF3,B ;BUF3是第二位置上的led,第二位 CCCC:LCALL DISPLAY LCALL GET_CURRENT_V BBBB:LCALL DISPLAY LCALL DISPLAY MOV TEMP,#0;100 LJMP LOOP4.2 温度补偿子程序图4-2 DS18B20时序图 DS18B20正常工作需要严格的工作时序,操作起来很复杂,图4-2给出的是DS18B20的时序图,其控制程序如下:TEMP: SETB DQ NO

15、P CLR DQ MOV R0,#0FBH TSR1: DJNZ R0,TSR1 SETB DQ MOV R0,#25H ; TSR2: JNB DQ TSR3 DJNZ R0,TSR2 ; TSR3: SETB FLAG1 CLR P2.0 AJMP TSR5 TSR4: CLR FLAG1 LJMP TSR7 TSR5: MOV R0,#06BH TSR6: DJNZ R0,TSR6 TSR7:SETB DQ RET*读转换后的温度值*GET_TEMPER: SETB DQ LCALL TEMP FLAG1,TSS2 RET TSS2:MOVA,#0CCH LCALL WRITE_18B2

16、0 MOVA,#44H LCALL WRITE_18B20 LCALL TEMP MOV A,#0CCH LCALL WRITE_18B20 MOV A,#0BEH ; LCALL WRITE_18B20 LCALL READ2_18B20 ;RET*写ds18b20汇编程序* WRITE_18B20: MOV R2,#8 CLR C WR1:CLR DQ MOV R3,#6 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET ; *读18B20程序,读出两个字节的温度* READ2

17、_18B20: MOV R4,#2 ; MOV R1,#29H RE00: MOV R2,#8 RE01: CLR C SETB C NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00 RET*读出的温度进行数据转换*CHANGE: MOV A,29H ; MOVC,28H.0 RRC A MOV C,28H.1 RRC A MOV C,28H.2 RRC A MOV C,28H.3

18、 RRC A MOV 29H,A4.3 测距程序设计HC-SR04超声波模块测距采用IO口TRIG触发测距,给至少10us的高电平信号,模块自动发送8个40khz的方波,自动检测是否有信号返回。有信号返回,则通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速)/2 程序如下: ;*测距程序*;入口信息:无;出口信息:位移mm为单位,位于R2,R3中;影响资源:R1 R7MEASURE: CLR P1.0 ;p1.0是trig口 SETB P1.0 MOV R0,#06H ;等待大于10us DJNZ R0,$ CLR P1.0A1: M

19、OV C,P3.2 JNC A1 ;等待接收回响信号;*计时程序*TIMER: SETB TR0 ;外部中断0,计算回响信号的时间进行测距A2: MOV C,P3.2 ;p3.2是echo信号,等待端口变为低电平 JC A2 CLR TR0 CLR EX0 MOV A,TH0 ;时间的高位放在60H MOV 60H,A MOV A,TL0 ;时间的低位放在61H MOV 61H,A MOV TL0,#00H MOV TH0,#00H RET4.4 单片机编程中问题处理1. 在编程序时最好直接用medwin编程。否则,有的逗号分号medwin不能够识别,会使程序产生错误的判断。直接用仿真软件会避

20、免这些错误。2. 在位运算中,从20H,到2FH这16个单元,每个存单元对应8个位地址。从20H单元的D0位开始,至2FH单元的D7位,对应的地址依次为00H到7FH,即有:位地址=(单元地址-20H)*8+位。如22H单元第零位的位地址为:位地址=(22H-20H)*8+0=10H。在程序中会定义许多标志位,这就用到了定义位,必须了解上面的位操作才能够正确的分配位地址。然后正确定义位,然后用位操作完成相应的操作,因为汇编语言中的位操作语句很多,用起来很方便。3.在单片机编程中,会有很多函数需要编写,在编写的时候最好在函数的头部写明白入口的那几个寄存器,有什么作用,这个函数有什么作用等,让自己

21、以后一看这个函数的开始就能够知道这个函数具体干什么的,方面自己以后在修改或者调用函数。并且,在汇编中调用函数的时候很多需要的量都是通过先前的寄存器传入函数的,所以一定要标记各个寄存器作用。养成良好的编程习惯。以前,编程不太注意这个,然后就是什么容都写在主函数中,看起来很乱,但是这次编程写的比较好,具体见后面的程序清单。五. 上位机程序设计在上位机中主要采用的是visual basic 编程,通过mscomm控件把下位机测得的距离和温度传输到电脑中进行动态显示,并且通过上位机(电脑)控制着单片机的设备的起停。以与监控单片机的工作情况。5.1 Mscomm 控件编程 Private Sub MSC

22、omm1_OnComm()Dim i As IntegerDim outbte(0) As Byte 定义为byte型0255Dim indata As VariantDim z1 As IntegerDim z2 As IntegerDim z3 As IntegerDim bte(0 To 5) As Byte If flag_commandword = True Then 保证以下程序只执行一次 If flag_send = True Then If Val(Text9.Text) = &HB1 Then Timer1.Interval = 0 关闭定时器1,避免时序冲突,影响单片机活动

23、 out(0) = Val(Text8.Text) out(1) = &HA1 out(2) = &HB1 接受温度 For i = 0 To 2 outbte(0) = out(i) MSComm1.OutBufferCount = 0 发送缓冲区清零 MSComm1.Output = outbte 把num发送出去 Next i Timer1.Interval = 500 开放定时器1,使定时器继续发送上位机命令 flag_commandword = False End If End IfEnd IfSelect Case MSComm1 mEvent Case comEvReceive

24、indata = MSComm1.Input bte(0) = AscB(indata) bte(1) = AscB(Mid(indata, 2, 1)If out(2) &HB1 Then 如果上位机要求停止接受温度是,关闭发送标志位 Shape14.Width = 0 把温度显示的进度条宽度变为0 Text2.Text = 清空温度显示 flag_send = FalseEnd IfIf flag_send = True Then 如果发送键按下之后,则接收后两个字节 If out(2) = &HB1 Then bte(2) = AscB(Mid(indata, 3, 1) bte(3)

25、= AscB(Mid(indata, 4, 1) End IfEnd If5.2 Visual Bisic界面5.3 Visual Basic 程序问题处理1.在上位机编程中用到了延时程序,由于单片机中用到的是软件延时,但是在vb中很难实现。于是用下面一种方法进行延时,既能够达到延时的目的,又能够不耽误其他的程序执行。Private Declare Function timeGetTime Lib winmm.dll () As LongPublic Function YanShi(HaoMiao As Double) 延时子程序,以毫秒为单位,调用时yanshi 1000,就是延时1sDim

26、 t1t1 = timeGetTimeWhile (timeGetTime - t1 HaoMiao) DoEventsWendEnd Function2.当在画动态显示液位的时候要画液罐,而且要形象立体的展现在面前,我画成双层的,外面是罐壁,里面是显示具体的液位,这个灵感来源于手机上的电池中的电量显示。具体形状见上图的总体vb界面。3.在控制单片机工作的时间上,由于单片机只有两个定时器,一个用来产生波特率,另一个用来测得echo返回的高电平时间。因此不够用,我就把启动定时设备的时间设置在上位机上,用上位机的定时器来进行定时。然后完成相应的动作。4.当然还遇到了很多问题大多是借助了MSDN解决

27、的,尤其是对许多函数不太了解的时候,通常用“帮助”然后查询具体的参数是怎么样定义的,这个很有用,再就是在函数出错时,MSDN会直接给出错误原因并且有解决的建议,调试程序的时候有了它真的很方便。所以学会用它,对自己的vb学习是很有帮助的。 六. 调试与性能分析6.1 调试步骤调试的时候,我是调试单片机的程序,因为单片机测距是主要实现的功能,所以先要调试,根据显示程序的显示结果进行调试,这样可以更快的调试出程序。把各部分程序调试成功之后然后合在一起,再看看有没有互相矛盾的地方,这样单片机的程序就调试完了。上位机的调试也是重点,关键在mscomm控件处的调试。这个控件负责串行通信是否成功,关系到单片

28、机测得的温度和距离能否传到上位机,上位机的控制命令字能否传到单片机,即上位机能否控制单片机的设备。这个地方处理完后,在调试与温度,液位的显示相关的程序,因为它们是一些辅助的功能,为了更好的实现人机交互,所以也是重要的环节,在这也要引起足够的重视。6.2 性能分析虽然结果和预想的有很大的差距,但总体来说已经基本上达到了要求,刚开始没有矫正的时候,1m 误差大约有10cm,但是经过校正之后,误差在2mm左右,基本上达到要求。测试的距离也没有厂家说的那么远,不能达到4m,造成这种原因我想有以下几个方面:1.由于我们采用的是11.0592MHZ的晶振,理论上是按照12MHZ的晶振计算的,所以对系统造成

29、了一定的误差。2.由于温度传感器DS18B20距离单片机较近,所采集到的温度严重受到单片机的影响,造成系统误差。6.3 系统电平标准转化1.本大作业中用到了RS-485通信,用的就是RS-485电平,信号传播距离远。单片机的TTL电平经过单片机电路板上的MAX485把电平转化成485电平,然后通过网线把单片机 和上位机连接在一起。在网线的另一端接上一个RS-485转RS-232的接口器件,把电平转换成计算机用的电平(RS-232电平)标准,实现单片机与计算机的通信过程。七. 心得体会在这次完成大作业的过程中,我感觉受益匪浅,尤其是对单片机的理解上,更是上了一层楼,我觉得单片机如果你给了他完美的

30、程序他就会像人一样去思考去工作,很是智能的去完成任务。现在可以做一个比喻,我们平时的许多行为在单片机上都有实现。比如我们现在正在工作,突然肚子饿了,我们就回去吃饭。在这个过程中,就像单片机的一个中断处理程序,产生了一个部中断,像单片机的定时器产生的中断一样是来自部的。在这个中断程序中单片机来完成“吃饭”这件事情。刚想要去吃饭,一看外面下雨了,然后我们就会带上伞。在单片机中,这有对应着外部中断,比如INT0,INT1一样,中断时来自外部的情况,这样单片机就会通过中断处理程序来完成带伞这个动作。另外还有串行通信,在平时我们要通过手机接收很多信息,当手机接收到短信时会有提示音或者是震动,这样就会引起

31、我们的注意,然后就引发串行中断,我们看短信回短信的过程就完成了单片机的串行中断中的接受和发送数据的过程。在完成大作业期间,必须自己设计整个系统,根据系统资源整体完成系统的资源分配。比如单片机的定时器不够用,那么有很多定时就必须放在上位机上完成。还有IO口的安排上,也是不能够重复的。因为系统比较大,所以有很多外部设备需要接在IO口上,这样就必须分配好,具体的分配情况要做出详细的说明,以便以后阅读或者有新的功能需要添加的时候,知道哪个口已经用过哪个口没有用过,可以很快的选择好,这样以后功能扩展就会很轻松。现在感觉编程序容易调试程序难,编程序就是按照自己的想法完成编写,但是有时候会出现语法或者逻辑上

32、的错误,这样就要调试,很多情况要都要花上编程的几倍的时间来完成调试工作。到现在我觉得,编程高手不但要编程有思路并且调试要快,这样才能在单位时间完成更多事情。还有,就是在接触新事物的时候不要想当然,要看具体的使用说明,然后在进行操作或者说应用。在RS-485这个地方我就是一开始没有看说明,具体怎么用不知道我就开始接上线开始调试看看能不能通信成功,后来不行,然后才看的说明书,看后我大吃一惊,原来就是一个接口的问题,设置一个接口就解决掉了这个问题,但是当时只是感觉RS-485跟RS-232一样,就因为这个当时浪费了很长的时间。做大作业还有一点很关键,就是,有的知识没有熟悉的情况下怎么处理,我们现在的

33、信息都是全部公开的,可以通过书籍、网络,等等来查找你需要的知识。比如当时要想在vb上实现延时功能,然后当时就是想了很多办法都没有实现,后来在网上看了一篇文章介绍到vb延时,然后这才解决了这个问题。大作业不像是考试,不然查阅资料,不让讨论,其实现实工作中肯定不能像考试那样来完成一件事情。所以,我们要学会借助于身边的资源,然后完成自己的任务,这才是明智的,古人说的好,“君子性非异也,善假于物也”。说的确实有道理。参考文献1 徐维祥、旭敏. 单片微型机原理与应用. :理工大学,19962 光飞、楼然苗、胡佳文、象佐. 单片机课程设计与实例指导. : 航空航天大学,2004 3 余永权. 89系列FL

34、ASH单片机原理与应用. :电子工业,20024 群芳,黄建. 单片机微型计算机与接口技术. :电子工业,20015 楼然苗、光飞. 51系列单片机设计实例. :航空航天大学,20036 王守中 51单片机开发入门与典型实例. :人民邮电,2009附录1 单片机程序清单VOUT EQU P1.0TEMP1 EQU 36HTEP1 EQU 37HDQ EQU P1.7FLAG1 EQU 38HORG 0000HJMP STARTORG 0003HJMP PINT0;*主程序*START:MOV P3,0FFHMOV P0,0FFHMOV P1,0FFHMOV P2,0FFHMOV TMOD,#0

35、1HMOV TH0,#00HMOV TL0,#00HCLR IE0SETB PX0SETB EASETB EX0CLR IT0MOV R4,#4SETB TR0k: CPL P1.0NOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZ R4,KJNB IE0,$LCALL TEMPLCALL GET_TEMPERLCALL CHANGELCALL WORKLCALL DISPLAY1LJMP STARTPINT0:CLR TR0CLR EX0MOV 30H,TL0MOV 31H,TH0RETITEMP: SETB DQNOPCLR DQMOV R0,#0FBH;给延时程序赋初值TSR

36、1: DJNZ R0,TSR1;延时SETB DQMOV R0,#25H ;给延时程序赋初值TSR2: JNB DQ ,TSR3 ; S18B20是否存在,存在就跳转到TSR3DJNZ R0,TSR2 ;不存在等待TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在;CLR P2.0 ;二极管指示AJMP TSR5TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,TSR6 ;延时TSR7:SETB DQ ;表明不存在RET*读转换后的温度值*GET_TEMPER:SETB DQLCALL TEMP FLAG1,TSS

37、2RET ;若不存在则返回TSS2: MOV A,#0CCH ;跳过ROMLCALL WRITE_18B20MOV A,#44H;发出温度转换命令LCALL WRITE_18B20LCALL TEMPMOV A,#0CCH ;跳过ROMLCALL WRITE_18B20MOV A,#0BEH ;发出读温度换命令LCALL WRITE_18B20LCALL READ2_18B20 ;读两个字节的温度RET; *写ds18b20汇编程序*WRITE_18B20:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ

38、 R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET; *读18B20程序,读出两个字节的温度*READ2_18B20:MOV R4,#2 ;低位存在29 H,高位存在28HMOV R1,#29HRE00: MOV R2,#8RE01: CLR CSETB CNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00RET; *读出的温度进行数据转换*CHANGE: MOV A,29H ;MOV C,2

39、8H.0 ;将28H中的最低位移入CRRC AMOV C,28H.1RRC AMOV C,28H.2RRC AMOV C,28H.3RRC AMOV 29H,ALCALL CONVERSERET;* *DISPLAY*CONVERSE: MOV A,29H;将29H中的十六进制数转换成10进制MOV DPTR,#TABLEMOVC A,A+DPTRMOV TEMP1,ATABLE: DB 165D,165D,165D,166D,166D,166D,167D,167D,167D,167DDB 168D,168D,168D,169D,169D,169D,170D,170D,170D,171DDB

40、171D,171D,172D,172D,172D,173D,173D,173D,174D,174DDB 174D,174D,175D,175D,175DRET;* *计算子程序*WORK: ; MOV PSW, #18h ;选择3区R系列寄存器MOV R3, 31HMOV R2, 30HMOV R1, #00DMOV R0, TEMP1LCALL MUL2BY2MOV R3, #27HMOV R2, #10HLCALL DIV4BY2LCALL HBCDRET*两字节无符号数乘法程序*; R7R6R5R4 = R3R2 * R1R0 速度X时间/2MUL2BY2: CLR AMOV R7, A

41、MOV R6, AMOV R5, AMOV R4, AMOV 46H, #10HMULLOOP1: CLR CMOV A, R4RLC AMOV R4, AMOV A, R5RLC AMOV R5, AMOV A, R6RLC AMOV R6, AMOV A, R7RLC AMOV R7, AMOV A, R0RLC AMOV R0, AMOV A, R1RLC AMOV R1, AJNC MULLOOP2MOV A, R4ADD A, R2MOV R4, AMOV A, R5ADDC A, R3MOV R5, AMOV A, R6ADDC A, #00HMOV R6, AMOV A, R7A

42、DDC A, #00HMOV R7, AMULLOOP2: DJNZ 46H, MULLOOP1RET* 四字节/两字节无符号数除法程序 *;R7R6R5R4/R3R2=R7R6R5R4(商).R1R0(余数)/10000DIV4BY2: MOV 46H, #20HMOV R0, #00HMOV R1, #00HDIVLOOP1: MOV A, R4RLC AMOV R4, AMOV A, R5RLC AMOV R5, AMOV A, R6RLC AMOV R6, AMOV A, R7RLC AMOV R7, AMOV A, R0RLC AMOV R0, AMOV A, R1RLC AMOV

43、R1, ACLR CMOV A, R0SUBB A, R2MOV B, AMOV A, R1SUBB A, R3JC DIVLOOP2MOV R0, BMOV R1, ADIVLOOP2: CPL CDJNZ 46H, DIVLOOP1MOV A, R4RLC AMOV R4, AMOV A, R5RLC AMOV R5, AMOV A, R6RLC AMOV R6, AMOV A, R7RLC AMOV R7, ARET;* ;十六进制双字节转三字节十进制 ;* ;HBCD:MOV A,R5MOV R6,AMOV A,R4MOV R7,AHB2: CLR AMOV R3,AMOV R4,AM

44、OV R5,AMOV R2,#10HHB3: MOV A,R7RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3MOV R3,ADJNZ R2,HB3MOV A,R5ANL A,#0FHMOV 40H,AMOV A,R5ANL A,#0F0HSWAP AMOV 41H,AMOV A,R4MOV 42H,ARET;*; 显示子程序;*DISPLAY1:MOV DPTR,#TABLE1MOV R0,#4DP1:MOV R1,#250

45、LOOP:MOV A,40H ;显示低位MOVC A,A+DPTRMOV P0,ACLR P1.4SETB P1.4CLR P1.4CLR P2.5ACALL DELAY1SETB P2.5MOV A,41H;显示中位MOVC A,A+DPTRMOV P0,ASETB P1.4CLR P1.4CLR P2.6ACALL DELAY1SETB P2.6MOV A,42H ;显示高位JZ LMOVC A,A+DPTRMOV P0,ASETB P1.4CLR P1.4CLR P2.7L:ACALL DELAY1SETB P2.7DJNZ R1,LOOPDJNZ R0,DP1RETTABLE1:DB

46、0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90HDELAY1:MOV R7,#80DJNZ R7,$RETDELAY:MOV R5,#100D: MOV R6,#150DJNZ R6,$DJNZ R5,DRETEND;*串行通信中断*;入口信息:显示缓冲区个位,BUFGAO,BUF1,BUF2,BUF3;出口信息:当上位机要本机发送数据,则置位FLAG_SERIAL;影响资源:R0,A,B,;功能描述;完成接收数据,看是否本机地址,是的话,接收;四个控制数据:第一个是否发送高度,第二是否发送温度,第三开始设备1?第四开始设备2?;如果都是true,则

47、发送高度两个高度字节,两个温度字节,并执行相应的操作SERIAL_COMMUNICATION: PUSH PSW PUSH ACC CLR EA JNB RI,$ NOP NOP NOP NOP NOP CLR RI MOV A,SBUF CJNE A,#02,CHUQU ;判断是否是本机地址,CHUQU:出去 LJMP JIXU ;JIXU:继续CHUQU:CLR P3.4 POP ACC POP PSW SETB EA RETIJIXU: MOV R0,#02H MOV R1,#50HXUNHUAN: ;接收四个控制数据 JNB RI,$CLR RIMOV A,SBUFMOV R1,AIN

48、C R1; DEC R0;真不应该多了一条语句导致一晚上浪费了,哈哈,多亏看出来了,哈哈DJNZ R0,XUNHUAN ;循环;对接收的控制字进行处理,完成相应的操作MOV A,CTRL0 ;第一个控制字,ctrl0 CJNE A,#0A0H,NEXT00NEXT00: CJNE A,#0A1H,NEXT11 ;发送距离,两个字节 SETB P3.4 ;RS_485的控制位,放成高电平,发送状态 MOV A,BUFGAO ;位移最高位,在显示器上的 MOV B,#10 MUL AB MOV R0,BUF1 ;次高位 ADDC A,R0 MOV SBUF,A JNB TI,$ CLR TI MO

49、V A,BUF2 ;第三位 MOV B,#10 MUL AB MOV R0,BUF3 ;第四位 ADDC A,R0 MOV SBUF,A JNB TI,$ CLR TI NEXT11: MOV A,CTRL1 ;第二个控制字,上位机要求:关闭发送温度时 CJNE A,#0B0H,NEXT22 MOV A,#00H MOV SBUF,A JNB TI,$ CLR TI MOV A,#00H MOV SBUF,A JNB TI,$ CLR TINEXT22: ;上位机要求发送温度时 CJNE A,#0B1H,NEXT33 ;发送温度,两个字节,一个是正负标志,一个是温度BUF0 JNB FLAG3,NEXT333 ;FLAG3是正负标志位 MOV A,#01H ;负数发送1 MOV SBUF,A JNB TI,$ CLR TI LJMP NEXT3333NEXT333: MOV A,#0 ;正数发送0 MOV SBUF,A JNB TI,$

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!