<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        單片機開發中BCD碼調整技巧

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年03月01日   【字體:

         我是SUNNY!本人經過一年多的學習,掌握了很多單片機編程技巧,例如C語言嵌入匯編等。俗話說得好,熟能生巧!的確如此,本人很喜歡鉆研,達到很好的效果。在進行程序編程時,在某些場合,我們要進行BCD碼調整。例如0x09+0x01,其結果是0x0a,因為這個是16進制運算,而這個不是我們想要的結果,我們是要0x10這個結果。那怎么辦呢?其實這些運算在某些地方運用還是比較常見的,比如在時鐘芯片DS1302中就要用到。如果采用轉換10進制的方法來解決,不但程序長,效率低,占用資源也嚴重。如果采用匯編語言就簡單了,匯編語言中已經考慮到這個地方,可以采用DA A這個指令來完成,如下面這個例子:

        假設內存中30H的值為0x09,求加上1后的BCD碼,下面是程序和解釋:
        MOV A,30H 把30H的值先送人累加器A,這時累加器的值為0x09
        ADD A,#01H 累加器的值加上1,這時累加器的值為0x0a
        DA A  累加器BCD碼調整,這時累加器A的值為0x10
        MOV 30H,A 把累加器A的值送回30H,實現BCD調整
        RET

        上面是加法的BCD碼調整,比較簡單,因為匯編語言已經提供了這個功能,但是減法呢?很遺憾,匯編語言并沒有提供減法的BCD碼調整,那是不是就沒轍了呢?答案是否定的!我們知道,一個數如果低位不夠減時,要向高位借1,在51單片機中,其借位標志就是AC,我們可以利用AC是否為1來進行判斷,如果出現借位,就要進行BCD碼調整。但是減法并沒有調整指令,怎么辦?我們知道,16進制與10進制其實只是相差6,只要在發生借位時將值減去6就OK了!哈哈...我是不是很聰明?哈哈...自夸一下!好了,光說沒有用,做出來才是真的!下面看例子:
        假設內存中30H的值為0x10,求減去1的BCD碼。下面是程序和解釋:

        MOV A,30H 將30H的值送人累加器A
        SUBB A,#01H 累加器A的值減去1 ,這時累加器的值為0x0f
        JB AC,NEXT 判斷借位標志,如果為1說明發生借位,進行下一步處理
        MOV 30H,A 借位為0,直接送回30H
        RET
        NEXT:
        SUBB A,#06H 發生借位,減去6,調整為BCD碼,這時累加器A的值為0x09
        MOV 30H,A  把值送回30H,OK!搞定
        CLR AC 清除標志位,以便下次使用
        RET

        上面的兩個例子經過本人實踐運用,十分有用,大家可以參考一下!

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮