第 5 章 : 汇编语言程序设计 程
汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1
汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2
汇编语言指令格式
汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3
汇编语言指令格式 1 指令 用 指令 程序 子程序 语 4
汇编语言指令格式 用 : 指令 语 用 指令 语 语 方 用 32 第 用系统 系统 用指令 存器 :ADD PCLATH 5
汇编语言指令格式 用 : 用 用 格 用 6
汇编语言指令格式 2 指令 汇编语言语 汇编指令 指令 7
汇编语言指令格式 指令 : 指令 方式 指令 格 格 8
汇编语言指令格式 3 PIC 汇编语言语 式 指令 式 用 9
汇编语言指令格式 168 式 用 式 式 1 式 2 式 H A8 0A8H 0A8 0xA8 D 168 168D 168.168 Q 250 250Q 250 - B 10101000 10101000B 10101000-10
汇编语言指令格式 用 : 用 A B C D E F 0 MPASM 编 用 设 d 用 : F d=1 W d=0 11
汇编语言指令格式 4 用 汇编语言语 程序 12
汇编语言指令格式 用 : 用 指令 用 编 13
系统伪指令
系统伪指令 汇编程序 指令系统语 式指令 语, 伪指令 伪指令汇编 器 程序 汇编 14
1 伪指令 :ORG Origin 格式 :ORG nnnn :ORG 伪指令指 伪指令 器 指令 汇编 汇编 器 程序 程序存储器 存 15
1 伪指令 :ORG Origin 5-1 3 程序 1 ; 2 ORG 0008H 3 START MOVLW 00H 4 ; 5 ABC EQU 08H 6 ORG ABC 7 START MOVLW 00H 8 ; 9 ABC EQU 04H 10 ORG ABC+4 11 START MOVLW 00H 12 ; 16
2 伪指令 :EQU Equate 格式 : EQU nn : EQU 伪指令 程序 用 EQU PIC 程序设计 存储器 EQU PIC 存器 常 用 存储器 17
2 伪指令 :EQU Equate ABC EQU 20H 伪指令 :ABC EQU 20H ABC ABC 20H 常 ABC 常 20H 用 指令 18
2 伪指令 :EQU Equate 5-2 常 系 1 ABC EQU 20H 2 ORG 0000H 3 NOP 4 MOVLW 77H 5 MOVWF 20H 6 MOVLW 88H 7 MOVF ABC,0 8 MOVLW ABC 9 NOP 10 END 19
3 程序 伪指令 :END 格式 :END : END 伪指令 汇编语言 程序 *.ASM MPASM 汇编器汇编 END 程序 程序 汇编 20
4 选 伪指令 :LIST 格式 :LIST [ 选 选 ] : LIST 伪指令用 设 汇编 汇编 程 格式 1 P < 设 器 > :P 16F877 2 R < > :R DEC R HEX R BIN 21
5 程序伪指令 :INCLUDE 格式 :INCLUDE : INCLUDE 伪指令 编 指 程序 汇编 编程 :P16F877.INC F877 用 存器 P16F877.INC F877 22
6 伪指令 :DB(DW DE DATA) 格式 :DB(DW DE DATA)< 式 >,< 式 >, : 伪指令用 程序 存 23
6 伪指令 :DB(DW DE DATA) 5-4 伪指令方 0100H 0200H 0300H 0400H 1 ORG 0000H 2 NOP 3 ORG 0100H 4 DB 45H,67H,89H,0ABH,0CDH,0EFH 5 ORG 0200H 6 DB 4567H,89ABH,0CDEFH 7 ORG 0300H 8 DB 'A', 'B', 'C', 'D', 'E', 'F', 'G' 9 ORG 0400H 10 DB "ABCDEFG" 24
6 伪指令 :DB(DW DE DATA) 5-4 伪指令方 0100H 0200H 0300H 0400H 1 ORG 0000H 2 NOP 3 ORG 0100H 4 DE 45H,67H,89H,0ABH,0CDH,0EFH 5 ORG 0200H 6 DE 4567H,89ABH,0CDEFH 7 ORG 0300H 8 DE 'A', 'B', 'C', 'D', 'E', 'F', 'G' 9 ORG 0400H 10 DE "ABCDEFG" 25
6 伪指令 :DB(DW DE DATA) PIC16F877 : DB 方式 DW DATA 方式 方式 DE 方式 方式 26
7 伪指令 :RADIX 格式 :RADIX < 式 > : RADIX 伪指令用 设 MPLAB-ICD 用 方式 MPLAB-ICD 系统 :RADIX DEC RADIX HEX RADIX OCT 27
存储器选择方式
存储器选择方式 PIC 令, 程 程序设计 存储器 选方式 存器 用 存储器 程序存储器 选方式 28
存储器 选方式 F877 存储器 512 存储器 19 存储 选择 512 9 9 方式 方式 : 29
存储器 512 存储器 4 PIC BANK 0 000H 07FH 1 080H 1FFH 2 100H 17FH 3 180H 1FFH 30
1 存储器 指令 器 7 选择 用 STATUS RP1 RP0 器 7 选择 存储器 31
1 存储器 IORWF 26H,W 设 (26H)=0x16 (W)=0x99H 9FH W (d=0) 0x16 26H 指令 32
2 存储器 指令 器 8 存储器 选择 IRP 选择 存储器 33
2 存储器 XORWF INDF, F 指令 指令 00H 00H (INDF) 存 存器 00H 用 34
3 方式 指令 指令 用 35
3 ADDLW 16H 16H W ( 设 99H) (AFH) W 指令 式 :11111100010110 6 指令 8 36
4 存器 指令 存器 存器 37
4 BSF 26H, 4 26H 存器 bit4 1 38
选伪指令 :BANKSEL 1 ABC EQU 20H 2 TEM EQU 21H 3 ORG 0000H 4 NOP 5 BANKSEL ABC 6 MOVLW 00H 7 MOVWF ABC 8 BANKSEL TEM 9 MOVLW 00H 10 MOVWF TEM 39
程序存储器 选择方式 0000H 13 选择 40
程序存储器 选择方式 0000H 13 选择 0004H 13 选择 40
程序存储器 选择方式 0000H 13 选择 0004H 13 选择 指令 存器 指令 1 程序 方 40
程序存储器 选择方式 0000H 13 选择 0004H 13 选择 指令 存器 指令 1 程序 方 PCL 指令 40
程序存储器 选择方式 0000H 13 选择 0004H 13 选择 指令 存器 指令 1 程序 方 PCL 指令 指令方式 GOTO 语 40
程序存储器 选择方式 0000H 13 选择 0004H 13 选择 指令 存器 指令 1 程序 方 PCL 指令 指令方式 GOTO 语 用子程序方式 CALL 语 语 RETRUN RETFIE RETLW 40
程序存储器 选择方式 PCL 指令 41
程序存储器 选择方式 指令 CALL GOTO RETURN RETFIE RETLW 42
选伪指令 :PAGESEL 1 ORG 0100H 2 PAGESEL ABC 3 GOTO ABC 4 5 ORG 1000H 6 ABC MOVLW 00H 7 MOVWF 20H 43
选伪指令 :PAGESEL 5-5 用 方式编 程序 16 00H 0FH 存储器 20H 2FH 44
LIST P=16F877 INCLUDE "P16F877.INC" COUNTER EQU 30H ORG 0000H NOP MOVLW 20H MOVWF FSR CLRF COUNTER LOOP MOVF COUNTER,W CALL CHABIAO MOVWF INDF INCF COUNTER INCF FSR BTFSS COUNTER,4 GOTO LOOP GOTO $ CHABIAO ADDWF PCL,F RETLW 00H RETLW 01H RETLW 02H RETLW 03H RETLW 04H... RETLW 0AH RETLW 0BH RETLW 0CH RETLW 0DH RETLW 0EH RETLW 0FH END
LIST P=16F877 INCLUDE "P16F877.INC" COUNTER EQU 30H ORG 0000H NOP MOVLW 20H MOVWF FSR CLRF COUNTER LOOP MOVF COUNTER,W CALL CHABIAO MOVWF INDF INCF COUNTER INCF FSR BTFSS COUNTER,4 GOTO LOOP GOTO $ CHABIAO ORG 0100H ADDWF PCL,F RETLW 00H RETLW 01H RETLW 02H RETLW 03H RETLW 04H... RETLW 0AH RETLW 0BH RETLW 0CH RETLW 0DH RETLW 0EH RETLW 0FH END
LIST P=16F877 INCLUDE "P16F877.INC" COUNTER EQU 30H ORG 0000H NOP MOVLW 20H MOVWF FSR CLRF COUNTER LOOP MOVF COUNTER,W PAGESEL CHABIAO CALL CHABIAO MOVWF INDF INCF COUNTER INCF FSR BTFSS COUNTER,4 GOTO LOOP GOTO $ CHABIAO ORG 1EF8H ADDWF PCL,F RETLW 00H RETLW 01H RETLW 02H RETLW 03H RETLW 04H... RETLW 0AH RETLW 0BH RETLW 0CH RETLW 0DH RETLW 0EH RETLW 0FH END
PAGESEL 5-5 1 SUBLW 08H 2 BTFSC STATUS, C 3 GOTO POP 4 BSF PCLATH, 0 5 GOTO WTO 6 POP BCF PCLATH, 0 7 WTO BSF PCLATH, 1 8 BSF PCLATH, 2 9 MOVF COUNTER, W 10 PAGESEL CHABIAO 48
常用子程序
程序格式 程序 编 格式 编程 程序 ; ; ; INDF EQU 00H ; 程序 指令 用 TMR0 EQU 01H ; 存器 PCL EQU 02H ; 用 X EQU 20H ; Y EQU 21H 49
程序格式 ; ; ( 16F87X) ; ORG 0000H ; 0000H GOTO MAIN ; 程序 ORG 0004H ; 0004H GOTO INT_BODY ; 程序 ; ; 程序 ; ORG 0005H ; 0005H 存 程序 MAIN CLRW CALL SUB GOTO MAIN 50
程序格式 ; ; 子程序 ; SUB MOVLW 01H ; 子程序 RETURN ; 子程序 ; ; 程序 ; INT_BODY ; 程序 MOVLW 0FFH RETFIE ; 程序 ; END ; 程序 51
常用子程序 程序设计 程序 子程序 设计 程序 52
子程序 程序 指令 1. 指令 GOTO 2. 指令 INCFSZ DECFSZ 3. 指令 BTFSS BTFSC 53
子程序 5-6 100 子程序 XSH 54
ORG 0000H MOVLW D'101' MOVWF 20H LOOP DECFSZ 20H, F GOTO RRT GOTO PPY RRT PAGESEL XSH CALL XSH PAGESEL LOOP GOTO LOOP PPY END
子程序 5-7 存器 20H 30H 40H 56
MOVF 30H, W SUBWF 20H, W BTFSC STATUS, C GOTO L20H MOVF 30H, W MOVWF 40H GOTO POP L20H MOVF 20H, W MOVWF 40H POP END
子程序 程序 程序设计 设计 方式 : 系统 器 程序 用 常用 58
子程序 5-8 子程序 59
COUNTER EQU 20H ORG 0000H DELAY MOVLW 0FFH MOVWF COUNTER LOOP DECFSZ COUNTER GOTO LOOP RETURN
子程序 5-9 编 10ms 子程序 61
DEL10MS MOVLW 0DH MOVWF 20H LOOP1 MOVLW 0FFH MOVWF 21H LOOP2 DECFSZ 21H GOTO LOOP2 DECFSZ 20H GOTO LOOP1 RETURN
子程序 5-10 编 1s 子程序 63
DELAY1S MOVLW 06H MOVWF 20H LOOP1 MOVLW 0EBH MOVWF 21H LOOP2 MOVLW 0ECH MOVWF 22H LOOP3 DECFSZ 22H GOTO LOOP3 DECFSZ 21H GOTO LOOP2 DECFSZ 20H GOTO LOOP1 RETURN
子程序 子程序 常 用 LED 器 式 编 65
子程序 5-11 RC LED 器 0-9 1 编 程序 编 编 1 06H 6 7DH 2 5BH 7 07H 3 4FH 8 7FH 4 66H 9 6FH 5 6DH 0 3FH 66
ABC EQU 30H ORG 0000H BSF STATUS, RP0 CLRF TRISC BCF STATUS, RP0 MAIN MOVLW 00H MOVWF ABC LOOP MOVF ABC, W CALL CHABIAO MOVWF PORTC CALL DELAY1S INCF ABC MOVLW 09H SUBWF ABC, W BTFSS STATUS, Z GOTO LOOP GOTO MAIN CHABIAO DELAY1S ADDWF PCL,F RETLW 3FH RETLW 06H RETLW 5BH RETLW 4FH RETLW 66H RETLW 6DH RETLW 7DH RETLW 07H RETLW 7FH RETLW 6FH MOVLW 06H MOVWF 20H... RETURN END
子程序 PIC 指令系统 语 PIC 指令 指令 程序 式 子程序 子程序 用 GOTO 语 RETLW 语 68
子程序 5-14 编 N 选择子程序 69
PAGESEL KEY CALL KEY PAGESEL JIAN CALL JIAN ; ; 子程序 ; JIAN ADDWF PCL, F GOTO PKEY0 GOTO PKEY1 GOTO PKEY2... GOTO PKEYN
常用 子程序 常用 子程序 子程序 系统设计 BCD 子程序 用 指 用 S1 S2 source 用 R1 R2 result 8 用 H L 用 Z 8 71
常用 子程序 PIC16F877 70H 7FH 程序 72
常用 子程序 5-15 16 编 程序 73
INCLUDE "P16F877.INC" S1H EQU 50H S1L EQU 51H S2H EQU 52H S2L EQU 53H R1H EQU 54H R1L EQU 55H ORG 0000H NOP MOVLW 12H MOVWF S1H MOVLW 34H MOVWF S1L MOVLW 57H MOVWF S2H MOVLW 78H MOVWF S2L CALL ADDXY GOTO $ ADDXY MOVF S1L,W ADDWF S2L,F BTFSC STATUS,C INCF S2H MOVF S1H,W ADDWF S2H,W MOVWF R1H MOVF S2L,W MOVWF R1L RETLW 00H END
常用 子程序 5-16 16 编 程序 75
INCLUDE "P16F877.INC" S1H EQU 50H S1L EQU 51H S2H EQU 52H S2L EQU 53H R1H EQU 54H R1L EQU 55H ORG 0000H NOP MOVLW 56H MOVWF S1H MOVLW 78H MOVWF S1L MOVLW 12H MOVWF S2H MOVLW 34H MOVWF S2L CALL SUBXY GOTO $ SUBXY COMF S2L,F INCF S2L,F BTFSC STATUS,Z DECF S2H,F COMF S2H,F ADDXY MOVF S1L,W ADDWF S2L,F... MOVWF R1H MOVF S2L,W MOVWF R1L RETLW 00H END
常用 子程序 5-17 16 编 程序 77
INCLUDE "P16F877.INC" S1H EQU 50H S1L EQU 51H S2H EQU 52H S2L EQU 53H R1H EQU 54H R1L EQU 55H R2H EQU 56H R2L EQU 57H P1H EQU 58H P1L EQU 59H COUNT EQU 5AH
ORG NOP MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CALL MPXY GOTO $ 0000H 12H S1H 34H S1L 56H S2H 78H S2L
MPXY CALL YIWEI MPLOOP RRF P1H RRF P1L BTFSC STATUS,C CALL MPADD RRF S2H RRF S2L RRF R2H RRF R2L DECFSZ COUNT GOTO MPLOOP MOVF S2H,W MOVWF R1H MOVF S2L,W MOVWF R1L RETLW 00H
; ;16 ; YIWEI MOVLW 10H MOVWF COUNT MOVF S2H,W MOVWF P1H MOVF S2L,W MOVWF P1L CLRF S2H CLRF S2L RETLW 00H
; ; 子程序 ; MPADD MOVF S1L,W ADDWF S2L,F BTFSC STATUS,C INCF S2H,F MOVF S1H,W ADDWF S2H,F RETLW 00H END
常用 子程序 5-18 16 编 程序 83
INCLUDE "P16F877.INC" S1H EQU 50H S1L EQU 51H S2H EQU 52H S2L EQU 53H R1H EQU 54H R1L EQU 55H R2H EQU 56H R2L EQU 57H P1H EQU 58H P1L EQU 59H COUNT EQU 5AH
ORG NOP MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CALL DIVXY GOTO $ 0000H 12H S1H 34H S1L 67H S2H 89H S2L
DIVXY CALL YIWEI CLRF R2H CLRF R2L DIVLOOP BCF STATUS,C RLF P1L RLF P1H RLF R2L RLF R2H MOVF S1H,W SUBWF R2H,W BTFSS STATUS,Z GOTO ASP MOVF S1L,W SUBWF R2L,W
ASP BTFSS STATUS,C GOTO PUP MOVF S1L,W SUBWF R2L,F BTFSS STATUS,C DECF R2H,F MOVF S1H,W SUBWF R2H,F BSF STATUS,C PUP RLF S2L RLF S2H DECFSZ COUNT GOTO DIVLOOP MOVF S2H,W MOVWF R1H MOVF S2L,W MOVWF R1L
; ;16 ; YIWEI MOVLW 10H MOVWF COUNT MOVF S2H,W MOVWF P1H MOVF S2L,W MOVWF P1L CLRF S2H CLRF S2L RETLW 00H