100% encontró este documento útil (1 voto)
337 vistas2 páginas

Resta 16 bits en PIC16F877A

Este documento describe un programa para un microcontrolador PIC16F877A que realiza la resta de dos números de 16 bits almacenados en la memoria del microcontrolador. El programa contiene subrutinas para calcular el complemento a uno de un número, realizar la resta de los números bit a bit, y corregir el resultado final si es necesario.

Cargado por

Cuantico7
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
337 vistas2 páginas

Resta 16 bits en PIC16F877A

Este documento describe un programa para un microcontrolador PIC16F877A que realiza la resta de dos números de 16 bits almacenados en la memoria del microcontrolador. El programa contiene subrutinas para calcular el complemento a uno de un número, realizar la resta de los números bit a bit, y corregir el resultado final si es necesario.

Cargado por

Cuantico7
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

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

; 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 "[Link]"
__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

También podría gustarte