ORG 0000H
LJMP START
ORG 0003H
LJMP PINT0
ORG 000BH
LJMP INTT0
ORG 001BH
LJMP INTT1
ORG 0030H
START: MOV SP, #4FH
MOV R0,#30H ;;30~35H為顯示數(shù)據(jù)存放單元(30為最高位)
MOV R7,#0AH
MOV 20H,#00H ;標(biāo)志位
CLEARDISP:MOV @R0,#00H
INC R0
DJNZ R7, CLEARDISP
mov tcon,#01h
MOV TMOD, #21H ; ;T1為8位自動(dòng)重裝模式,T0為16位定時(shí)器
MOV TH0, #00H ; ;65ms初值
MOV TL0, #00H
MOV TH1, #0F2H ;;40KHz初值
MOV TL1, #0F2H
MOV P0, #0FFH
MOV P1, #0FFH
MOV P2, #0FFH
MOV P3, #0FFH
mov 36h,#20h ;顯示位控
mov 37h,#30h
mov 38h,#40h
mov 39h,#50h
mov 3ah,#60h
MOV R4, #10h ; ;超聲波脈沖個(gè)數(shù)控制(為賦值的一半)
SETB PX0
SETB ET0
SETB EA
clr 20H
SETB TR0 ; ;開(kāi)啟測(cè)距定時(shí)器
START1: LCALL DISPLAY
JNB 20H, START1 ; ;收到反射信號(hào)時(shí)標(biāo)志位為1
CLR EA
LCALL WORK ; ;計(jì)算距離子程序
SETB EA
CLR 20H
SETB TR0 ; ;重新開(kāi)啟測(cè)距定時(shí)器
LOOP: LCALL DISPLAY
DJNZ R5, LOOP
SJMP START1
;*中斷程序*
;;T0中斷,65ms中斷一次
INTT0: CLR EA
CLR TR0
MOV TH0,#00H
MOV TL0,#00H
SETB ET1
SETB EA
SETB TR0 ; ;啟動(dòng)計(jì)時(shí)器T0,用以計(jì)算超聲波來(lái)回時(shí)間
SETB TR1 ; ;開(kāi)啟發(fā)超聲波用定時(shí)器T1
RETI
;;T1中斷,發(fā)超聲波用
INTT1:
CPL P1.0
DJNZ R4,RETIOUT
CLR TR1 ; ;超聲波發(fā)送完畢,關(guān)T1
CLR ET1
MOV R4,#10h ;發(fā)送8個(gè),約200us(最小距離)后開(kāi)啟外部中斷,
SETB EX0 ; ;開(kāi)啟接收回波中斷
RETIOUT: RETI
;;外中斷0,收到回波時(shí)進(jìn)入
PINT0:
CLR TR0 ; ;關(guān)計(jì)數(shù)器
CLR TR1
clr et1
CLR ea
clr ex0
MOV 40H,TL0 ; ;將計(jì)數(shù)值移入處理單元
MOV 41H,TH0
SETB 20H
RETI
哎~~~~~~~~~~~
自己頂自己一下
命苦呀
利用頂定時(shí)器啊、、直接可以的呀。。在驅(qū)動(dòng)一下。就產(chǎn)生了啊
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |