Autor Tema: Duda este asm  (Leído 1794 veces)

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

Meta

  • Visitante
Duda este asm
« en: 02 de Febrero de 2008, 17:03:01 »
Un usuario de otro foro a preguntado esto, si pueden ayudarlo...






Hola compañeros,
hice uno de los ejercicios que recomendo el amigo meta y todo funciono bien a excepcion de la intruduccion de unos datos:
El programa seria este (corrijanme si los comentarios no son los correctos) :

;
; Ejercicio LIBRE 1
;
;Ejercicio de sumas y restas
; tres valores almacenados en memoria 10h, 11h y 12h A,B y C respectivamente.
; Se desea realizar (A+B)-C almacenar y mostrar el resultado
;en la direccion 13h


List p=16F874A ;Tipo de procesador
include "P16F874A.INC" ;Definiciones de registros internos

; Definicion de variables temporales
dato_A equ 0x10
dato_B equ 0x11
dato_C equ 0x12
resultado equ 0x13

;Ajusta los valores de la palabra de configuración durante el ensamblaje:
;Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT

__config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC

org 0x00
goto Inicio ;Vector de reset
org 0x05

Inicio movf dato_A,W ;Carga en W el valor de dato_A
movwf resultado ;mueve el valor de W ---> resultado para verlo
addwf dato_B,W ;Suma el valor de B a W
movwf resultado ;mueve el valor de W ---> resultado para verlo
movf dato_C,W ;carga en W el valor de dato_c
subwf resultado,W ;resta de resultado el valor de W
movwf resultado ;mueve el valor de W ---> resultado para verlo
goto Inicio
end
********************************************
Se introducen los datos siguientes :

dato_A.....dato_B.......dato_C..........resultado Obtenido..... decimal
..01h.........03h.............02h................02h.........................(1+3)-2=2
..01h.........09h.............0Ah................00h.........................(1+9)-10=0
..01h.........FFh.............00h................00h.........................(1+255)-0=0
(creo que porque la suma da 256 , rebosa la memoria y se pone a CERO)

..01h.........03h.............05h................????.........................(1+3)-5=-2
Es en este ultimo que se automodifica el valor de dato_B cada vez que regresa a inicio, alguien podria decirme porque?
« Última modificación: 02 de Febrero de 2008, 21:10:58 por Meta »

Desconectado Jorge_

  • PIC10
  • *
  • Mensajes: 30
Re: Duda este asm
« Respuesta #1 en: 03 de Febrero de 2008, 22:35:31 »
Las direcciones que puedes utilizar para las variables, si mal no recuerdo, comienzan en 0x20.
El resultado de esa operacion (0x01+0x03-0x05) siempre será igual en binario, pero la interpretacion del resultado depende del programador y de la forma de representacion que este usando, complemento a la base es lo más común para trabajar con numeros signados.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Duda este asm
« Respuesta #2 en: 03 de Febrero de 2008, 23:26:09 »
Como bien te han indicado, hay que tener cuidado con lo que es memoria para registros de proposito general(como en tu caso) y la memoria de registros especiales. En la datasheet del 16F87XA vas a poder ver que en dicho PIC, debés comenzar mínimamente por la posición 0x20. Las posiciones 0x10,0x11,0x12 y 0x13 que estas usando, estan asociadas a modulos del PIC(timers,etc..) y por lo tanto, puede que se modifiquen automaticamente.

O bien, podes usar las posiciones 0x10,0x11,0x12 y 0x13 si cambias el programa a un PIC 16F84A(que debe ser en el que supongo se ha basado el profesor) ya que en dicho PIC, a partir de la posicion 0x0C es posible utilizarlas para propositos generales.

dato_A equ 0x20
dato_B equ 0x21
dato_C equ 0x22
resultado equ 0x23

INICIO
movf dato_A,W
addwf dato_B,W
subwf dato_C,W
movwf resultado
goto INICIO

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Meta

  • Visitante
Re: Duda este asm
« Respuesta #3 en: 04 de Febrero de 2008, 18:56:29 »
Su respuesta es:




Genial!!!!!, muchisimas gracias, ya lo cambie y funciona perfectamente,
nuevamente gracias, ya mire las caracteristicas del 16F786A y asi lo pone.

Ya aprendi algo mas en el dia de hoy !!!!

******
Estoy trabajando ahora en algo que medio me invente, haber si me salgo y en un rato lo pongo, se trata de meter este ejercicio con valores fijos pero que calcule con diferentes valores segun posicion de 2 interruptores:
Si ambos cerrados 0 0
Si ambos abiertos 1 1
1 abierto 1 cerrado 1 0
1 cerrado 1 abierto 0 1
y un 3er. interruptor que sera de ENCENDIDO/APAGADO.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Duda este asm
« Respuesta #4 en: 05 de Febrero de 2008, 18:20:11 »
Buenisimo. Cualquier problemita avisás.

Saludos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.