第一次做单片机实训,是关于4个超声波测距的实训。在调试的时候遇到了一些解决不了的问题。就是第一次上电之后,第一个超声波的接收端(ECHO1)会有一个高电平?导致调试不成功。自己调试了两天,实在调不出来,球球各位大佬帮忙解答一下
单片机源程序如下:
- //主循环
- LOOP:
- MOV ECHO_FLAG,#0 //将两标志位位初始化
- MOV ECHO_FLAG1,#0
- MOV R7,ECHO_FLAG
- MOV R6,ECHO_FLAG1
- LJMP LOOP10
-
- L1:LJMP LOOP20 //跳转中转站
- L2:LJMP LOOP30
-
- LOOP10:
- MOV R7,ECHO_FLAG
- MOV R6,ECHO_FLAG1
- CJNE R7,#0,L1 //判断两个标志是否为‘00’,是则执行LOOP10
- CJNE R6,#0,L2
- LCALL KEYBOARD //调用按键
-
- MOV A,#0
- CJNE A,SET_FLAG,LOOP1
- JNB ECHO1,LOOP10
- LCALL DELAY2
- ;LOOP17:
- SETB TRI31
- LCALL DELAY2
- SETB TR0
- CLR TRI31
- ;LCALL DELAY2
- LOOP17:
- JB ECHO1,LOOP12 //位为1则跳转
- SETB START_FLAG
- SJMP LOOP17
- LOOP12:
- JNB START_FLAG,LOOP13 //为0表示不正常的值 不更新
- ;CLR START_FLAG
- CLR TR0 //测试时关
- ;JNB ECHO1,LOOP14 //为零则跳转,即接收到信号
- ;LJMP LOOP17
- LOOP16:
- JNB ECHO1,LOOP14 //为零则跳转,即接收到信号
- JB TIME_FULL,LOOP15 //超出范围
- SJMP LOOP16
- LOOP14:
- ;CLR TR0
- LCALL COUNT
- LCALL DISPLAY10 //显示距离
- LCALL FUNTION10 //判断范围
- LCALL BUZZ_MOD //蜂鸣器
- MOV ECHO_FLAG,#1 //成功计算则ECHO_FLAG值加1
- LJMP LOOP20
- LOOP15:
- CLR TIME_FULL
- CLR TR0
- MOV TH0,#0
- MOV TL0,#0
- MOV A,#81H
- LCALL WRITE_1602COM
- MOV DPTR,#CODE_PRINT3
- LCALL PRINT //格式:"Err"
- ;CLR BEE //超时 仅报警
- LOOP13:
- SJMP LOOP10
- LOOP1:
- CLR TR1 //按键设置的时候禁止测量
- CLR TR0
- LCALL DISPLAY1 //有按键时在屏幕上更新上下限的值
- LJMP LOOP10
- FUNTION10:
- CLR C
- MOV A,S_H //实际值减去下限
- SUBB A,S_LH
- MOV B,A
- JNC FUN0 //为0跳转继续判断 为1说明低于下限
- FUN1: //超出上,下限时显示Err
- ;CLR water_in //注水 开灯 报警
- MOV A,#81H //小于下限时显示Err
- LCALL WRITE_1602COM
- MOV DPTR,#CODE_PRINT3
- LCALL PRINT //格式:"Err"
- MOV BUZZ_FLAG,#1 //报警器置零
- SJMP FUN
- FUN0:
- MOV A,S_L
- SUBB A,S_LL
- JNC FUN2 //低8位是否有借位
- MOV A,B
- CJNE A,#1,FUN1 //有借位B为1说明测量值大于下限 判断上限
- FUN2: //实际值和上限相比较
- CLR C
- MOV A,S_HH
- SUBB A,S_H
- MOV B,A
- JNC FUN3
- FUN4:
- MOV A,#81H //大于上限时显示Err
- LCALL WRITE_1602COM
- MOV DPTR,#CODE_PRINT3
- LCALL PRINT //格式:"Err",并清零
- MOV BUZZ_FLAG,#2
- SJMP FUN
- FUN3:
- MOV A,S_HL
- SUBB A,S_L
- JNC FUN5 //
- MOV A,B
- CJNE A,#1,FUN4
- FUN5:
- MOV BUZZ_FLAG,#0
- FUN:
- RET
复制代码
运行之后‘A’在我没有按下echo1的时候会自动显示err
实在是搞不清楚原因,请大佬们教一下!!!
|