Вы находитесь на странице: 1из 2

;********************************************************************

; MICROCONTROLADORES
; Nombre: Edison Naranjo
; Curso: Sexto " B" DEE
;********************************************************************
;********************************************************************
; Ejercicio 1.- Resta de 2 nmeros de 16 bits
; EBEB - 1111 = DADA
; Los nmeros se encuentran cargados en el PIC
;********************************************************************
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
DATOA_H EQU
DATOA_L EQU
DATOB_H EQU
DATOB_L EQU
RESULTADO_H
RESULTADO_L

0X20 ; Parte ms significativa del nmero A


0X21 ; Parte
0X22 ; Parte ms significativa del nmero B
0X23 ; Parte menos significativa del nmero B
EQU 0X24
EQU 0X25

COMP1_H EQU 0X28 ; Parte ms significativa B'


COMP1_L EQU 0X29
; Parte menos significativa B'
ORG 0X00
BSF STATUS,RP0
BCF STATUS,RP1
movlw 0x00
; Configuracin del puerto B como salida
movwf TRISB
movlw 0x00
; Configuracin del puerto C como salida
movwf TRISC
BCF STATUS,RP0
INICIO
movlw
movwf
movlw
movwf

0X11
DATOB_L; DATOB_L=0X11
0X11
DATOB_H; DATOB_H=0X11

call COMP1 ; Llamada a la subruitina COMP1


movlw
movwf
movlw
movwf

0XEB
DATOA_L ; DATOA_L=0XEB
0XEB
DATOA_H ; DATOA_H=0X11

call RESTA_L ; Llamada a la subrutina RESTA_L


btfss STATUS,C
call RESTA_H1 ;C=0 llama a RESTA_H1
call RESTA_H2 ;C=1 llama a RESTA_H2
btfss STATUS,C
call CAMBIO
;C=0 llama a CAMBIO
call MAS
;C=0 llama a MAS
movf RESULTADO_L,0
movwf PORTB
movf RESULTADO_H,0

movwf PORTC
goto INICIO
COMP1
comf DATOB_L,0 ; complemento a 1 de DATOB_L
movwf COMP1_L
comf DATOB_H,0 ; complemento a 1 de DATOB_H
movwf COMP1_H
return
RESTA_L
movf DATOA_L,0
addwf COMP1_L,0 ; W=DATOA_L + COMP1_l
movwf RESULTADO_L
return
RESTA_H1
movf DATOA_H,0
addwf COMP1_H,0 ; W=DATOA_H + COMP1_H
movwf RESULTADO_H
return
RESTA_H2
movf DATOA_H,0
addlw 0X01
addwf COMP1_H,0 ; W=DATOA_H + COMP1_H + 1
movwf RESULTADO_H
return
MAS
; En esta subrutina, si existe carry al sumar el numero A
; con el complemento a 1 del nmero B, este se debe
sumarse
; al resultado final
movf RESULTADO_L,0
addlw 0X01
movwf RESULTADO_L
btfsc STATUS,C
movlw 0X01
movlw 0X00
addwf RESULTADO_H,1
return
CAMBIO
; En esta subrutina, si no hay carry al sumar el numero A
; con el complemento a 1 del nmero B, se debe efectuar el
; complemento a 1 del resultado final
comf RESULTADO_L,1
comf RESULTADO_H,1
return
end

Вам также может понравиться