新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 簡單的單片機超聲波測距板

        簡單的單片機超聲波測距板

        作者: 時間:2016-11-30 來源:網絡 收藏


        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; 除100程序(除法) ;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        DIVD: CLR C ;比較被除數和除數
        MOV A,R3
        SUBB A,R7
        MOV A,R2
        SUBB A,R6
        JC DVD1
        SETB OV ;溢出
        RET
        DVD1: MOV B,#10H ;計算雙字節商
        DVD2: CLR C ;部分商和余數同時左移一位
        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 ;計算(R2R3-R6R7)
        MOV R1,A
        MOV A,R2
        SUBB A,R6
        ANL C,/F0 ;結果判斷
        JC DVD3
        MOV R2,A ;夠減,存放新的余數
        MOV A,R1
        MOV R3,A
        INC R5 ;商的低位置一
        DVD3: DJNZ B,DVD2 ;計算完十六位商(R4R5)
        MOV A,R4 ;將商移到R2R3中
        MOV R2,A
        MOV A,R5
        MOV R3,A
        CLR OV ;設立成功標志
        RET
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; BCD轉換 ;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        HB2: CLR A ;BCD碼初始化
        MOV R3,A
        MOV R4,A
        MOV R5,A
        MOV R2,#10H ;轉換雙字節十六進制整數
        HB3: MOV A,R7 ;從高端移出待轉換數的一位到CY中
        RLC A
        MOV R7,A
        MOV A,R6
        RLC A
        MOV R6,A
        MOV A,R5 ;BCD碼帶進位自身相加,相當于乘2
        ADDC A,R5
        DA A ;十進制調整
        MOV R5,A
        MOV A,R4
        ADDC A,R4
        DA A
        MOV R4,A
        MOV A,R3
        ADDC A,R3
        MOV R3,A ;雙字節十六進制數的萬位數不超過6,不用調整
        DJNZ R2,HB3 ;處理完16bit
        RET
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; 顯示程序 ;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        DISPLAY: MOV R1,#76H ;立即數76H送寄存器中
        MOV R5,#0FEH ;立即數FEH送寄存器R5中
        PLAY: MOV A,R5 ;寄存器R5中的數值送累加器A中
        MOV P3,A ;累加器A中的數值送P3口
        MOV A,@R1 ;以寄存器R1中的數為地址單元的數值送累加器中
        MOV DPTR,#TAB ;16位地址送地址寄存器中
        MOVC A,@A+DPTR ;以中的地址為基地變址尋址單元中的數送累加器
        MOV P1,A ;累加器A中的數值送P1口
        MOV R6,#14H ;立即數據14送寄存器R6中
        DL1:MOV R7,#19H ;立即數據19送寄存器R7中
        DL2:DJNZ R7,DL2 ;寄存器中的數據減1,不為零時則轉移
        DJNZ R6,DL1 ;寄存器中的數據減1,不為零時則轉移
        INC R1 ;寄存器R1中的數值加1
        MOV A,R5 ;寄存器R5中的數值送累加器A中
        JNB ACC.2,ENDOUT ;地址位為0則轉到ENDOUT
        RL A ;累加器循環右移
        MOV R5,A ;累加器A中的數值送寄存器R5中
        AJMP PLAY ;絕對短轉移
        ENDOUT: SETB P3.5 ;置P3.5口
        MOV P1,#0FFH ;立即數0FEH送P1口
        RET ;返回
        TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
        END ;結束

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

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 石台县| 娄底市| 剑川县| 永城市| 雷波县| 古交市| 成安县| 海口市| 木兰县| 平顶山市| 卢龙县| 南城县| 昭平县| 周宁县| 陆川县| 岳池县| 东丽区| 镇原县| 乌拉特后旗| 托克逊县| 林西县| 微博| 叶城县| 砚山县| 宾阳县| 德兴市| 宜兰县| 潮安县| 宜阳县| 如皋市| 施甸县| 宁都县| 曲水县| 玉山县| 夏河县| 克山县| 绍兴县| 宁陕县| 额敏县| 洮南市| 广昌县|