PIC中檔單片機彙編指令詳解(3)

ADDWF W寄存器內容和f數據寄存器內容相加oop

語法形式:ADDWF f,d變量

操做數:f爲數據寄存器的低7位地址(0x00~0x7F)循環

d爲目的寄存器的低7位地址(0x00~0x7F)語法

當d=f時,結果放在f數據寄存器,W寄存器的內容不變程序

當d=W時,結果放在W寄存器中,f數據寄存器的內容不變數據

執行時間:一個指令週期時間

執行過程:【f】+【W】→d分支

狀態標誌影響:Z DC C

說明:數據寄存器內容和W寄存器內容相加,結果放入d指定的地方

指令範例:

MOVLW 0x55 ;W=0x55,假定Sum=0xAA

ADDWF Sum,f ;W不變,Sum=0xFF

MOVF 傳送f數據寄存器的內容到目的寄存器

語法形式:MOVF f,d

操做數:f爲數據寄存器的低7位地址(0x00~0x7F)

d爲目的寄存器的低7位地址(0x00~0x7F)

當d=f時,把數據寄存器的內容放回本身自己,目的用於判斷數據寄存器的內容是否爲0。

當d=W時,結果放在W寄存器中,將數據寄存器f的內容傳送至W寄存器

執行時間:一個指令週期

執行過程:【f】→d

狀態標誌影響:Z

說明:將數據寄存器的內容傳送至它處,或者對f數據寄存器的內容作判0操做,若是傳送的數據是0,則置位Z標誌。

指令範例:

例1:數據傳送

MOVF Var1,W ;Var1內容傳送至W寄存器

MOVWF Var2 ;W寄存器內容傳送至Var2,此時Var1=Var2

例2:數據判0

MOVF Var3,f ;Var3寄存器內容被送往自身,其餘寄存器內容不變,可是影 響Z標誌

BTFSC STATUS,Z ;若是Var3不等於0,則跳過下一條指令

GOTO Var3Zero ;若是Var3等於0,則轉向其餘操做

COMF f數據寄存器內容取反

語法形式:COMF f,d

操做數:f爲數據寄存器的低7位地址(0x00~0x7F)

d爲目的寄存器的低7位地址(0x00~0x7F)

當d=f時,結果放在f數據寄存器,W寄存器的內容不變

當d=W時,結果放在W寄存器中,f數據寄存器的內容不變

執行時間:一個指令週期

執行過程:!【f】→d

狀態標誌影響:Z

說明:求數據寄存器內容的反碼,求一個數的補碼能夠使用這個指令完成(按位求反再加一)

指令範例:

COMF num,f ;對num變量取反碼

INCF num,f ;反碼加1就是其補碼

DECFSZ 數據寄存器內容遞減1,並做判0標誌

語法形式:DECFSZ f,d

操做數:f爲數據寄存器的低7位地址(0x00~0x7F)

d爲目的寄存器的低7位地址(0x00~0x7F)

當d=f時,結果放在f數據寄存器,W寄存器的內容不變

當d=W時,結果放在W寄存器中,f數據寄存器的內容不變

執行時間:一個指令週期或兩個指令週期

執行過程:【f】-1→d

狀態標誌影響:Z

說明:該指令將首先將f數據寄存器的內容作減1運算,結果放到d指定的目的地址內,同時它還會對Z標誌進行判0操做(進行分支跳轉控制);若是f數據寄存器減1後結果非0,那麼Z=0,程序將順序執行下一條指令,本次指令操做耗費一個指令週期;若是結果爲0,那麼Z=1,此時程序將會跳過緊跟其後的第一條指令,去執行緊跟其後的第二條指令,本次指令操做耗費兩個指令週期。該指令經常使用於計數次數或者循環次數的控制。

指令範例:

  MOVLW 0x10 ;準備給循環計數器賦初值

  MOVWF Count ;此時循環計數器Count=0x10

Loop:DECFSZ Count,f ;Count遞減1,結果放入Count中,並進行Z標誌判   GOTO  Loop ;斷,若是遞減後結果不爲0,繼續執行Loop操做, ;總共循環0x10(16進制)次。

  NOP ;若是遞減後結果爲0,就跳到這條指令

相關文章
相關標籤/搜索