基于超声波的液位测距系统设计_毕业设计论文(编辑修改稿)内容摘要:

2 0 u S 的 T T L检 测 P 2 . 4 口 电 平 变 化 , 为 高 电 平 时 启 动 T 0P 2 . 4 口 由 高 变 低 时 关 T 0计 算 距 离 S延 时数 码 管 显 示 结 果开 始 13 图 主程序流程图 子程序设计 温度采集程序设计 单片机上电复位后,需对传感器 DS18B20 执行复位命令并开始采集温度数值。 其工作流程大致如下:上电启动后通过单片机初始化 DS18B20,然后检测设备是否存在,若存在则发送 ROM 命令,然后发送温度转换命令获取温度值。 温度采集程序流程图如下图。 单 片 机 初 始 化 D S 1 8 B 2 0读 D S 1 8 B 2 0 序 列 号存 在发 送 跳 过 R O M 指 令发 送 温 度 转 换 指 令NY上 电 启 动显 示 温 度 图 温度采集程序流程图 主要程序如下: DQ BIT。 DS18B20 的数据口位 14 TPH DATA 20H。 存放温度值的高字节 TPL DATA 21H。 存放温度值的低字节 ORG 0 JMP Reset ORG 100H Reset: LCALL DS18B20_Reset。 设备复位 MOV A, 0CCH。 跳过 ROM 命令 LCALL DS18B20_WriteByte。 送出命令 MOV A, 044H。 开始转换 LCALL DS18B20_WriteByte。 送出命令 JNB DQ,$。 等待转换完成 LCALL DS18B20_Reset。 设备复位 MOV A, 0CCH。 跳过 ROM 命令 LCALL DS18B20_WriteByte。 送出命令 MOV A, 0BEH。 读暂存存储器 LCALL DS18B20_WriteByte。 送出命令 LCALL DS18B20_ReadByte。 读温度低字节 MOV TPL, A。 存储数据 LCALL DS18B20_ReadByte。 读温度高字节 MOV TPH, A。 存储数据 JMP $ ; ************************************** DelayXus: NOP NOP NOP NOP NOP NOP NOP NOP DJNZ R7, DelayXus RET ; ************************************** ;复位 DS18B20,并检测设备是否存在 ; ************************************** DS18B20_Reset: CLR DQ。 送出低电平复位信号 MOV R7, 240。 延时至少 480us LCALL DelayXus MOV R7, 240 LCALL DelayXus SETB D。 释放数据线 MOV R7, 60。 等待 60us LCALL DelayXus MOV C, DQ。 检测存在脉冲 15 MOV R7, 240。 等待设备释放数据线 LCALL DelayXus MOV R7, 180 LCALL DelayXus JC DS18B20_Reset。 若没有检测到设备 ,则继续等待 RET ; ************************************** ;从 DS18B20 读 1字节数据 ; ************************************** DS18B20_ReadByte: CLR A PUSH 0 MOV 0,8。 8 位计数器 ReadNext: CLR DQ。 开始时间片 MOV R7, 1。 延时等待 LCALL DelayXus SETB DQ。 准备接收 MOV R7, 1 LCALL DelayXus MOV C, DQ。 读取数据 RRC A MOV R7, 60。 等待时间片结束 LCALL DelayXus DJNZ 0, ReadNext POP 0 RET ; ************************************** ;向 DS18B20 写 1字节数据 ; ************************************** DS18B20_WriteByte: PUSH 0 MOV 0, 8。 8位计数器 WriteNext: CLR DQ。 开始时间片 MOV R7, 1。 延时等待 LCALL DelayXus RRC A。 输出数据 MOV DQ, C MOV R7, 60。 等待时间片结束 LCALL DelayXus SETB DQ。 准备送出下一位数据 MOV R7, 1 LCALL DelayXus DJNZ 0, WriteNext POP 0 RET END 16 速度查表程序 由超声波测距的温度补偿公式 V=+,建立了一张温度 —— V 的 修正值表格 TAB1。 结合实际情况, TAB1 包含了 0 度到 40度对应的速度修正值。 编程时将DS18B20 采集的温度值送到 R1 中,并将其作为查表偏移量进行查表,查表所 得结果仍放 R1 中。 部分程序如下: ORG 1000H START: MOV A, @R1 MOV DPTR, TAB1 MOVC A, @A+DPTR MOV R1, A TAB1: DB 014CH,014CH,014DH,014DH,014EH,014FH,014FH,0150H,0150H,0151H DB 0152H,0152H,0153H,0153H,0154H,0155H,0155H,0156H,0156H,0157H DB 0158H,0158H,0159H,0159H,015AH,015BH,015BH,015CH,015CH,015DH DB 015EH,015EH,015FH,015FH,0160H,0161H,0161H,0162H,0162H,0163H DB 0164H RET 距离计算程序 由于单片机选择 12MHz 的晶振,则计数器 T0 没计数一次就代表 1uS,设计时取14℃ 时的声速为 340m/s,则既可计算出距离: S=(Vt)/2=(17T0/1000)cm。 式子中 T0是一个 16 位的数由 TH0 和 TL0 两个 8 位组成,在程序中一个 8 位数和一个 16 位数相乘的原理如下示意图所示,其中 a、 b、 c 都是 8位无符号数。 除以 1000 用结果右移 10次来实现。 具体程序如下: a b c (bc)H (bc)L (ac)H (ac)L (ac)H [(bc)H+(ac)L] (bc)L WORK:MOV A, TH0 MOV R7, A MOV A, TL0 MOV R6, A 17 MOV R5, 11H MOV A, R6 MOV B, R5 MUL AB ; b c MOV @R2, A ;( bc) L ( R2) MOV R3, B ;( bc) H R3 MOV A, R7 MOV B, R5 MUL AB ; a c ADD A。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。