找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机SRF-04超声波程序调试问题

[复制链接]
跳转到指定楼层
楼主
第一次做单片机实训,是关于4个超声波测距的实训。在调试的时候遇到了一些解决不了的问题。就是第一次上电之后,第一个超声波的接收端(ECHO1)会有一个高电平?导致调试不成功。自己调试了两天,实在调不出来,球球各位大佬帮忙解答一下

单片机源程序如下:
  1.         //主循环
  2.         LOOP:
  3.              MOV ECHO_FLAG,#0     //将两标志位位初始化
  4.              MOV ECHO_FLAG1,#0
  5.                  MOV R7,ECHO_FLAG
  6.                  MOV R6,ECHO_FLAG1
  7.                  LJMP LOOP10
  8.                  
  9.         L1:LJMP LOOP20       //跳转中转站
  10.         L2:LJMP LOOP30
  11.         
  12.         LOOP10:
  13.         MOV R7,ECHO_FLAG
  14.         MOV R6,ECHO_FLAG1
  15.         CJNE R7,#0,L1  //判断两个标志是否为‘00’,是则执行LOOP10
  16.         CJNE R6,#0,L2
  17.         LCALL KEYBOARD     //调用按键        
  18.         
  19.         MOV A,#0
  20.         CJNE A,SET_FLAG,LOOP1
  21.         JNB ECHO1,LOOP10
  22.         LCALL DELAY2
  23.         ;LOOP17:
  24.         SETB TRI31
  25.         LCALL DELAY2
  26.         SETB TR0
  27.         CLR TRI31
  28.         ;LCALL DELAY2
  29.         LOOP17:
  30.         JB ECHO1,LOOP12          //位为1则跳转
  31.         SETB START_FLAG
  32.         SJMP LOOP17
  33.         LOOP12:
  34.         JNB START_FLAG,LOOP13    //为0表示不正常的值 不更新
  35.         ;CLR START_FLAG
  36.         CLR TR0               //测试时关
  37.         ;JNB ECHO1,LOOP14        //为零则跳转,即接收到信号
  38.         ;LJMP LOOP17
  39.         LOOP16:
  40.         JNB ECHO1,LOOP14        //为零则跳转,即接收到信号
  41.         JB TIME_FULL,LOOP15     //超出范围
  42.         SJMP LOOP16
  43.         LOOP14:
  44.         ;CLR TR0
  45.         LCALL COUNT
  46.         LCALL DISPLAY10     //显示距离
  47.         LCALL FUNTION10      //判断范围
  48.         LCALL BUZZ_MOD     //蜂鸣器
  49.         MOV ECHO_FLAG,#1   //成功计算则ECHO_FLAG值加1
  50.         LJMP LOOP20
  51.         LOOP15:
  52.         CLR TIME_FULL
  53.         CLR TR0
  54.         MOV TH0,#0
  55.         MOV TL0,#0
  56.         MOV A,#81H
  57.         LCALL WRITE_1602COM
  58.         MOV DPTR,#CODE_PRINT3  
  59.         LCALL PRINT            //格式:"Err"
  60.         ;CLR BEE   //超时   仅报警
  61.         LOOP13:
  62.         SJMP LOOP10
  63.         LOOP1:
  64.         CLR TR1  //按键设置的时候禁止测量
  65.         CLR TR0
  66.         LCALL DISPLAY1         //有按键时在屏幕上更新上下限的值
  67.         LJMP LOOP10

  68.         FUNTION10:
  69.         CLR C
  70.         MOV A,S_H      //实际值减去下限
  71.         SUBB A,S_LH   
  72.         MOV B,A
  73.         JNC FUN0        //为0跳转继续判断  为1说明低于下限
  74.         FUN1:           //超出上,下限时显示Err
  75.         ;CLR water_in   //注水 开灯 报警
  76.         MOV A,#81H             //小于下限时显示Err
  77.         LCALL WRITE_1602COM
  78.         MOV DPTR,#CODE_PRINT3  
  79.         LCALL PRINT            //格式:"Err"
  80.         MOV BUZZ_FLAG,#1              //报警器置零
  81.         SJMP FUN
  82.         FUN0:
  83.         MOV A,S_L
  84.         SUBB A,S_LL
  85.         JNC FUN2        //低8位是否有借位
  86.         MOV A,B
  87.         CJNE A,#1,FUN1   //有借位B为1说明测量值大于下限  判断上限
  88.         FUN2:          //实际值和上限相比较
  89.         CLR C
  90.         MOV A,S_HH
  91.         SUBB A,S_H
  92.         MOV B,A
  93.         JNC FUN3
  94.         FUN4:
  95.         MOV A,#81H             //大于上限时显示Err
  96.         LCALL WRITE_1602COM
  97.         MOV DPTR,#CODE_PRINT3  
  98.         LCALL PRINT            //格式:"Err",并清零
  99.         MOV BUZZ_FLAG,#2
  100.         SJMP FUN
  101.         FUN3:
  102.         MOV A,S_HL
  103.         SUBB A,S_L
  104.         JNC FUN5        //
  105.         MOV A,B
  106.         CJNE A,#1,FUN4
  107.         FUN5:
  108.         MOV BUZZ_FLAG,#0
  109.         FUN:
  110.         RET
复制代码

运行之后‘A’在我没有按下echo1的时候会自动显示err

实在是搞不清楚原因,请大佬们教一下!!!


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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