新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > EM78系列單片機的數值轉換子程序簡介

        EM78系列單片機的數值轉換子程序簡介

        作者: 時間:2012-08-12 來源:網絡 收藏


        mov 0x20,a
        mov 0x21,a
        mov 0x22,a
        mov a,@0x0 ;被除數擴充1字節并清0
        mov 0x23,a
        mov a,@0x12 ;除數賦值
        mov 0x30,a
        mov 0x31,a
        mov a,@0x10 ;循環次數為16
        mov 0x32,a
        again: call rt_sub ;調移位除法子程
        djz 0x32 ;16次循環完成則結束
        jmp again ;未完成則繼續
        self: jmp self
        rt_sub:
        bc 0x03,0 ;c標志清0
        rlc 0x20 ;被除數左移1位
        rlc 0x21
        rlc 0x22
        rlc 0x23
        jbc 0x03,0
        jmp rt3 ;c標志為1則直接相減
        mov a,0x23 ;c標志為0則先比較大小
        mov 0x25,a
        mov a,0x22
        mov 0x24,a
        mov a,0x31 ;先比較高位
        sub 0x25,a
        jbc 0x03,2
        jmp rt1 ;高位相等跳rt1比較低位
        jmp rt2 ;高位不等跳rt2
        rt1: mov a,0x30 ;比較低位
        sub 0x24,a
        jbc 0x03,2
        jmp rt3 ;低位也相等則跳rt3,相減,上1
        rt2: jbs 0x03,0
        ret ;減數大則返回,減數小則相減,上1
        rt3: bs 0x20,0 ;上1
        call sub_2b ;調2字節減法子程
        ret
        sub_2b:
        mov a,0x31 ;高字節相減
        sub 0x23,a
        mov a,0x30 ;低字節相減
        sub 0x22,a
        jbc 0x03,2
        ret ;低字節相等,無借位,返回
        jbc 0x03,0
        ret ;無借位,返回
        dec 0x23 ;低字節相減有借位,高字節結果減1
        ret
        eop
        六 BCD數為二進制數
        兩字節壓縮BCD碼為兩字節二進制數。算法如下:
        BCD碼abcd=1000a+100b+10c+d=10{10[10a+b]+c}+d,將各位BCD碼分離出之后,即可根據此式為二進制數。涉及到乘法運算和多字節加法運算。
        0X20,0X21中為BCD碼,0X21高4位為最高位。轉換結果放在0X30,0X31中。
        main: mov a,@0x79
        mov 0x20,a
        mov a,@0x54
        mov 0x21,a ;賦值
        mov a,0x20
        and a,@0x0f
        mov 0x22,a
        swapa 0x20
        and a,@0x0f
        mov 0x23,a
        mov a,0x21
        and a,@0x0f
        mov 0x24,a
        swapa 0x21
        and a,@0x0f
        mov 0x25,a ;BCD碼展開后存于0X22,0X23,0X24,0X25
        mov a,0x25, ;0X25為最高位
        mov 0x30,a
        mov a,@0x0 ;多字節加法高位為0
        mov 0x31,a
        mov a,0x24
        mov 0x32,a
        call a_b ;調子程
        mov a,0x23
        mov 0x32,a
        call a_b
        mov a,0x22
        mov 0x32,a
        call a_b
        self: jmp self
        a_b:
        mov a,@0x0 ;0X34,0X35存儲中間結果
        mov 0x34,a
        mov 0x35,a
        mov a,@0x0a ;實現乘10
        mov 0x33,a
        a1: mov a,0x35 ;兩字節二進制加法,在本例中高字節肯定無進位
        add a,0x31
        mov 0x35,a
        mov a,0x34
        add a,0x30
        mov 0x34,a
        jbc 0x03,0
        inc 0x35
        djz 0x33
        jmp a1
        mov a,0x32
        add 0x34,a


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 陇南市| 延安市| 同心县| 伊宁县| 红河县| 库尔勒市| 苏州市| 房山区| 肥乡县| 特克斯县| 宁陕县| 怀远县| 长子县| 会同县| 郓城县| 曲沃县| 凌云县| 宝坻区| 巴塘县| 康乐县| 铜鼓县| 四会市| 灵寿县| 七台河市| 宜宾市| 定结县| 科技| 安新县| 巢湖市| 临海市| 潍坊市| 龙江县| 高邮市| 金秀| 佛学| 盐津县| 天长市| 峡江县| 永清县| 壤塘县| 铁力市|