標籤:數值 定址 cfs top 指令 指定 單元 main swa
順序程式結構
將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寄存器地址為03HC 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寄存器地址為04HINDF 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 03HC EQU 00HX EQU 20HY EQU 21HZ 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 40HSTOP 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 ;再將它轉存到ZTHEEND RETURN ;子程式返回
PIC彙編入門樣本