找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 130|回复: 0
打印 上一主题 下一主题
收起左侧

单片机汇编语言超声波测距报警程序和Proteus仿真

[复制链接]
跳转到指定楼层
楼主
汇编程序编写,分享给各位
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1.         RS BIT P1.0  ;LCD1602引脚定义
  2.         RW BIT P1.1
  3.         EN BIT P1.2
  4.                
  5.         ECHO BIT P3.6       ;回波信号端
  6.                
  7.                 NUM        EQU 40H   ;定时器用
  8.         H        EQU 41H    ;距离高8位
  9.         L        EQU 42H    ;距离低8位

  10.                 ORG 0000H
  11.         LJMP MAIN
  12.         ORG 000BH         ;定时器0入口
  13.         LJMP TIME0
  14.         ORG 0030H
  15.         MAIN:
  16.         MOV SP,#60H
  17.         MOV R0,#40H     
  18.         MOV A,#0
  19.         MOV NUM,#0
  20.         MOV H,#0
  21.         MOV L,#0
  22.    
  23.         
  24.         MOV H,#1
  25.         MOV L,#0
  26.         LCALL  LCD1602_INIT  ;1602初始化
  27.         LCALL DELAY2
  28.         
  29.         MOV A,#80H
  30.         LCALL WRITE_1602COM
  31.         MOV DPTR,#CODE_PRINT
  32.         LCALL PRINT
  33.      
  34.         MOV TMOD,#11H               ;初始化定时器
  35.         MOV TH0,#0;
  36.         MOV TL0,#0;
  37.         SETB EA
  38.         SETB ET0
  39.         
  40.         ;主循环
  41. LOOP:  
  42.         SETB TR1
  43. LOOP1:
  44.         JB ECHO,LOOP2
  45.         SJMP LOOP1
  46. LOOP2:
  47.         SETB TR0
  48. LOOP3:
  49.         JNB ECHO,LOOP4
  50.         SJMP LOOP3
  51. LOOP4:
  52.         CLR TR0
  53.         LCALL COUNT
  54.         LCALL DISPLAY     ;显示距离
  55.         SJMP LOOP6
  56. LOOP5:
  57.         CLR TR0
  58.         MOV TH0,#0;   
  59.         MOV TL0,#0;
  60. LOOP6:
  61.         SJMP LOOP        
  62.                
  63. COUNT:  ;计算距离 cm=us/58
  64.         MOV R1,TH0
  65.         MOV R0,TL0
  66.         MOV L,#0
  67.         MOV H,#0
  68.         MOV TH0,#0
  69.         MOV TL0,#0
  70. DIS1:
  71.       CLR  C             ;循环被除数减去除数的次数就是这个商
  72.       MOV  A, R0
  73.       SUBB A, #3AH
  74.       MOV  R0, A
  75.       MOV  A, R1
  76.       SUBB A, #0
  77.       MOV  R1, A
  78.       JC   DIS2
  79.       INC  L
  80.           MOV A,L
  81.       CJNE A,#0,DIS1
  82.           INC H
  83.       SJMP DIS1
  84. DIS2:
  85.       RET

  86.         
  87. DISPLAY:                ;显示距离
  88.         MOV R6,H   
  89.         MOV R7,L
  90.         LCALL HB2           ;2字节16进制数转换为3字节压缩BCD码
  91.         MOV A,#089H
  92.         MOV B,R4
  93.         LCALL DIS_1BIT
  94.         MOV A,R5
  95.         LCALL DIS_2BIT
  96.                 CJNE R4,#3,DIS0
  97.                 CLR P3.7
  98.         RET
  99. DIS0:
  100.                 SETB P3.7
  101.         RET
  102.                
  103.         
  104.         ;LCD1602初始化函数
  105. LCD1602_INIT:
  106.         MOV A,#38H
  107.         LCALL WRITE_1602COM
  108.         MOV A,#0CH
  109.         LCALL WRITE_1602COM
  110.         MOV A,#06H
  111.         LCALL WRITE_1602COM
  112.         MOV A,#01H
  113.         LCALL WRITE_1602COM
  114.         RET
  115.         
  116.         WRITE_1602COM:  ;写命令
  117.         CLR RS
  118.         CLR RW
  119.         MOV P0,A
  120.         LCALL DELAY1
  121.         SETB EN
  122.         LCALL DELAY1
  123.         CLR EN
  124.         RET
  125.         WRITE_1602DAT: ;写数据
  126.         SETB RS
  127.         CLR RW
  128.         MOV P0,A
  129.         LCALL DELAY1
  130.         SETB EN
  131.         LCALL DELAY1
  132.         CLR EN
  133.         RET
  134.         
  135.         
  136.         ;1602显示字符串函数
  137. PRINT:
  138.         MOV R0,#0
  139. PRINT1:
  140.         MOV A,R0
  141.         MOVC A,@A+DPTR
  142.         CJNE A,#0,PRINT0
  143.         RET
  144. PRINT0:
  145.         LCALL WRITE_1602DAT
  146.         INC R0
  147.         SJMP PRINT1
  148.         
  149.         
  150.         ;1602显示2位整数
  151. DIS_2BIT:
  152.         MOV B,#16
  153.         DIV AB
  154.         ADD A,#30H
  155.         LCALL WRITE_1602DAT
  156.         MOV A,B
  157.         ADD A,#30H
  158.         LCALL WRITE_1602DAT
  159.         RET
  160.         
  161.         ;1602显示1位整数
  162. DIS_1BIT:                ;A是地址 B放数据
  163.         LCALL WRITE_1602COM
  164.         MOV A,B
  165.         ADD A,#30H
  166.         LCALL WRITE_1602DAT
  167.         RET
  168.         
  169.         DELAY1:       ;延时1
  170.         MOV 30H,#20
  171.         DJNZ 30H,$
  172.         RET
  173.         
  174.         DELAY2:       ;延时2
  175.         MOV 30H,#50
  176.         DELAY20:
  177.         MOV 31H,#50
  178.         DJNZ 31H,$
  179.         DJNZ 30H,DELAY20
  180.         RET
  181.         
  182.         ;定时器0中断函数
  183. TIME0:
  184.         RETI
  185.            
  186.         
  187. HB2:
  188.         CLR        A        ;BCD码初始化
  189.         MOV        R3,A
  190.         MOV        R4,A
  191.         MOV        R5,A
  192.         MOV        R2,#10H        ;转换双字节十六进制整数
  193. HB3:        
  194.         MOV        A,R7        ;从高端移出待转换数的一位到CY中
  195.         RLC        A
  196.         MOV        R7,A
  197.         MOV        A,R6
  198.         RLC        A
  199.         MOV        R6,A
  200.         MOV        A,R5        ;BCD码带进位自身相加,相当于乘2
  201.         ADDC        A,R5
  202.         DA        A        ;十进制调整
  203.         MOV        R5,A
  204.         MOV        A,R4
  205.         ADDC        A,R4
  206.         DA        A
  207.         MOV        R4,A
  208.         MOV        A,R3
  209.         ADDC        A,R3
  210.         MOV        R3,A        ;双字节十六进制数的万位数不超过6,不用调整
  211.         DJNZ        R2,HB3        ;处理完16bit
  212.         RET        
  213.         
  214. CODE_PRINT:
  215.         DB "DISTANCE     cm",0

  216.         END
复制代码

仿真程序下载: 01.7z (52.24 KB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表