1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      EM78系列源程序

      更新時間: 2006-05-20 11:07:35來源: 粵嵌教育瀏覽量:1570

       一 二進制數轉換為ASCⅡ碼
        將一個字節的二進制數轉換為兩位16進制數的ASCⅡ碼
        main: mov  a,@0x9f  ;二進制數為0x9f
              mov  0x30,a  ;二進制數存入0x30
       mov  a,@0x02
       mov  0x10,a  ;0x10中存放轉換次數
       mov  a,@0x31
       mov  0x04,a  ;0x04中為轉換后數據存放地址
       mov  a,0x30
       B1:  and  a,@0x0f  ;取a低4位
       mov  0x00,a
       sub  a,@0x09  ;低4位大于9跳往B2
       jbs  0x03,0
       jmp  B2
       mov  a,0x00  ;低4位不大于9則加0x30
       add  a,@0x30
       mov  0x00,a  ;將ASCⅡ碼存入0X04所指單元
       jmp  B3
       B2:  mov  a,0x00  ;大于9則加0X37
       add  a,@0x37
       mov  0x00,a
       B3:  swapa 0x30   ;將0X30高4位換入A低4位
       inc  0x04   ;存儲地址加1
       djz  0x10   ;循環次數減1,為0則返回
       jmp  B1   ;不為0繼續轉換
       self:  jmp  self
       eop
       
       二 多字節二進制加法
       
       0X20,0X21中的二進制無符號數與0X22,0X23中的二進制無符號數相加,結果放在0X24,0X25,0X26中,低地址中放低字節數據。
        Main: mov   a,@0x78  ;賦值
       mov  0x20,a
       mov  a,@0xc6
       mov  0x21,a
       mov  a,@0x86
       mov  0x22,a
       mov  a,@0x9e
       mov  0x23,a
       mov  a,@0x0   ;0x26單元清0
       mov  0x26,a
       mov  a,0x21
       add  a,0x23
       mov  0x25,a   ;高字節相加,結果送0x25
       jbc  0x03,0
       inc  0x26    ; 有進位則0x26加1
       mov  a,0x20
       add  a,0x22
       mov  0x24,a   ;低字節相加,結果送0x24
       jbs  0x03,0
       jmp   self    ;無進位跳self
       inc  0x25    ;有進位0x25加1
       jbc  0x03,0
       inc  0x26    ; 有進位0x26加1
       self:   jmp  self
       eop
       三 多字節二進制減法
        0x20,0x21中的二進制無符號數減0x22,0x23中的二進制無符號數,
       低地址中放低字節數據。假設被減數大于減數。
       注意:(1)sub指令減出結果為正時,c標志置1。
        (2)sub指令減出結果為0時,c標志也置1。
       即,sub指令執行后,c標志清0表示結果為負。
       main: mov  a,@0x67 ;賦值
       mov  0x20,a
       mov  a,@0xff
       mov  0x21,a
       mov  a,@0xe8
       mov  0x22,a
       mov  a,@0x44
       mov  0x23,a  ; 高字節相減
       sub  a,0x21
       mov  0x25,a  ;結果存0x25
       mov  a,0x22  ;低字節相減
       sub  a,0x20
       mov  0x24,a
       jbs  0x03,0
       dec  0x25   ;有借位則0x25減1
       self:  jmp  self
       eop
       四 二進制乘法運算
       
       EM78單片機沒有乘法指令,所以乘法運算需要轉化為加法運算。0X20單元數據乘以0X21單元數據,結果放在0X22,0X23中。
       main: mov  a,@0x0  ;0x22,0x23單元清0
       mov  0x22,a
       mov  0x23,a
       mov  a,@0x3f  ;賦值
       mov  0x20,a
       mov  a,@0x22
       mov  0x21,a
       mul1: mov  a,0x20  ;0x20與0x22內容相加
       add  0x22,a
       jbc  0x03,0
       inc  0x23   ;有進位0x23加1
       djz  0x21   ;0x21中次數減到0則結束
       jmp  mul1  ;沒減到0則繼續
       self:  jmp  self
       eop
       五 二進制除法運算
       多字節二進制除法
       被除數為3個字節,在0x20、0x21、0x22單元中,0x22.7為位,0x20.0為位。
       除數為2個字節,在0x30、0x31中。
       算法:EM78單片機沒有除法指令,而且本例中除法為多字節除法,可采用如下算法。
       將被除數擴充一個字節0X23,0X23清0。被除數左移1位,0X23、0X22中數據減去0X31、0X30中數據,夠減則減且0X20.0置1,減出結果存入0X23、0X22;不夠減則0X23、0X22保持不變,0X20.0清0。然后被除數再左移1位,重復上述過程。共循環16次,0X23、0X22中得相減余數,0X21、0X20中得商。注意,若被除數左移后C標志為1,則不比較0X23、0X22與0X31、0X30數據大小關系而直接相減。
       main:  mov  a,@0x55  ;被除數賦值
       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
       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

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 午夜福利免费区久久 | 中文字幕aⅴ天堂在线 | 在线播放日本免费人成视频在线观看 | 日韩精品码在线一区 | 一级国产片在线观看免费 | 天天免费在线视频网 |