《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > PIC單片機的BCD碼處理程序

PIC單片機的BCD碼處理程序

2009-01-16
關鍵詞: PIC 源代碼

PIC單片機的BCD碼處理程序

#define PAGE    EJECT

    TITLE   "BCD Arithmetic Routines : Ver 1.0"

;*******************************************************************
;                      BCD Arithmetic Routines
;*******************************************************************

 LIST     columns=120, WRAP, L=0

 include "17c42.h"

 CBLOCK   0x20
  Lbyte, Hbyte
  R2, R1, R0             ;must maintain R2, R1, R0 sequence
  count
  Num1, Num2
 ENDC
;
BCD     equ      Num1
Htemp   equ      Num1
Ltemp   equ      Num2
;
 PAGE

 ORG     0x0000
;*******************************************************************
;                      BCD Arithmetic Test Program
;*******************************************************************
;
main
 setf     Hbyte
 setf     Lbyte
;                               ; 16 bit binary num = 0xffff
 call    B2_BCD_Looped   ; after conversion the Decimal Num
;                               ; in R0, R1, R2 = 06,55,35
 setf     Hbyte
 setf     Lbyte
 call    B2_BCD_Straight ; same as above, but straight line code
;
 movlw    0x06
 movwf     R0
 movlw    0x55
 movwf     R1
 movlw    0x35
 movwf     R2              ; setf R0R1R2 = 65535
;
 call    BCDtoB          ; after conversion Hbyte = 0xff
;                               ; and Lbyte = 0xff
 movlw    0x99
 movwf     Num1
 movlw    0x99
 movwf     Num2            ; setf Num1 = Num2 = 0x99 (max BCD)
;
 call    BCDAdd          ; after addition, Num2 = 98
;                               ; and Num1 = 01 ( 99+99 = 198)
;
 movlw    0x63            ; setf Wreg = 63 hex
 call    BinBCD          ; after conversion, BCD = 99
;                               ; 63 hex = 99 decimal.
;
self    goto    self
;
 PAGE
;*******************************************************************;
;                  Binary To BCD Conversion Routine (8 bit)
;
;       This routine converts the 8 bit binary number in the W Reg
; to a 2 digit BCD number in location BCD( compacted BCD Code)
;       The least significant digit is returned in location LSD and
; the most significant digit is returned in location MSD.
;
;   Performance :
;               Program Memory  :  10
;               Clock Cycles    :  62  (worst case when W = 63 Hex )
;                                      ( i.e max Decimal number 99 )
;*******************************************************************
;
BinBCD
 clrf     BCD
again
 addlw    -10
 btfss      _carry
 goto    swapBCD
 incf     BCD
 goto    again
swapBCD
 addlw    10
 swapf    BCD
 iorwf     BCD
 return
;
 PAGE
;********************************************************************
;                Binary To BCD Conversion Routine (16 Bit)
;                       (LOOPED Version)
;
;      This routine converts a 16 Bit binary Number to a 5 Digit
; BCD Number.
;
;       The 16 bit binary number is input in locations Hbyte and
; Lbyte with the high byte in Hbyte.
;       The 5 digit BCD number is returned in R0, R1 and R2 with R0
; containing the MSD in its right most nibble.
;
;   Performance :
;               Program Memory  :  32
;               Clock Cycles    :  750
;
;*******************************************************************;
;
B2_BCD_Looped
 bsf      _fs0
 bsf      _fs1            ; set fsr0 for no auto increment
;
 bcf      _carry
 clrf     count
 bsf      count,4         ; set count = 16
 clrf     R0
 clrf     R1
 clrf     R2
loop16a
 rlcf     Lbyte
 rlcf     Hbyte
 rlcf     R2
 rlcf     R1
 rlcf     R0
;
 dcfsnz   count
 return
adjDEC
 movlw    R2              ; load R2 as indirect address ptr
 movwf     fsr0
 call    adjBCD
;
 incf     fsr0
 call    adjBCD
;
 incf     fsr0
 call    adjBCD
;
 goto    loop16a
;
adjBCD
 movfp    indf0,wreg
 addlw    0x03
 btfsc      wreg,3          ; test if result > 7
 movwf     indf0
 movfp    indf0,wreg
 addlw    0x30
 btfsc      wreg,7          ; test if result > 7
 movwf     indf0           ; save as MSD
 return
;
;********************************************************************
;                Binary To BCD Conversion Routine (16 Bit)
;                       (Partial Straight Line Version)
;
;      This routine converts a 16 Bit binary Number to a 5 Digit
; BCD Number.
;
;       The 16 bit binary number is input in locations Hbyte and
; Lbyte with the high byte in Hbyte.
;       The 5 digit BCD number is returned in R0, R1 and R2 with R0
; containing the MSD in its right most nibble.
;
;   Performance :
;               Program Memory  :  44
;               Clock Cycles    :  572
;
;*******************************************************************;
;
B2_BCD_Straight
 bsf      _fs0
 bsf      _fs1            ; set fsr0 for no auto increment
;
 bcf      _carry
 clrf     count
 bsf      count,4         ; set count = 16
 clrf     R0
 clrf     R1
 clrf     R2
loop16b
 rlcf     Lbyte
 rlcf     Hbyte
 rlcf     R2
 rlcf     R1
 rlcf     R0
;
 dcfsnz   count
 return                   ; DONE
 movlw    R2              ; load R2 as indirect address ptr
 movwf    fsr0
; adjustBCD
 movfp    indf0,wreg
 addlw    0x03
 btfsc    wreg,3          ; test if result > 7
 movwf    indf0
 movfp    indf0,wreg
 addlw    0x30
 btfsc    wreg,7          ; test if result > 7
 movwf    indf0           ; save as MSD
;
 incf     fsr0
; adjustBCD
 movfp    indf0,wreg
 addlw    0x03
 btfsc    wreg,3          ; test if result > 7
 movwf    indf0
 movfp    indf0,wreg
 addlw    0x30
 btfsc    wreg,7          ; test if result > 7
 movwf    indf0           ; save as MSD
;
 incf     fsr0
; adjustBCD
 movfp    indf0,wreg
 addlw    0x03
 btfsc    wreg,3          ; test if result > 7
 movwf    indf0
 movfp    indf0,wreg
 addlw    0x30
 btfsc    wreg,7          ; test if result > 7
 movwf    indf0           ; save as MSD
;
 goto    loop16b
;
 PAGE
;*********************************************************
;               BCD To Binary Conversion
;
;       This routine converts a 5 digit BCD number to a 16 bit binary
; number.
;       The input 5 digit BCD numbers are asumed to be in locations
; R0, R1 & R2 with R0 containing the MSD in its right most nibble.
;
;       The 16 bit binary number is output in registers Hbyte & Lbyte
; ( high byte & low byte repectively ).
;
;       The method used for conversion is :
;               input number X = abcde ( the 5 digit BCD number )
;       X = (R0,R1,R2) = abcde = 10[10[10[10a+b]+c]+d]+e
;
;   Performance :
;               Program Memory  :  30
;               Clock Cycles    :  112
;
;***********************************************;
;
mpy10b
 andlw    0x0f
 addwf     Lbyte
 btfsc      _carry
 incf     Hbyte
mpy10a
 bcf      _carry          ; multiply by 2
 rlcf     Lbyte,w
 movwf     Ltemp
 rlcf     Hbyte,w         ; (Htemp,Ltemp) = 2*N
 movwf     Htemp
;
 bcf      _carry          ; multiply by 2
 rlcf     Lbyte
 rlcf     Hbyte
 bcf      _carry          ; multiply by 2
 rlcf     Lbyte
 rlcf     Hbyte
 bcf      _carry          ; multiply by 2
 rlcf     Lbyte
 rlcf     Hbyte     ; (Hbyte,Lbyte) = 8*N
;
 movfp    Ltemp,wreg
 addwf     Lbyte
 movfp    Htemp,wreg
 addwfc    Hbyte
 return                     ; (Hbyte,Lbyte) = 10*N
;
;
BCDtoB
 clrf     Hbyte
 movfp    R0,wreg
 andlw    0x0f
 movwf     Lbyte
 call    mpy10a          ; result = 10a+b
;
 swapf    R1,w
 call    mpy10b          ; result = 10[10a+b]
;
 movfp    R1,wreg
 call    mpy10b          ; result = 10[10[10a+b]+c]
;
 swapf    R2,w
 call    mpy10b          ; result = 10[10[10[10a+b]+c]+d]
;
 movfp    R2,wreg
 andlw    0x0f
 addwf     Lbyte
 btfsc      _carry
 incf     Hbyte           ; result = 10[10[10[10a+b]+c]+d]+e
 return                  ; BCD to binary conversion done
;
 PAGE
;***********************************************;
;
;                 Unsigned BCD Addition
;
;       This routine performs a 2 Digit Unsigned BCD Addition
; It is assumed that the two BCD numbers to be added are in
; locations Num1 & Num2. The result is the sum of Num1+Num2
; and is stored in location Num2 and the overflow carry is returned
; in location Num1
;
;   Performance :
;               Program Memory  :       5
;               Clock Cycles    :       5
;
;*****************************************;
;
BCDAdd
 movfp    Num1,wreg
 addwf     Num2,w          ; perform binary addition
 daw     Num2      ; adjust for BCD addition
 clrf     Num1
 rlcf     Num1      ; set Num1 = carry bit
 return
;
;******************************************************
;
 END

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲欧美成aⅴ人在线观看| 国内精品久久久| 欧美日韩亚洲高清| 精品999久久久| 亚洲在线观看免费| 欧美成人免费全部观看天天性色| 亚洲综合久久久久| 久久精品免费电影| 国产专区精品视频| 蜜臀av国产精品久久久久| 亚洲国产成人精品久久久国产成人一区| 一区二区日韩精品| 久久精品盗摄| 亚洲缚视频在线观看| 欧美日韩午夜剧场| 美女日韩在线中文字幕| 亚洲欧美日韩中文播放| 久久精品日产第一区二区三区| 欧美在线精品免播放器视频| 99在线精品免费视频九九视| 美女诱惑一区| 欧美日韩国产在线播放网站| 久久国产乱子精品免费女| 亚洲高清久久| 国产精品国产三级国产aⅴ9色| 欧美一区二区三区视频免费| 欧美成人一区二免费视频软件| 亚洲精品美女在线| 国产精品日本欧美一区二区三区| 女人香蕉久久**毛片精品| 狠狠色狠色综合曰曰| 一区二区电影免费在线观看| 欧美一区二区三区免费在线看| 一本色道久久综合狠狠躁篇的优点| 久久艳片www.17c.com| 亚洲人成人77777线观看| 欧美日韩1区2区3区| 欧美伊人久久久久久午夜久久久久| 日韩系列在线| 国产精品一区二区a| 久久蜜桃香蕉精品一区二区三区| 欧美中文在线观看| 在线视频日韩| 亚洲深夜福利视频| 亚洲欧美国产高清| 久久精品国内一区二区三区| 欧美中在线观看| 久久裸体视频| 亚洲欧美日韩精品久久| 亚洲一区二区精品视频| 欧美影院视频| 久久综合精品一区| 亚洲经典在线看| 亚洲精品中文字幕有码专区| 中日韩在线视频| 久久精品中文字幕免费mv| 亚洲精品日韩激情在线电影| 亚洲免费精品| 欧美激情亚洲精品| 亚洲欧美成人在线| 国内精品久久久久久久97牛牛| 伊人夜夜躁av伊人久久| 国产精品久久777777毛茸茸| 日韩亚洲在线观看| 欧美精品videossex性护士| 激情久久婷婷| 在线观看国产成人av片| 欧美日韩性视频在线| 欧美在线观看一区| 久久久久久久综合| 国产麻豆视频精品| 国产在线不卡视频| 国产模特精品视频久久久久| 欧美三日本三级少妇三2023| 久久久久久久综合狠狠综合| 91久久精品国产91久久性色| 亚洲性线免费观看视频成熟| 国产午夜久久| 国产精品成人免费| 亚洲小视频在线| 激情久久影院| 欧美日韩精品综合在线| 久久久av水蜜桃| 模特精品在线| 在线成人av网站| 亚洲欧美在线免费观看| 欧美人体xx| 亚洲免费在线观看| 欧美一区二区免费观在线| 久久免费精品日本久久中文字幕| 国产亚洲成人一区| 久久综合婷婷| 欧美视频中文一区二区三区在线观看| 欧美激情一区在线观看| 亚洲无玛一区| 亚洲欧美电影在线观看| 日韩视频不卡| 久久久久国产一区二区三区| 国产精品资源在线观看| 免费在线成人| 西西裸体人体做爰大胆久久久| 国内精品伊人久久久久av影院| 欧美va天堂va视频va在线| 欧美三级韩国三级日本三斤| 亚洲精品乱码久久久久久日本蜜臀| 国产日韩亚洲欧美综合| 一区二区三区精品视频在线观看| 亚洲综合欧美| 一区二区三区www| 伊人精品视频| 国产日韩欧美视频| 欧美成人精品三级在线观看| 国产精品一区二区三区免费观看| 免费在线观看成人av| 在线日韩视频| 午夜精品久久久久久久| 国产精品日韩欧美大师| 亚洲精品日韩精品| 亚洲欧美中文日韩在线| 两个人的视频www国产精品| 一区二区三区 在线观看视频| 亚洲国产清纯| 久久一区欧美| 欧美综合第一页| 国产视频丨精品|在线观看| 欧美日韩三级视频| 久久精品在线视频| 欧美另类99xxxxx| 女仆av观看一区| 久久先锋影音av| 激情亚洲一区二区三区四区| 一本色道久久综合亚洲精品不卡| 国产亚洲一区二区精品| 欧美在线视频观看| 午夜精品免费| 欧美区二区三区| 蜜桃精品一区二区三区| 亚洲精品久久久蜜桃| 国产一区二区三区免费不卡| 中文国产成人精品久久一| 一区二区久久久久久| 欧美亚洲系列| 性一交一乱一区二区洋洋av| 欧美88av| 亚洲国产欧美一区二区三区同亚洲| 午夜精品视频在线观看一区二区| 久久精品一区二区三区不卡牛牛| 国产麻豆日韩欧美久久| 日韩一级黄色av| 狼狼综合久久久久综合网| 性欧美videos另类喷潮| 国产精品综合视频| 欧美色网在线| 亚洲永久免费视频| 免费观看成人鲁鲁鲁鲁鲁视频| 午夜精品亚洲| 久久精品综合| 亚洲国产精品日韩| 欧美成人r级一区二区三区| 欧美视频在线观看| 亚洲欧美日韩国产中文在线| 亚洲理伦电影| 亚洲高清在线观看| 欧美一级播放| 亚洲国产精品视频一区| 136国产福利精品导航网址应用| 美女日韩在线中文字幕| 久久久精品五月天| 欧美一区二区在线播放| 韩国一区二区三区在线观看| 亚洲欧美日韩国产一区| 国产精品久久久久久久电影| 亚洲欧美日韩在线| 欧美一区二区三区四区高清| 亚洲经典视频在线观看| 亚洲第一区中文99精品| 日韩一级视频免费观看在线| 欧美午夜电影在线观看| 欧美日韩国产精品成人| 激情综合在线| 欧美精品激情在线| 国产欧美一区二区三区在线看蜜臀| 欧美韩日亚洲| 国产精品一区在线播放| 国产精品性做久久久久久| 国产乱码精品1区2区3区| 亚洲片区在线| 欧美日韩精品一区视频| 国产乱码精品一区二区三区不卡| 久久综合色8888| 欧美日韩国产高清| 免费欧美视频| 韩国精品主播一区二区在线观看| 在线成人欧美| 1024国产精品| 国产美女诱惑一区二区| 在线观看91精品国产入口| 国模私拍视频一区| 久久视频在线视频| 久久视频一区二区| 国产日韩欧美不卡在线| 另类图片综合电影| 在线不卡中文字幕| 亚洲激情第一区| 亚洲国产视频直播| 欧美激情综合亚洲一二区| 亚洲三级国产| 国产真实乱子伦精品视频| 国产精品成人国产乱一区| 亚洲欧美在线播放| 欧美日韩一区不卡| 日韩视频在线一区二区三区| 国产精品美女久久久浪潮软件| 亚洲视频香蕉人妖| 欧美性生交xxxxx久久久| 亚洲欧美日韩在线高清直播| 黄色成人av网| 亚洲欧美另类国产| 久久久www成人免费精品| 亚洲欧洲精品天堂一级| 在线综合欧美| 欧美va天堂va视频va在线| 一本色道**综合亚洲精品蜜桃冫| 黄色日韩网站视频| 亚洲欧洲综合| 牛人盗摄一区二区三区视频| 久久福利一区| 欧美成人亚洲成人日韩成人| 久久久久国产精品人| 欧美国产激情| 在线观看日产精品| 国产日韩欧美电影在线观看| 国产精品色婷婷久久58| 午夜一区在线| 亚洲国产日韩一级| 伊人成年综合电影网| 麻豆亚洲精品| 女人香蕉久久**毛片精品| 久热精品视频在线免费观看| 亚洲国产日韩美| 久久午夜影视| 欧美一区二区在线看| 亚洲精选在线| 欧美日韩免费观看中文| 一色屋精品视频免费看| 欧美日本一区二区高清播放视频| 国产亚洲精品7777| 另类图片国产| 日韩视频免费观看高清在线视频| 国产精品福利网站| 欧美福利视频在线| 国产精品丝袜久久久久久app| 国产亚洲欧美aaaa| 亚洲美洲欧洲综合国产一区| 亚洲国产精品久久久久秋霞不卡| aaa亚洲精品一二三区| 国产精品永久免费在线| 在线视频欧美精品| 99国产精品久久| 国产精品高潮呻吟| 亚洲欧美日韩综合aⅴ视频| 国产精品一级二级三级| 亚洲精品一区二区三区婷婷月| 久久久久一本一区二区青青蜜月| 久久久99爱| 亚洲成人在线免费| 欧美日韩午夜在线| 你懂的国产精品| 亚洲人成啪啪网站| 国产视频一区二区在线观看| 亚洲一区欧美二区| 欧美另类一区| 国产精品电影观看| 国产精品久久久久久久久久免费| 国产精品久久久久久久久搜平片| 欧美日韩免费| 国产亚洲视频在线| 久久精品国产免费观看| 亚洲欧洲一级| 久久久久久亚洲精品杨幂换脸| 欧美区在线观看| 亚洲欧美在线网| 欧美激情免费在线| 夜夜躁日日躁狠狠久久88av| 亚洲尤物在线| 亚洲一区二区三区四区五区黄| 亚洲免费在线视频一区 二区| 亚洲精品在线视频观看| 国产精品一二| 国产精品日日摸夜夜摸av| 尤物在线观看一区| 国产精品xxx在线观看www| 另类专区欧美制服同性| 永久免费视频成人| 欧美国产视频一区二区| 久久av红桃一区二区小说| 欧美日韩一区精品| 国产欧美va欧美va香蕉在| 久久综合狠狠| 亚洲天堂男人| 亚洲一区二区在线免费观看| 国产精品男人爽免费视频1| 欧美日韩一区二区三区视频| 国产精品视频第一区| 欧美一区=区| 女人色偷偷aa久久天堂| 亚洲一级影院| 9色porny自拍视频一区二区| 欧美精品久久99| 欧美日韩综合视频网址| 午夜久久久久久久久久一区二区| 免费不卡中文字幕视频| 免费成人av资源网| 一区二区免费在线视频| 国产精品美腿一区在线看| 一区二区高清在线| 在线播放豆国产99亚洲| 在线日本高清免费不卡| 亚洲国产精品激情在线观看| 精品动漫3d一区二区三区免费| 欧美日本高清视频| 亚洲一区二区三区四区在线观看| 欧美伦理91i| 亚洲精品国产精品乱码不99| 亚洲女女做受ⅹxx高潮| 久久免费精品日本久久中文字幕| 韩日欧美一区二区三区| 久久尤物电影视频在线观看|