|
這款簡(jiǎn)單的單片機(jī)超聲波測(cè)距板,比較適合電子小制作愛(ài)好者仿 制,超聲波測(cè)距硬件電路的設(shè)計(jì)主要包括單片機(jī)系統(tǒng)及顯示電路、超聲波發(fā)射電路和超聲波接收電路三部分。超聲波測(cè)距單片機(jī)采用AT89C2051。采用 12MHz高精度的晶振,以獲得較穩(wěn)定時(shí)鐘頻率,減小測(cè)量誤差。超聲波測(cè)距單片機(jī)用P3.5端口輸出超聲波換能器所需的40kHz的方波信號(hào),P3.7端 口監(jiān)測(cè)超聲波接收電路輸出的返回信號(hào)。顯示電路采用簡(jiǎn)單實(shí)用的3位共陽(yáng)LED數(shù)碼管,段碼輸出端口為單片機(jī)的P1口,位碼輸出端口分別為單片機(jī)的 P3.2、P3.1、P3.0口,數(shù)碼管位驅(qū)運(yùn)用PNP三極管S9012三極管驅(qū)動(dòng)。超聲波測(cè)距測(cè)量范圍25-300厘米,精度1厘米。
; 基于AT89C2051單片機(jī)超聲波測(cè)距系統(tǒng)
; 測(cè)量范圍35-300厘米
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中斷入口程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
AJMP START
ORG 000BH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START : MOV R0,#70H ;立即數(shù)70H送寄存器R0中
MOV R7,#0BH ;立即數(shù)0BH送寄存器R7中
MOV 20H,#00H ;立即數(shù)00H送20H單元中
CLEARDISP: MOV @R0,#00H ;立即數(shù)立即數(shù)00H送R0中的地址單元中
INC R0 ;寄存器R0加1
DJNZ R7,CLEARDISP;寄存器中的數(shù)值減1非零時(shí)轉(zhuǎn)移
MOV TMOD,#01H ;置定時(shí)器T0工作方式樣3,對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)
CJZCX:MOV TL0,#00H ;裝入定時(shí)器初值
MOV TH0,#00H
MOV R0,#0FH
MOV R1,#5bH
puzel:MOV 14H,#08H ;超聲波發(fā)射持續(xù)200us
Here:CPL P3.5 ;輸出40kHz方波
NOP ;
NOP ;
NOP ;
DJNZ 14H,Here ;
SETB TR0
SETB P3.2
MOV R6,#53H ;延時(shí)1.5ms
DL0: MOV R5,#03H
DJNZ R5,$
DJNZ R6,DL0
QBA:JNB P3.7,QBC
DJNZ R1,QBA
DJNZ R0,QBA
QBC:CLR P3.2
CLR TR0
MOV 70H,tl0
MOV 71H,tH0
MOV R2,71H
MOV R3,70H
MOV R6,#22H
MOV R7,#0H
LCALL MULD
MOV R6,#64H
MOV R7,#0H
LCALL DIVD
MOV 73H,R2
MOV 74H,R3
MOV R3,#0H
MOV R4,#0H
MOV R5,#0H
MOV R6,73H
MOV R7,74H
LCALL HB2
MOV A,R4 ;分離BCD
MOV B,#10H
DIV AB
MOV 78H,A
MOV 77H,B
MOV A,R5
MOV B,#10H
DIV AB
MOV 76H,A
MOV 75H,B
MOV 7AH,#0EFH
XXX:LCALL DISPLAY
DJNZ 7AH,XXX
AJMP CJZCX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 乘34程序(乘聲速) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MULD: MOV A,R3 ;計(jì)算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暫存部分積
MOV R5,A
MOV A,R3 ;計(jì)算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;計(jì)算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;計(jì)算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分積
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 除100程序(除法) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DIVD: CLR C ;比較被除數(shù)和除數(shù)
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1: MOV B,#10H ;計(jì)算雙字節(jié)商
DVD2: CLR C ;部分商和余數(shù)同時(shí)左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;計(jì)算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;結(jié)果判斷
JC DVD3
MOV R2,A ;夠減,存放新的余數(shù)
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3: DJNZ B,DVD2 ;計(jì)算完十六位商(R4R5)
MOV A,R4 ;將商移到R2R3中
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV ;設(shè)立成功標(biāo)志
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BCD轉(zhuǎn)換 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HB2: CLR A ;BCD碼初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù)
HB3: MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD碼帶進(jìn)位自身相加,相當(dāng)于乘2
ADDC A,R5
DA A ;十進(jìn)制調(diào)整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;雙字節(jié)十六進(jìn)制數(shù)的萬(wàn)位數(shù)不超過(guò)6,不用調(diào)整
DJNZ R2,HB3 ;處理完16bit
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 顯示程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY: MOV R1,#76H ;立即數(shù)76H送寄存器中
MOV R5,#0FEH ;立即數(shù)FEH送寄存器R5中
PLAY: MOV A,R5 ;寄存器R5中的數(shù)值送累加器A中
MOV P3,A ;累加器A中的數(shù)值送P3口
MOV A,@R1 ;以寄存器R1中的數(shù)為地址單元的數(shù)值送累加器中
MOV DPTR,#TAB ;16位地址送地址寄存器中
MOVC A,@A+DPTR ;以中的地址為基地變址尋址單元中的數(shù)送累加器
MOV P1,A ;累加器A中的數(shù)值送P1口
MOV R6,#14H ;立即數(shù)據(jù)14送寄存器R6中
DL1:MOV R7,#19H ;立即數(shù)據(jù)19送寄存器R7中
DL2:DJNZ R7,DL2 ;寄存器中的數(shù)據(jù)減1,不為零時(shí)則轉(zhuǎn)移
DJNZ R6,DL1 ;寄存器中的數(shù)據(jù)減1,不為零時(shí)則轉(zhuǎn)移
INC R1 ;寄存器R1中的數(shù)值加1
MOV A,R5 ;寄存器R5中的數(shù)值送累加器A中
JNB ACC.2,ENDOUT ;地址位為0則轉(zhuǎn)到ENDOUT
RL A ;累加器循環(huán)右移
MOV R5,A ;累加器A中的數(shù)值送寄存器R5中
AJMP PLAY ;絕對(duì)短轉(zhuǎn)移
ENDOUT: SETB P3.5 ;置P3.5口
MOV P1,#0FFH ;立即數(shù)0FEH送P1口
RET ;返回
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
END ;結(jié)束
|
|