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è)計(jì)方案:每隔65ms發(fā)射一次,每次發(fā)射8個(gè)周期。 問(wèn)題一:發(fā)不出40k 的脈沖,只有30k 問(wèn)題二:一開(kāi)啟外部中斷,外部中斷就一直位于低電平了,所測(cè)的的距離就是那200us所傳播的距離 麻煩大家看看啊,都半個(gè)月了 很郁悶啊
csb發(fā)射.jpg (24.31 KB, 下載次數(shù): 175)
下載附件
2008-8-1 22:00 上傳
csb接受.gif (9.29 KB, 下載次數(shù): 152)
下載附件
2008-8-1 22:00 上傳
|