TODOPIC
Otros Microcontroladores / Dispositivos programables => ** PROYECTOS ** => Mensaje iniciado por: RICARDODENELEC en 06 de Junio de 2013, 05:38:27
-
Buenos dias.
Tengo este programa, cuando resto un numero que me da positivo me hace la resta bien y me pone el bit de positivo a 1. Pero a la hora de restar un numero que se que me dara negativo, la resta me da mal pero si me pone el bit de que es un numero negativo a 1.
Alguien me podria ayudar a solucionar este problema.
Muchas gracias
;Restar dos numeros, cada numero de 16bits
list p=16F886 ;Tipo de PIC
include "p16F886.INC"
Resultado_Menor equ 0x20 ;Define una variable para guardar el resultado
Resultado_Mayor equ 0x21
Dato_A_Menor equ 0x22
Dato_A_Mayor equ 0x23
Dato_B_Menor equ 0x24
Dato_B_Mayor equ 0x25
Positivo_Negativo equ 0x26
org 0x00
goto Inicio ;Vector de reset
org 0x05
;Restar 65535-21420 (Resultado = 44115) = 10101100 01010011
;Restar 23444-22316 (Resultado = 1128)= 00000100 01101000
;65535 / 23444 = 11111111 11111111 / 01011011 10010100
;23444 / 22316 = 01011011 10010100 / 01010111 00101100
Inicio: clrf Positivo_Negativo
movlw b'01010111'
movwf Dato_A_Mayor ;Introduzco Dato_A_Mayor
movlw b'00101100'
movwf Dato_A_Menor ;Introduzco Dato_A_Menor
movlw b'01011011'
movwf Dato_B_Mayor ;Introduzco Dato_B_Mayor
movlw b'10010100'
movwf Dato_B_Menor ;Introduzco Dato_B_Menor
movf Dato_B_Menor,0
subwf Dato_A_Menor,0 ;Resto B-A
movwf Resultado_Menor ;Guardo resultado
movf Dato_B_Mayor,0
subwf Dato_A_Mayor,0
movwf Resultado_Mayor
btfss STATUS,0 ;Acarreo
goto Negativo
goto Positivo
Negativo: bsf Positivo_Negativo,1
goto Fin
Positivo: bsf Positivo_Negativo,0
goto Fin
Fin: goto Fin
end
-
Ya lo tengo, gracias
;Restar dos numeros, cada numero de 16bits
list p=16F886 ;Tipo de PIC
include "p16F886.INC"
Resultado_Menor equ 0x20 ;Define una variable para guardar el resultado
Resultado_Mayor equ 0x21
Dato_A_Menor equ 0x22
Dato_A_Mayor equ 0x23
Dato_B_Menor equ 0x24
Dato_B_Mayor equ 0x25
Positivo_Negativo equ 0x26
org 0x00
goto Inicio ;Vector de reset
org 0x05
;Restar 65535-21420 (Resultado = 44115) = 10101100 01010011
;Restar 23444-22316 (Resultado = 1128)= 00000100 01101000
;65535 / 23444 = 11111111 11111111 / 01011011 10010100
;23444 / 22316 = 01011011 10010100 / 01010111 00101100
Inicio: clrf Positivo_Negativo
movlw b'01011011'
movwf Dato_A_Mayor ;Introduzco Dato_A_Mayor
movlw b'10010100'
movwf Dato_A_Menor ;Introduzco Dato_A_Menor
movlw b'01010111'
movwf Dato_B_Mayor ;Introduzco Dato_B_Mayor
movlw b'10101100'
movwf Dato_B_Menor ;Introduzco Dato_B_Menor
movf Dato_A_Menor,0
subwf Dato_B_Menor,0 ;Resto B-A
movwf Resultado_Menor ;Guardo resultado
movf Dato_A_Mayor,0
btfss STATUS,0
addlw 1
subwf Dato_B_Mayor,0
movwf Resultado_Mayor
btfss STATUS,0 ;Acarreo
goto Negativo
goto Positivo
Negativo: bsf Positivo_Negativo,1
comf Resultado_Menor
movf Resultado_Menor,0
addlw 1
movwf Resultado_Menor
comf Resultado_Mayor
movf Resultado_Mayor,0
btfsc STATUS,0
addlw 1
movwf Resultado_Mayor
goto Fin
Positivo: bsf Positivo_Negativo,0
goto Fin
Fin: goto Fin
end
-
si estas aprendiendo, pues estás bien encaminado sobre el asunto...
pero si estas desarrollando algo y requerís rutinas matemáticas, deberías agendar este sitio:
http://piclist.com/techref/microchip/math/index.htm