|
第一次做單片機(jī)實(shí)訓(xùn),是關(guān)于4個(gè)超聲波測(cè)距的實(shí)訓(xùn)。在調(diào)試的時(shí)候遇到了一些解決不了的問(wèn)題。就是第一次上電之后,第一個(gè)超聲波的接收端(ECHO1)會(huì)有一個(gè)高電平?導(dǎo)致調(diào)試不成功。自己調(diào)試了兩天,實(shí)在調(diào)不出來(lái),球球各位大佬幫忙解答一下
單片機(jī)源程序如下:
- //主循環(huán)
- LOOP:
- MOV ECHO_FLAG,#0 //將兩標(biāo)志位位初始化
- MOV ECHO_FLAG1,#0
- MOV R7,ECHO_FLAG
- MOV R6,ECHO_FLAG1
- LJMP LOOP10
-
- L1:LJMP LOOP20 //跳轉(zhuǎn)中轉(zhuǎn)站
- L2:LJMP LOOP30
-
- LOOP10:
- MOV R7,ECHO_FLAG
- MOV R6,ECHO_FLAG1
- CJNE R7,#0,L1 //判斷兩個(gè)標(biāo)志是否為‘00’,是則執(zhí)行LOOP10
- CJNE R6,#0,L2
- LCALL KEYBOARD //調(diào)用按鍵
-
- 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則跳轉(zhuǎn)
- SETB START_FLAG
- SJMP LOOP17
- LOOP12:
- JNB START_FLAG,LOOP13 //為0表示不正常的值 不更新
- ;CLR START_FLAG
- CLR TR0 //測(cè)試時(shí)關(guān)
- ;JNB ECHO1,LOOP14 //為零則跳轉(zhuǎn),即接收到信號(hào)
- ;LJMP LOOP17
- LOOP16:
- JNB ECHO1,LOOP14 //為零則跳轉(zhuǎn),即接收到信號(hào)
- JB TIME_FULL,LOOP15 //超出范圍
- SJMP LOOP16
- LOOP14:
- ;CLR TR0
- LCALL COUNT
- LCALL DISPLAY10 //顯示距離
- LCALL FUNTION10 //判斷范圍
- LCALL BUZZ_MOD //蜂鳴器
- MOV ECHO_FLAG,#1 //成功計(jì)算則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 //超時(shí) 僅報(bào)警
- LOOP13:
- SJMP LOOP10
- LOOP1:
- CLR TR1 //按鍵設(shè)置的時(shí)候禁止測(cè)量
- CLR TR0
- LCALL DISPLAY1 //有按鍵時(shí)在屏幕上更新上下限的值
- LJMP LOOP10
- FUNTION10:
- CLR C
- MOV A,S_H //實(shí)際值減去下限
- SUBB A,S_LH
- MOV B,A
- JNC FUN0 //為0跳轉(zhuǎn)繼續(xù)判斷 為1說(shuō)明低于下限
- FUN1: //超出上,下限時(shí)顯示Err
- ;CLR water_in //注水 開(kāi)燈 報(bào)警
- MOV A,#81H //小于下限時(shí)顯示Err
- LCALL WRITE_1602COM
- MOV DPTR,#CODE_PRINT3
- LCALL PRINT //格式:"Err"
- MOV BUZZ_FLAG,#1 //報(bào)警器置零
- SJMP FUN
- FUN0:
- MOV A,S_L
- SUBB A,S_LL
- JNC FUN2 //低8位是否有借位
- MOV A,B
- CJNE A,#1,FUN1 //有借位B為1說(shuō)明測(cè)量值大于下限 判斷上限
- FUN2: //實(shí)際值和上限相比較
- CLR C
- MOV A,S_HH
- SUBB A,S_H
- MOV B,A
- JNC FUN3
- FUN4:
- MOV A,#81H //大于上限時(shí)顯示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
復(fù)制代碼
運(yùn)行之后‘A’在我沒(méi)有按下echo1的時(shí)候會(huì)自動(dòng)顯示err
捕獲err.PNG (120.87 KB, 下載次數(shù): 50)
下載附件
上電自動(dòng)顯示err
2019-6-22 00:12 上傳
實(shí)在是搞不清楚原因,請(qǐng)大佬們教一下!!!
|
|