新聞中心

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

        基于EM78系列單片機的數值轉換子程序

        作者: 時間:2012-07-18 來源:網絡 收藏

        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
        jbc 0x03,0
        inc 0x35
        mov a,0x34
        mov 0x30,a
        mov a,0x35
        mov 0x31,a
        ret
        eop
        七 二進制數轉換為BCD碼
        本例為單字節二進制數(0X20)轉換為非壓縮BCD碼,存在0X25,0X24,0X23中,0X25為百位,0X23為個位。
        main: mov a,@0xa4 ;賦值
        mov 0x20,a
        mov 0x21,a
        mov 0x22,a
        mov a,@0x0 ;0x23,0x24,0x25單元清0
        mov 0x23,a
        mov 0x24,a
        mov 0x25,a
        mov a,@0x64 ;對100的個數計數
        mov 0x26,a
        mov a,@0x25 ;百位存在0x25中
        mov 0x04,a
        call a0 ;調計數子程
        mov a,@0x0a ;對10的個數計數
        mov 0x26,a
        dec 0x04 ;個位存在0x24中
        call a0
        mov a,0x22 ;除去百位,十位,余下的即個位,存入0x23
        mov 0x23,a
        self: jmp self
        a0: ;計數子程
        mov a,0x26
        sub 0x22,a
        jbs 0x03,2
        jmp a1
        inc 0x00 ;無余數則對應位加1
        mov a,@0x0 ;0x21與0x22在返回時應保持相同
        mov 0x21,a
        ret
        a1: jbs 0x03,0 ;小于則跳a2
        jmp a2
        inc 0x00 ;大于則計加1
        mov a,0x22
        mov 0x21,a ;將0x22保存到0x21中
        jmp a0 ;跳回a0繼續計數
        a2: mov a,0x21 ;0x21中保存的減之前的數據,此時恢復到0x22
        mov 0x22,a
        ret
        eop

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

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 康乐县| 女性| 盐津县| 乳源| 犍为县| 肥东县| 乌拉特后旗| 常熟市| 阆中市| 长葛市| 乐清市| 连城县| 阿城市| 博乐市| 东乡族自治县| 山阳县| 自贡市| 义马市| 出国| 阳东县| 磐石市| 无极县| 博湖县| 寻乌县| 天水市| 金寨县| 永胜县| 芜湖市| 大邑县| 宁晋县| 泰顺县| 孝感市| 屯昌县| 新竹市| 临汾市| 仙居县| 上杭县| 浮山县| 武功县| 工布江达县| 盖州市|