Autor Tema: Checksum  (Leído 2871 veces)

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

Desconectado NITITA

  • PIC10
  • *
  • Mensajes: 21
Checksum
« en: 11 de Mayo de 2008, 13:36:02 »
Hola! necesito ayuda en una parte de una practica que esoy haciendo. El caso es que tengo que hacer la comprobacion del checksum y el problema es que no acabo de comprender exactamenteel direccionamiento indirecto ( que es con lo que lo tengo que hacer)
En principio lo que tengo que hacer es sumar dos campos ( destino y datos)

movlw 0x0c
movwf 0x04;fsr
addwf 0x0d; <---------aki es donde ya me pierdo un poko porque realmetne no se si hago bien metiendo otra direccion de memoria para okuparme del segundo operando que me hace falta para sumar.. pero si pongo eso de que manera estoy metiendome en "INDF"?
ya despues de hacer eso llamo a una funcion acarreo para comprobar si tengo que sumar o no uno.. y paso al siguiente octeto de numeros.. para sumar.. y realmente no se si tengo que cambiar de posicion de memoria o sigo
trabajando en la misma... si alguien me ayuda,, estaria muy agradecida.
un saludo
-La PiKiÑa PriCeSa-

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Checksum
« Respuesta #1 en: 11 de Mayo de 2008, 17:22:19 »
BIENVENIDA AL FORO!!! NITITA :-/ :-/ :-/

Voy a tratar de darte un poco de ayuda aunque no soy muy bueno explicando.... :mrgreen:

El direccionamiento indirecto consta en acceder a cualguiera de los registros de la ram a travez de un solo registro (INDF) direccionando su ubicacion por medio de un puntero,en el cual se le carga la direccion del registro deseado (FSR).

ejemplo: quieres borrar todos los registros desde la ubicacion h'2e' a la h'32'...
                ......................
                 ...................
      MOVLW   H'2E'         ;DIRECCION DEL PRIMER REGISTRO
      MOVWF   FSR
CLEAR      CLRF   INDF
      INCF   FSR,F
       MOVLW   H'33'         ;ULTIMO REGISTRO +1
      SUBWF   FSR,W
      BTFSS   STATUS,Z
       CALL   CLEAR
               ...................
               ..............

ed y tado... :mrgreen:
« Última modificación: 12 de Mayo de 2008, 23:41:07 por picNIC »

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Checksum
« Respuesta #2 en: 12 de Mayo de 2008, 13:05:43 »
Saludos!
Nitita, bienvenida al foro!  :-/

El direccionamiento indirecto consta en acceder a cualguiera de los registros de la ram a travez de un solo registro(incf) direccionando su ubicacion por medio de un puntero,en el cual se le carga la direccion del registro deseado (fsr).

Buena explicación picNIC!, pero el registro sería indf no? (colocaste incf, te lo resalté en negrilla)... más adelante sí lo escribiste bien, pero deberías corregirlo para que no se preste a confusión...

En principio lo que tengo que hacer es sumar dos campos ( destino y datos)

movlw 0x0c
movwf 0x04;fsr
addwf 0x0d; <---------aki es donde ya me pierdo un poko porque realmetne no se si hago bien metiendo otra direccion de memoria para okuparme del segundo operando que me hace falta para sumar.. pero si pongo eso de que manera estoy metiendome en "INDF"?

Se ve más elegante que declares al inicio de tu programa:
fsr    equ 0x04
indf   equ 0x00
temp equ 0x20 ;variable temporal
w      equ 0     
f       equ 1     

Entonces me imagino que quieres sumar los registros 0x0C + 0x0D mediante direccionamiento indirecto...
Sería:

movlw 0x0c
movwf fsr
movf indf,w  ; Aquí se carga el valor del registro 0x0c (donde apunta fsr) a W     
movwf temp ; cargas el valor de 0x0c en un registro temporal
movlw 0x0d
movwf fsr
movf temp,w ;mueve el valor de 0x0c que estaba en registro temporal a W
addwf indf,w ;suma el valor del registro 0x0d (donde está apuntando fsr) y guarda en w
movwf temp ; mueve el resultado a la variable temporal

Ok espero haberme explicado...
Si quieres volver a sumar dos registros lo que tienes que hacer es cambiar las direcciones de la primera y quinta línea... y listo, funcionará de lo lindo... y recuerda que el resultado siempre lo vas a tener en el registro 0x20, que yo llamé temp... por supuesto, eso lo puedes cambiar... si quieres asigna otro registro con otro nombre... como tú quieras!  :D

Dale pues, nos leemos!  :mrgreen:
« Última modificación: 12 de Mayo de 2008, 13:10:26 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Checksum
« Respuesta #3 en: 12 de Mayo de 2008, 13:27:43 »
Bueno una observación!   :lol:
Si vas a sumar siempre registros sucesivos (como 0x0c y 0x0d), puedes sustituir la cuarta y quinta línea por un "incf fsr,f"... tal como en el ejemplo que te colocó picNic para borrar registros consecutivos de la RAM.
Además, no haría falta incluir movimientos a la variable temporal, y el resultado de la suma quedaría en W, que luego podrías pasar a un registro donde guardes el resultado (no es bueno dejarlo en W).

Así:
fsr         equ 0x04
indf       equ 0x00
result  equ 0x20
w          equ 0     
f         equ 1

   movlw 0x0c   ;valor del primer registro
   movwf fsr      ;lo mueves al puntero fsr
   movf indf,w   ; Aquí se carga el valor del registro 0x0c (donde apunta fsr) a W     
   incf fsr,f        ; incrementas fsr (ahora apunta a 0x0c+1=0x0d)
   addwf indf,w  ;suma el reg 0x0d (donde está apuntando fsr) con el valor de 0x0c (que está en W) y guarda en w
   movwf result ; guarda el resultado

He simulado los dos códigos que te he puesto con el mplab y funcionan de maravilla...
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado NITITA

  • PIC10
  • *
  • Mensajes: 21
Re: Checksum
« Respuesta #4 en: 12 de Mayo de 2008, 15:57:13 »
Mil graciasss lo he entendido perfeeeect :P
-La PiKiÑa PriCeSa-

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Checksum
« Respuesta #5 en: 12 de Mayo de 2008, 16:13:23 »
De mi parte, siempre a tu orden!
Para eso estamos aquí, para ayudarnos unos a otros!
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Checksum
« Respuesta #6 en: 12 de Mayo de 2008, 20:17:27 »
UPSSSS....    perdon no me di cuenta... no volvera a suceder :( :( :(    :mrgreen:

Buen ojo firepic!!!

Sal u 2

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Checksum
« Respuesta #7 en: 12 de Mayo de 2008, 21:02:30 »
Ey no te preocupes picNIC!  :D
La idea era que lo corrigieras y ya, es decir, que modificaras el mensaje...
Lo puedes hacer dándole en tu mensaje a este ícono:

Corriges y listo, no ha pasado nada...
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web