超声波程序.doc_第1页
超声波程序.doc_第2页
超声波程序.doc_第3页
超声波程序.doc_第4页
超声波程序.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

; 超声波测距汇编程序;*;端口说明:P1.0、P1.140K方波输出(一高一低);工作说明:单片机接收到外部中断1后进行测距并将数据(BCD码)发回计算机;F0:标志位;T0:产生40K方波;T1::计时器; :串口设置;INT0:接收回波;INT1:测距控制;*程序说明*;CS数据;CZ超时、;DIVD两字节无符号除法;DL500US 500um延时;DL350US 350um延时;DL500MS 500ms延时;FS超声波发射;HB2 十六进制转二进制;MULD两字节无符号乘法;START 主程序;TZ -40KHz超声波调制;WORK数据处理;ZW置位;* ORG 00H JMP START ;转入主程序 ORG 03H JMP WORK ;接收处理 ORG 13H JMP ZW ;置标志位 ORG 0BH JMP TZ ;40KHz超声波调制 ORG 1BH JMP CZ ;测距超时,重置;*主程序*START: SETB EA ;开总中断 CLR EX0 SETB EX1 SETB PT1 ;T1、INT0拥有高优先级 SETB PX0W: JB F0,FS ;检测标志位,等待中断 JMP W;*超声波发射接收子程序*FS: CLR EX1 ;防止按键抖动引起误操作 CLR F0 ;清标志位 CLR EX0 ;关外部中断,防止盲区信号干扰 CALL DL500MS ;等待,防止按键抖动引起误操作 MOV TMOD,#12H ;00010010 定时器0:模式2 定时器2:模式1 MOV TH0,#244 ;41.67MHz MOV TL0,#244 MOV TH1,#0 ;设定计数器初始值 MOV TL1,#0 SETB P1.0 ;设置方波初始状态 CLR P1.1 SETB ET0 ;开定时器0中断 SETB ET1 ;开定时器1中断 SETB TR0 ;开定时器 SETB TR1 ;开始计时 CALL DL500US ;发射0.5ms CLR TR0 ;关T0,停止发射 CLR P1.0 ;P1.0、P1.1同电位,保护换能器 CLR P1.1 CALL DL350US ;处理盲区 SETB EX0 ;允许外部中断 JMP W ;返回;*传输数据程序*;向计算机发送数据CS: MOV TMOD,#20H ;设置定时器1为方式2 (自动重载 8位) MOV TL1,#0F3H ;设置预置值 波特率:4800 MOV TH1,#0F3H ;重载值 SETB TR1 ;启动定时器1 MOV SCON,#50H ;串行口初始化 MOV PCON,#80H ;波特率设置 MOV A,R4 ;发送R4 MOV SBUF,A JNB TI,$ ;等待发送 CLR TI ;清“发送完成”标志位 MOV A,R5 ;发送R5 MOV SBUF,A JNB TI,$ CLR TI CLR TR1 ;防止连续重置而进入死循环 CLR TF1 ;清除已有的TR中断标志 CLR TF0 SETB EX1 CLR EX0 ;防止重置后再次收到杂波而进入死循环 SETB EA ;开总中断 RET ;*重置子程序*;T1溢出,发送FFFFCZ: CLR TR1 ;防止连续重置而进入死循环 MOV R4,#0FFH ;R4=FF MOV R5,#0FFH ;R5=FF CALL CS ;发送 RETI;*T0中断*;调制40K方波TZ: CPL P1.0 ;P1.0电位取反 CPL P1.1 RETI;*置位子程序*ZW: SETB F0 ;置标志位PSW.5(用户可使用的通用标志位) RETI;*数据处理子程序*;提取时间数据并进行处理: 距离=时间1063402100=时间171000 (cm)WORK: CLR TR1 ;关计时器 CLR EX0 ;防止回波干扰下一次测距 CLR EA ;关中断 MOV R2,TH1 ;提取数据 MOV R3,TL1 MOV A,#00H ;ACC、R4、R5清0 MOV R4,A MOV R5,A MOV R6,A ;R6、R7存乘数:17 MOV R7,#11H CALL MULD ;17 MOV R6,#03H ;R6、R7存除数:1000 MOV R7,#0E8H CALL DIVD ;1000 MOV A,R2 ;将R2数据给R6 MOV R6,A MOV A,R3 ;将R3数据给R7 MOV R7,A CALL HB2 ;将十六进制结果转换为BCD码 CALL CS ;发送数据处理结果R4、R5 RETI;*350us延时程序*;处理测距盲区:根据换能器的性能而异 DL350US: MOV R5,#0AFHD:DJNZ R5,D RET;*500us延时程序*;发射大约20个超声波脉冲DL500US: MOV R5,#0FAHL:DJNZ R5,L RET ;*500ms延时程序*;消除按键抖动影响 DL500MS: MOV R5,#04H T:MOV R6,#0F4H T2:MOV R7,#0FFH DJNZ R7,$ DJNZ R6,T2 DJNZ R5,T RET ;*双字节二进制无符号数乘法* ;入口条件:被乘数在R2、R3中,乘数在R6、R7中。 ;出口信息:乘积在R2、R3、R4、R5中。 ;影响资源:PSW、A、B、R2R7 堆栈需求: 字节MULD: MOV A,R3 ;计算R3乘R7 R2 R3 MOV B,R7 ; MUL AB ; R6 R7 MOV R4,B ;暂存部分积 - MOV R5,A ; H1 L1 R3R7 MOV A,R3 ;计算R3乘R6 MOV B,R6 ; H2 L2 R2R7 MUL AB ; ADD A,R4 ;累加部分积 H3 L3 R3R6 MOV R4,A ; CLR A ; H4 L4 R2R6 ADDC A,B ; - MOV R3,A ; R2 R3 R4 R5 MOV A,R2 ;计算R2乘R7 MOV B,R7 MUL AB ADD A,R4 ;累加部分积 MOV R4,A MOV A,R3 ADDC A,B MOV R3,A CLR A RLC A XCH A,R2 ;计算R2乘R6 MOV B,R6 MUL AB ADD A,R3 ;累加部分积 MOV R3,A MOV A,R2 ADDC A,B MOV R2,A RET ;*双字节二进制无符号数除法* ;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。 ;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。 ;影响资源:PSW、A、B、R1R7 堆栈需求: 字节 DIVD: CLR C ;比较被除数和除数 MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC D1 SETB OV ;溢出 RET D1:MOV B,#10H ;计算双字节商 D2:CLR C ;部分商和余数同时左移一位 MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A XCH A,R2 RLC A XCH A,R2 MOV F0,C ;保存溢出位 CLR C SUBB A,R7 ;计算(R2R3R6R7) MOV R1,A MOV A,R2 SUBB A,R6 ANL C,/F0 ;结果判断 JC D3 MOV R2,A ;够减,存放新的余数 MOV A,R1 MOV R3,A INC R5 ;商的低位置一 D3:DJNZ B,D2 ;计算完十六位商(R4R5) MOV A,R4 ;将商移到R2R3中 MOV R2,A MOV A,R5 MOV R3,A CLR OV ;设立成功标志 RET ;*双字节十六进制整数转换成双字节码整数* ;入口条件:待转换的双字节十六进制整数在R6、R7中 ;出口信息:转换后的三字节码整数在R3、R4、R5中,因为超声波测距一般不会超过10米,在此只取R4、R5;影响资源:PSW、A、R2R7 堆栈需求: 字节 HB2: CLR A ;码初始化 MOV R3,A MOV R4,A MOV R5,A MOV R2,#10H ;转换双字节十六进制整数 H:MOV A,R7 ;从高端移出待转换数的一位到CY中 RLC A MOV R7,A MOV A,R6

温馨提示

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

评论

0/150

提交评论