verschiedne Subtraktionsroutinen mit PIC16XXX Befehlssatz
|
|
Dieser Code ist mit der Entwicklungsumgebung MPLAB IDE 7.20 von Microchip geschrieben.
B_AL equ 0x72
B_AH equ 0x73
B_AUL equ 0x74
B_BL equ 0x75
B_BH equ 0x76
B_BUL equ 0x77
; Subtraktion mit addwf (8Bit)
; W=B_AL-B_BL, Vorsicht: B_BL wird veraendert
sub8_addwf movlw h'FF'
xorwf B_BL,f
incf B_BL,w
addwf B_AL,w
btfsc STATUS,C
goto positiv
goto negativ
; Subtraktion mit addwf (24Bit)
; A=A-B, Vorsicht: B_BL, B_BH, und B_BUL werden veraendert
;
sub24_addwfb ; B=NOT(B)
movlw h'FF'
xorwf B_BL,f
xorwf B_BH,f
xorwf B_BUL,f
;
; B=B+1
incf B_BL,f
btfsc STATUS,Z
incf B_BH,f
btfsc STATUS,Z
incf B_BUL,f
;
; Addition mit aadwf (24Bit)
; A=A+B
movf B_BL,w
addwf B_AL,f ; Addition Bits 0-7
;
movf B_BH,w
btfsc STATUS,C ; fand ein Uebertrag statt ?
incfsz B_BH,w ; Uebertrag notieren (zaehlen). Verursacht Uebertrag einen
; weiteren Uebertrag, so bleibt B_AH unveraendert.
addwf B_AH,f ; Addition Bits 8-15
;
movf B_BUL,w
btfsc STATUS,C ; fand ein Uebertrag statt ?
incfsz B_BUL,w ; Uebertrag notieren (zaehlen). Verursacht Uebertrag einen
; weiteren Uebertrag, so bleibt B_AUL unveraendert.
addwf B_AUL,f ; Addition Bits 16-23
;
btfsc STATUS,C ; Bei Ueberlauf Ergebnis positiv
goto positiv
goto negativ
; Subtraktion mit subwf (24Bit)
; A=A-B
;
sub24_subwfb movf B_BL,w
subwf B_AL,f ; Subtraktion Bits 0-7
;
movf B_BH,w
btfss STATUS,C ; fand ein Uebertrag statt ?
incfsz B_BH,w ; Uebertrag B_BH notieren (zaehlen). Verursacht Uebertrag einen
; weiteren Uebertrag, so bleibt B_AH unveraendert.
subwf B_AH,f ; Subtraktion Bits 8-15 (wenn B_BH <> 0)
;
movf B_BUL,w
btfss STATUS,C ; fand ein Uebertrag statt ?
incfsz B_BUL,w ; Uebertrag B_BUL notieren (zaehlen). Verursacht Uebertrag einen
; weiteren Uebertrag, so bleibt B_AUL unveraendert.
subwf B_AUL,f ; Subtraktion Bits 16-23 (wenn B_BUL <> 0)
;
btfsc STATUS,C ; Ergebnis positiv oder negativ
goto positiv
goto negativ
positiv nop
nop
negativ nop
nop