新聞中心

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

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

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

        ;
        ;********************************************
        ;* 主 程 序 *
        ;********************************************
        ;
        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中斷請求標(biāo)志位。當(dāng)主機(jī)響應(yīng)中斷轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時,由內(nèi)部硬件自動將IE0位清0
        SETB IT0 ;當(dāng)IT0 = 1時,則外部中斷0(INT0 )端口由“1 ”→“0 ”下降沿跳變,激活中斷請求標(biāo)志位IE0,向主機(jī)請求中斷處理
        SETB ET1 ;允許T1中斷
        SETB EA
        SETB TR1 ;開啟測距定時器
        ;main主循環(huán)開始
        start1:
        JNB 30H,$ ;收到反射信號時標(biāo)志位為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 ;清除反射信號標(biāo)志位
        CLR ET0 ;關(guān)閉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中斷請求標(biāo)志位。當(dāng)主機(jī)響應(yīng)中斷轉(zhuǎn)向該中斷服務(wù)程序執(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ā)射的直達(dá)聲波信號,消除余震
        LCALL DL1MS
        SETB EX0 ;開啟接收回波中斷

        RETIOUT: RETI

        本文引用地址:http://www.104case.com/article/201611/324009.htm

        ;外中斷0,收到回波時進(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
        ;

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

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 万年县| 和龙市| 祁东县| 蓝田县| 衡阳县| 哈巴河县| 峡江县| 壶关县| 阿拉善右旗| 原阳县| 那坡县| 宜良县| 武穴市| 德保县| 鹿邑县| 蓝田县| 西平县| 嘉定区| 阿拉尔市| 青铜峡市| 汉阴县| 南漳县| 兴和县| 陆丰市| 西藏| 元阳县| 辽宁省| 龙川县| 金塔县| 平度市| 宁南县| 搜索| 临武县| 宕昌县| 成安县| 朔州市| 全南县| 东阿县| 桂东县| 泗水县| 惠来县|