新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 超聲波測距電路+匯編程序

超聲波測距電路+匯編程序

作者: 時間:2016-11-30 來源:網(wǎng)絡 收藏

;
;********************************************
;* 主 程 序 *
;********************************************
;
START: MOV SP,#4FH
MOV SCON,#50H ;串口方式1工作,8位數(shù)據(jù)位,1位停止位,無奇偶校驗,允許接收
MOV T2MOD,#00H ;DCEN = 0,向上計數(shù)
MOV RCAP2H,#0FEH ;定時器T2置重裝數(shù),波特率:1200. (12MHz)
MOV RCAP2L,#0C8H
MOV TH2,#0FEH ;定時器T2置初值
MOV TL2,#0C8H
MOV T2CON,#34H ;T2工作方式:波特率發(fā)生器,同時啟動Time2定時器
CLR TI
CLR 30H

MOV TMOD,#11H ;T1、T0為16位定時器
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 ;超聲波脈沖個數(shù)控制(為賦值的一半,即2個超聲波)
SETB PX0
CLR IE0 ;外部中斷0中斷請求標志位。當主機響應中斷轉(zhuǎn)向該中斷服務程序執(zhí)行時,由內(nèi)部硬件自動將IE0位清0
SETB IT0 ;當IT0 = 1時,則外部中斷0(INT0 )端口由“1 ”→“0 ”下降沿跳變,激活中斷請求標志位IE0,向主機請求中斷處理
SETB ET1 ;允許T1中斷
SETB EA
SETB TR1 ;開啟測距定時器
;main主循環(huán)開始
start1:
JNB 30H,$ ;收到反射信號時標志位為1

CLR EA ;不讓T1中斷
MOV R2,#64H ;測量間隔控制(約5*100=500MS). 64H = 100
LOOP: LCALL DL1MS
LCALL DL1MS
LCALL DL1MS
LCALL DL1MS
LCALL DL1MS
DJNZ R2,LOOP

CLR 30H ;清除反射信號標志位
CLR ET0 ;關閉T0中斷
MOV TH0,00H
MOV TL0,00H
SETB TR1 ;重新開啟測距定時器
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中斷請求標志位。當主機響應中斷轉(zhuǎn)向該中斷服務程序執(zhí)行時,由內(nèi)部硬件自動將IE0位清0
SETB EA
SETB TR0 ;啟動計數(shù)器T0,用以計算超聲波傳播時間
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 ;延時2ms,避開發(fā)射的直達聲波信號,消除余震
LCALL DL1MS
SETB EX0 ;開啟接收回波中斷

RETIOUT: RETI

本文引用地址:http://butianyuan.cn/article/201611/324009.htm

;外中斷0,收到回波時進入
PINT0: nop
jb P3.2,pint0_exit
CLR TR0 ;關閉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 ;接收成功標志
pint0_exit:
RETI
;

;****************************************************
;* 延時程序 *
;****************************************************
;
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


上一頁 1 2 下一頁

評論


技術專區(qū)

關閉