PIC匯編入門示例


順序程序結構

將20H單元低4位取出存入21H,高四位取出存入22H
要點:ANDLW和SWAPF

  MOVF     20H,0      ;將20H單元的內容送人W
  ANDLW    0FH        ;W高四位清零低4位保持不變
  MOVWF    21H        ;將拆分后的低4位送21H
  SWAPF    20H,0      ;將20H單元內容高、低半字節換位后送W

  ANDLW    0FH        ;再將W高四位清0低四位保持不變
  MOVWF    22H        ;將拆分后的高四位送22H單元

分支程序結構

RAM中20H和21H單元存放2個數,找出大着存入22H單元
要點:兩數做減法,判斷標志位C的值

STATUS    EQU      03H      ;定義STATUS寄存器地址為03H
C         EQU      0        ;定義進位/借位標志C在STATUS中得地址為0
          MOVF     20H 0    ;將20H單元的內容送人W
          SUBWF    21H 0    ;用21H單元的內容減去W中的內容,結果存在W中
          BTFSS    STATUS,C ;若C=1,沒借位,則21H單元中的數大,跳到F21BIG
          GOTO     F20BIG   ;若C=0,有借位,20H單元中得數較大,則跳至F20BIG
    
F21BIG    MOVF    21H,0     ;將21H中的內容存入W寄存器
          MOVWF   22H       ;再將它轉存到22H單元
          GOTO    STOP      ;跳過下面兩條指令到程序末尾
        
F20BIG    MOVF    20H,0     ;將20H中的內容存入W寄存器
          MOVWF   22H       ;再將它轉存到22H單元

STOP      GOTO    STOP      ;任務完成,停機,原地踏步

循環程序結構

數據存儲器中,從地址30H開始的50個單元全部寫入00H
要點:間接尋址寄存器FSR當做地址指針

COUNT   EQU      20H        ;指定20H單元作為循壞次數計數器(即循環變量)
FSR     EQU      04H        ;定義FSR寄存器地址為04H
INDF    EQU      00H        ;設定INDF寄存器地址為00H
        MOVLW    D50        ;把計數器初值50送入W
        MOVWF    COUNT      ;再把50轉入計數器(作為循環變量的操作值)
        MOVLW    30H        ;把30H(起始地址)送入W
        MOVWF    FSR        ;再把30H轉入寄存器FSR(用作地址指針)
        
NEXT    CLRF     INDF       ;把以FSR內容為地址所指定的單元清0
        INCF     FSR,1      ;地址指針內容加1,指向下一單元
        DECFSZ   COUNT,1    ;計數值減1,結果為0就跳過到下一條指令到STOP處
        GOTO     NEXT       ;跳轉回去並執行下一次循環
STOP    GOTO     STOP       ;循環結束之后執行該語句,實現停機

子程序結構

3個數最大者放入40H單元

STATUS    EQU        03H
C         EQU        00H
X         EQU        20H
Y         EQU        21H
Z         EQU        22H

主程序

MAIN    MOVF    30H,0
        MOVWF   X
        MOVF    21H,0
        MOVWF   Y
        CALL    SUB
        MOVF    Z,0
        MOVWF   X
        MOVF    32H,0
        MOVWF   Y
        CALL    SUB
        MOVF    Z,0
        MOVWF   40H
STOP    GOTO    STOP

子程序

子程序:(入口參數:X和Y,出口參數:Z)

SUB     MOVF     X,0        ;將X內容送人W
        SUBWF    Y,0        ;Y內容減去W內容,結果存入W
        BTFSS    STATUS,C   ;若C=1,沒有發生借位,執行下一條,否則跳轉
        GOTO     X_BIG        
        
Y_BIG   MOVF    Y,0         ;將Y中的數據送入W
        MOVWF    Z          ;再將它轉存到Z
        GOTO     THEEND     ;跳過下面兩條到末尾
        
X_BIG   MOVF    X,0         ;將X中的數據送入W
        MOVWF    Z          ;再將它轉存到Z
THEEND  RETURN              ;子程序返回


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM