久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> 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

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

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲九九色| 不卡av电影在线播放 | 九九热精品视频在线观看 | 欧美久久免费观看 | 精品1区 | 国精产品一区一区三区免费完 | 国产成人小视频 | 嫩草黄色影院 | 日韩欧美国产一区二区三区 | 国产中文| 国产在线精品一区二区三区 | 中文字幕 在线观看 | 伊人久久精品 | 视频精品一区 | av大片| 亚洲成av人片在线观看无码 | 久久99视频 | 精品欧美黑人一区二区三区 | 综合国产第二页 | 四虎国产 | 国产精品久久久久久婷婷天堂 | 亚洲影音| 九九久久在线看 | 免费在线观看一区二区 | 激情一区二区三区 | 夜夜操操操 | 一级片免费视频 | 亚洲精品99 | 亚洲第一成年免费网站 | 日本免费一区二区三区四区 | 亚洲日产精品 | 国产午夜精品一区二区三区嫩草 | 在线黄色影院 | 久久伊人精品 | 日本午夜精品 | 日韩电影免费在线观看中文字幕 | 国产亚洲精品美女久久久久久久久久 | 国产极品车模吞精高潮呻吟 | 亚洲精品视频在线看 | 中文字幕精品一区二区三区精品 | 国产99久久久国产精品 |