Autor Tema: Creación de diversas tablas  (Leído 2276 veces)

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

Desconectado kukkiv

  • PIC10
  • *
  • Mensajes: 10
Creación de diversas tablas
« en: 06 de Agosto de 2016, 17:38:15 »
Buenas tardes, tengo una consulta con respecto a la creación de diversas tablas en assembler, ya que he copiado los respectivos códigos que he conseguido por este foro para poder colocar varias tablas en distintas páginas con el comando PCLATH, pero en mi caso, no ha sido posible que corra de manera correcta mi programa, mis dudas surgen en dónde colocar la tabla que estoy direccionando y cuál es la manera correcta de escribirlo,
esperando su pronta respuesta, dejaré adjunto el código con el que estoy trabajando.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Creación de diversas tablas
« Respuesta #1 en: 06 de Agosto de 2016, 20:41:23 »
Lo que encontre mal en el programa sobre las tablas (no me fije en todo el programa) es:

el uso de la directiva ORG.

Voy a hacer un ejemplo para que veas el por que:

Tu codigo:
Código: ASM
  1. Org      900h
  2. TABLASCII2
  3.     ADDWF   PCL,F                ; 0x900
  4.     RETLW   H'30'                  ; 0x901
  5.     ;....... mas instrucciones
  6.     RETURN                           ; 0x910
  7.  
  8. PRINCIPAL
  9.  
  10.     BANKSEL ANSEL             ; 0x911 y 0x912
  11.     CLRF ANSEL                    ; 0x913

Codigo Correcto:

Código: ASM
  1. ORG 0X00
  2.     GOTO PRINCIPAL         ; 0x00
  3.     ORG 0X04
  4.     RETURN                       ; 0x04 , es el vector de interrupcion, por si las dudas lo activas sin darte cuenta que vuelva y asi no hace un efecto como un "reset",
  5.  
  6. PRINCIPAL
  7.  
  8.     BANKSEL ANSEL             ; 0x05        observa que solo se acomoda, no hace falta un ORG para el 0x05
  9.     CLRF ANSEL                    ; 0x06
  10.     ; Aca todo lo demas del programa
  11.  
  12.     ; LLegamos al Final del progrma
  13.  
  14.     Org      900h
  15. TABLASCII2
  16.     ADDWF   PCL,F                ; 0x900
  17.     RETLW   H'30'                  ; 0x901

La llamada a la tabla es "casi" correcta si se cumple lo anterior, le faltaria un checkeo de limite, es decir que se fije correctamente que no pase del maximo indice, si nuestra tabla tiene 10 entradas, entonces no puede tener el valor 11 o mas RES2, falta segurarse de eso:

Código: ASM
  1. movlw h'09'  ; pag 0 subpagina 6
  2.     movwf PCLATH
  3.     MOVF   RES2,W
  4.     CALL   TABLASCII2

----------------------------------

Dejando de lado un poco todo lo demas, tengo 3 cosas para decirte:

- Cuando tengas la necesidad de probar algo como en este caso, solo proba lo que necesitas, y no TODO un proyecto entero. Por que el problema puede estar en otro lado

- Por que tenes como 3 tablas iguales es otra cosa que me pregunto

- ¿te das cuenta que esa tabla es algo que no tiene sentido? Y te doy el ejemplo para que compares de nuevo:

Tu codigo:
Código: ASM
  1. movlw h'09'  ; pag 0 subpagina 6
  2.     movwf PCLATH
  3.     MOVF   RES2,W
  4.     ; Aca comprbaria que es menor o igual a 10
  5.     CALL   TABLASCII2
  6.     ; Mas codigo aca
  7.  
  8. TABLASCII2
  9.     ADDWF   PCL,F
  10.     RETLW   H'30'
  11.     RETLW   H'31'        ;LETRA 1
  12.     RETLW   H'32'        ;LETRA 2
  13.     RETLW   H'33'        ;LETRA 3
  14.     RETLW   H'34'        ;LETRA 4
  15.     RETLW   H'35'        ;LETRA 5
  16.     RETLW   H'36'        ;LETRA 6
  17.     RETLW   H'37'        ;LETRA 7
  18.     RETLW   H'38'        ;LETRA 8
  19.     RETLW   H'39'        ;LETRA 9

Codigo correcto para este caso:

Código: ASM
  1. MOVLW   0x30
  2.     ADDWF   RES2, F
  3.     ; Aca compruebo que no sea mayor a 0x3A
« Última modificación: 06 de Agosto de 2016, 22:38:48 por KILLERJC »

Desconectado kukkiv

  • PIC10
  • *
  • Mensajes: 10
Re:Creación de diversas tablas
« Respuesta #2 en: 07 de Agosto de 2016, 01:05:58 »
Entiendo a lo que quieres llegar intentaré aplicar todas las recomendaciones. Muchas gracias !


 

anything