第一次做單片機實訓,是關于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
上電自動顯示err
實在是搞不清楚原因,請大佬們教一下。。
|