超聲波測(cè)距電路+匯編程序
;
;********************************************
;* 主 程 序 *
;********************************************
;
START: MOV SP,#4FH
MOV SCON,#50H ;串口方式1工作,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn),允許接收
MOV T2MOD,#00H ;DCEN = 0,向上計(jì)數(shù)
MOV RCAP2H,#0FEH ;定時(shí)器T2置重裝數(shù),波特率:1200. (12MHz)
MOV RCAP2L,#0C8H
MOV TH2,#0FEH ;定時(shí)器T2置初值
MOV TL2,#0C8H
MOV T2CON,#34H ;T2工作方式:波特率發(fā)生器,同時(shí)啟動(dòng)Time2定時(shí)器
CLR TI
CLR 30H
MOV TMOD,#11H ;T1、T0為16位定時(shí)器
MOV TH0,#00H ;65毫秒初值
MOV TL0,#00H
MOV TH1,#00H
MOV TL1,#00H
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV R4,#04H ;超聲波脈沖個(gè)數(shù)控制(為賦值的一半,即2個(gè)超聲波)
SETB PX0
CLR IE0 ;外部中斷0中斷請(qǐng)求標(biāo)志位。當(dāng)主機(jī)響應(yīng)中斷轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時(shí),由內(nèi)部硬件自動(dòng)將IE0位清0
SETB IT0 ;當(dāng)IT0 = 1時(shí),則外部中斷0(INT0 )端口由“1 ”→“0 ”下降沿跳變,激活中斷請(qǐng)求標(biāo)志位IE0,向主機(jī)請(qǐng)求中斷處理
SETB ET1 ;允許T1中斷
SETB EA
SETB TR1 ;開啟測(cè)距定時(shí)器
;main主循環(huán)開始
start1:
JNB 30H,$ ;收到反射信號(hào)時(shí)標(biāo)志位為1
CLR EA ;不讓T1中斷
MOV R2,#64H ;測(cè)量間隔控制(約5*100=500MS). 64H = 100
LOOP: LCALL DL1MS
LCALL DL1MS
LCALL DL1MS
LCALL DL1MS
LCALL DL1MS
DJNZ R2,LOOP
CLR 30H ;清除反射信號(hào)標(biāo)志位
CLR ET0 ;關(guān)閉T0中斷
MOV TH0,00H
MOV TL0,00H
SETB TR1 ;重新開啟測(cè)距定時(shí)器
SETB EA
SJMP start1
;main主循環(huán)結(jié)束
;****************************************************
;* 中斷程序 *
;****************************************************
;T1中斷,發(fā)超聲波用 ;T1中斷,65毫秒中斷一次
INTT1: CLR EA
CLR TR0
CLR EX0
MOV TH0,#00H
MOV TL0,#00H
MOV TH1,#00H
MOV TL1,#00H
SETB ET0 ;外部中斷0中斷請(qǐng)求標(biāo)志位。當(dāng)主機(jī)響應(yīng)中斷轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時(shí),由內(nèi)部硬件自動(dòng)將IE0位清0
SETB EA
SETB TR0 ;啟動(dòng)計(jì)數(shù)器T0,用以計(jì)算超聲波傳播時(shí)間
intt11:
CPL VOUT ;發(fā)射40KHZ超聲波.晶振:12MHz,1us
nop
nop
nop
nop
nop
nop
nop
nop
nop
DJNZ R4,intt11 ;2us
;超聲波發(fā)送完畢
CLR IE0
MOV R4,#04H
LCALL DL1MS ;延時(shí)2ms,避開發(fā)射的直達(dá)聲波信號(hào),消除余震
LCALL DL1MS
SETB EX0 ;開啟接收回波中斷
RETIOUT: RETI本文引用地址:http://m.butianyuan.cn/article/201611/324009.htm
;外中斷0,收到回波時(shí)進(jìn)入
PINT0: nop
jb P3.2,pint0_exit
CLR TR0 ;關(guān)閉T0
CLR EA
CLR EX0
MOV SBUF,TH0
JNB TI,$
CLR TI
MOV SBUF,TL0
JNB TI,$
CLR TI
MOV TH0,#00H
MOV TL0,#00H
JNB p3.2,$
SETB 30H ;接收成功標(biāo)志
pint0_exit:
RETI
;
;****************************************************
;* 延時(shí)程序 *
;****************************************************
;
DL1MS:
push 06H
push 07H
MOV R6,#14H ;14H = 20
DL1: MOV R7,#19H ;19H = 25
DL2: DJNZ R7,DL2 ;2us * 25 = 50
DJNZ R6,DL1 ;50us * 20 = 1000us
pop 07H
pop 06H
RET
;
;
DL100US:
push 06H
MOV R6,#32H ;32H = 50
DL3: DJNZ R7,DL3 ;2us * 50 = 100us
pop 07H
pop 06H
RET
;
END
評(píng)論