Autor Tema: PROBLEMA AL RESTAR DOS NUMEROS DE 16BIT Y RESULTADO SEA NEGATIVO  (Leído 3224 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RICARDODENELEC

  • PIC10
  • *
  • Mensajes: 3
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

Desconectado RICARDODENELEC

  • PIC10
  • *
  • Mensajes: 3
Re: PROBLEMA AL RESTAR DOS NUMEROS DE 16BIT Y RESULTADO SEA NEGATIVO
« Respuesta #1 en: 06 de Junio de 2013, 08:48:03 »
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

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 214
Re: PROBLEMA AL RESTAR DOS NUMEROS DE 16BIT Y RESULTADO SEA NEGATIVO
« Respuesta #2 en: 06 de Junio de 2013, 11:45:48 »
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


 

anything