TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Meta en 02 de Febrero de 2008, 17:03:01

Título: Duda este asm
Publicado por: Meta 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?
Título: Re: Duda este asm
Publicado por: Jorge_ 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.
Título: Re: Duda este asm
Publicado por: BrunoF 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!
Título: Re: Duda este asm
Publicado por: Meta 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.
Título: Re: Duda este asm
Publicado por: BrunoF en 05 de Febrero de 2008, 18:20:11
Buenisimo. Cualquier problemita avisás.

Saludos