Autor Tema: Modo indirecto para comparar dos tablas en memoria  (Leído 2420 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Mady

  • PIC10
  • *
  • Mensajes: 19
Modo indirecto para comparar dos tablas en memoria
« en: 04 de Junio de 2007, 16:01:48 »
En el proyecto que estoy haciendo, recibo por la USART del 16F877 una serie de bytes, número total de bytes es variable.
Para almacenar los bytes, uso el modo indirecto y todo va bien. EL problema es que tengo que volver a recibir esos bytes, que tambien lo hago con modo indirecto maracando una nueva dirección de inicio para el puntero. En resumen,al final tengo dos tablas en mmemoria y ahora tengo que comparar ambas para ver si son identicas o no.

He intententado hacerme yo punteros, pero no sirve, y no sé si existe alguna otra técnica para comparar dos tablas, en definitiva ir recorriendo paralelamente cada posicion de cada tabla y compararlas.

Saludos y gracias de antemano

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Modo indirecto para comparar dos tablas en memoria
« Respuesta #1 en: 05 de Junio de 2007, 11:03:16 »
En el pic que mencionas, debes saber tú el inicio de cada tabla y luego el "offset" debiera ser el mismo para ambos ya que compararías la posicion 1 de la tabla 1, con la posición 1 de la tabla 2.

Sencillamente puedes usar el mismo FSR pero teniendo en cuenta que en un caso será INICIOTABLA1+offset y en el otro será INICIOTABLA2+offset

Guardas la primer lectura en una tercer variable temporal y la 2da lectura la puedes dejar en WREG.  Allí las comparas y puedes determinar si son iguales (y continuar la comparación) o si son diferentes (y terminar allí mismo).

Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Mady

  • PIC10
  • *
  • Mensajes: 19
Re: Modo indirecto para comparar dos tablas en memoria
« Respuesta #2 en: 05 de Junio de 2007, 15:17:53 »
Es lo que intenté hacer primero, pero al ir variando FSR, cuando tenia que incrementar la direccion a la que apuntaba, ya tenia el valor de inicio de la 2ª tabla, pero el de la priemra se habia machacado.


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Modo indirecto para comparar dos tablas en memoria
« Respuesta #3 en: 05 de Junio de 2007, 16:07:14 »
Es lo que intenté hacer primero, pero al ir variando FSR, cuando tenia que incrementar la direccion a la que apuntaba, ya tenia el valor de inicio de la 2ª tabla, pero el de la priemra se habia machacado.

Pero eso significa que tu código estaba mal hecho, y no que no se pueda. 

Ahora si quieres más precisiones, sube el código.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Mady

  • PIC10
  • *
  • Mensajes: 19
Re: Modo indirecto para comparar dos tablas en memoria
« Respuesta #4 en: 06 de Junio de 2007, 16:00:04 »
Muchas gracias Maunix, revise el código y efectivamente se puede hacer sin problemas. Lo adjunto por si a alguien le sirve:
De nuevo decir, que ste foro es uan grandisima ayuda para los que estamos aprendiendo. Saludos



movlw   0x60
         movwf   tabla1   ;Asigna la primera dirección de tabla1
         movlw   0x70
         movwf   tabla2   ;Asigna la primera dirección de tabla2

in_comp      movf   tabla1,W
         movwf   FSR      ;Puntero a la 1º dir de tabla1

         movf   INDF,w   ;Contenido de la 1ºdir de tabla 1-->w
         movwf   temp1   ;w-->temp1 (se vuelve a usar w y FSR)

         movf   tabla2,W
         movwf   FSR      ;Puntero a la 1º dir de tabla2

         movf   INDF,w   ;Contenido de la 1ºdir de tabla2-->w

         subwf   temp1,F   ;w-temp1-->temp1
         btfss   STATUS,Z  ;¿Ha sido 0 el resultado anterior?
         goto   distinto       ;NO
         goto   iguales   ;SI

distinto   bsf      F_COMP_RX;   Avisa con la flag de que ya ha encontrado
                      ; un byte no coincidente
         return

iguales      bcf      F_COMP_RX   ; Es 'z', ultimo byte
         sublw   'z'      ; Comprueba si el caracter comprobado es el último
                     ; acordado (aqui 'z')
         
         btfss   STATUS,Z   ;¿Es el último?
         goto   comp_nofin   ; No es 'z'
         return

comp_nofin                incf      tabla1;   Incrementa a la siguiente dir a apuntar de tabla1
                incf     tabla2;   Igual para tabla2
         goto   in_comp   ;continua la comparación
         

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Modo indirecto para comparar dos tablas en memoria
« Respuesta #5 en: 06 de Junio de 2007, 17:28:23 »
Muchas gracias Maunix, revise el código y efectivamente se puede hacer sin problemas.

Me alegro que te haya funcionado, y muchos se alegrarán de que hayas compartido tu código.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything