Buenas pues tengo un programa que tiene que hacer una suma una multiplicación y una resta (la función es : Y=2(A+B)-C), si el resultado me da correcto siempre y cuando no sea negativo el resultado, por ejemplo hago:Y=2(1+4)-6 me sale 4
pero si hago: Y=2(1+3)-10 me da 252
aqui os dejo el código a ver si veis algo raro:
Uso MPLAB para programarlo y simularlo.
Gracias
Fox_Neo[/size]
pero si hago: Y=2(1+3)-10 me da 252
aqui os dejo el código a ver si veis algo raro:
Código (mpasm) [Seleccionar]
list p=16F84 ;indicamos el pic que se vaa usar
include "P16F84.INC";indicamos la librería del PIC que tiene que cargar
REGA equ 0x11 ;Damos un nombre a esta posición de memoria REGISTRO A
REGB equ 0x12 ;Damos un nombre a esta posición de memoria REGISTRO B DE USUARIO
REGC equ 0x13 ;Damos un nombre a esta posición de memoria REGISTRO C DE USUARIO
REGY equ 0x14 ;Damos un nombre a esta posición de memoria REGISTRO DE USUARIO DE RESULTADO
REGAUX equ 0x15 ;Este registro lo vamos a usar para almacenar temporalmente resultados de pasos de operaciones intermedias
org 0x00 ;vector de reset
goto inicio
org 0x05 ;el programa empieza en la posición 5 de la memoria
;*********************
;INICIO DE PROGRAMA
;*********************
inicio MOVLW 0X01 ; Como no se puede cargar directamente un valor a una posición de memoria cualquiera, es necesario cargarlo previamente primero en el registro REGW
MOVWF REGA ;Ahora si se puede mover el valor de REGW a una posición de memoria deseada
MOVLW 0X02 ;Con los siguientes pasa lo mismo
MOVWF REGB
MOVLW 0X0A
MOVWF REGC
;______________________________
BUCLE ; es necesario poner un bucle para que no finalice el programa el programa
;Suma de A+B
MOVF REGA,0 ;CARGA EL VALOR REGA EN W
ADDWF REGB,0 ;SUMA EL VALOR DE W + REGB Y COMO ES 0 SE GUARDA EN W
MOVWF REGAUX ;EL VALOR DE LA SUMA ESTÁ EN EL REGISTRO AUXILIAR como ahora vamos a necesitar usar el registro REGW lo movemos a una posicón de memoria temporal
;Multiplicación 2(A+B) ->(A+B)+(A+B)
ADDWF REGAUX,1 ;SUMA EL VALOR DE W + REGAUX Y COMO ES 0 SE GUARDA EN REGAUX. Como el valor de A+B ya lo teníamos en REGW y tiene el mismo valor que el REGAUX si se suman ambos será como una multiplicación.
MOVF REGC,0 ;CARGA EL VALOR DE REGC EN W PARA PODER HACER LA RESTA Y=REGAUX-C ya que la instrución hace la resta en dirección contraria: F-W
;resta 2(A+B)-C
SUBWF REGAUX,0 ;REALIZA LA RESTA Y LO GUARDA EN W
MOVWF REGY ;CARGAMOS EL RESULTADO EN LA POSICIÓN REGY
GOTO BUCLE ; Devuelve a donde esté la palabra bucle
END ; fin de programa
Uso MPLAB para programarlo y simularlo.
Gracias
Fox_Neo[/size]
y en el segundo enlace ya lo vi también lo único que encontré era que había que usar cartuchos originales de HP pero los que tengo yo no son originales ,se pueden rellenar. Gracias