Autor Tema: problemas con Define Tablas ¿PC?  (Leído 2592 veces)

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

Desconectado norak

  • PIC10
  • *
  • Mensajes: 33
problemas con Define Tablas ¿PC?
« en: 14 de Noviembre de 2008, 09:35:44 »
hola;
Estoy utilizando el pic18f4585 (las instrucciones se almacenan en 2 bytes)
(direcciones de 21 bits MSB:PCU(5)PCH(8)PCL ( 8 ):LSB)
(PCU == PCLATU ; PCH == PCLATH)
Necesito utilizar muchas tablas, con lo que superan las primeras 256 posiciones de memoria.
Para actualizar el PC convenientemente utilizo el siguiente código.
El problema es que cuando llamo a la tabla no me devuelve ni siquiera el primer caracter.
He comprobado que antes de la llamada a la tabla, el registro W tiene la dirección correspondiente
(la dirección de la tabla en concreto).

Se agredecerá enormemente cualquier sugerencia.

muchas gracias.


;----------------------------------------------------------------------------
no_err:      clrf   offset            ; load offset of character table
                        
            
start29:      movlw   UPPER TABnoerr
      movwf   PCLATU
               
      movlw   HIGH TABnoerr
      movwf   PCLATH
            
      movlw   LOW TABnoerr            
      addwf   offset,1         
            
      clrf   WREG
      addwfc   PCLATH,1
      addwfc   PCLATU,1

      movf   offset,W

      call   TABnoerr
      rcall   TxSerialSMS         ; transmito el caracter al puerto serie de pc e incremento convenientemente el offset
      btfss   STATUS,Z         ; If Z==1 --> Messagge Transmited
      bra   start29


;----------------------------------------------------------------------------
;Message to send

TABnoerr      movwf   PCL            ; Move offset to PC lower
            DT      0x0C,"ayuda,porfavor",0XA,0XD,0X0



;----------------------------------------------------------------------------
; Transmit Serial SMS Loop

TxSerialSMS:   addlw   0
      btfsc   STATUS,Z            ; Character == 00 ?
      return                  ; Yes, Z == 1
                        ; No, Z == 0
      btfss   PIR1,TXIF            ; check if transmitter busy
      bra      $-2            ; wait until transmitter is not busy --> PC = PC - 2 (return last instruction)
      movwf   TXREG               ; transmit the data
wait:      lfsr   0,TXSTA      
      btfss   INDF0,1               ; check TRMT bit in TXSTA (FSR)
      bra   wait               ; TXREG full  or TRMT = 0      
      incf   offset,f            ; TXREG empty or TRMT = 1
      incf   offset,f
      return

;----------------------------------------------------------------------------
« Última modificación: 14 de Noviembre de 2008, 09:42:12 por norak »

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: problemas con Define Tablas ¿PC?
« Respuesta #1 en: 14 de Noviembre de 2008, 20:43:25 »
Hola Norak

yo he estado haciendo pruebas con los PIC18, especificamente con el PIC18F4550,  y para ir familiarizandome con su arquitectura he hecho algunos ejemplos en ensamblador puedes verlos en el siguiente foro Ejemplos PIC18F4550, ahi hay unos ejemplos para manejar tablas en los PIC18, te aconsejo que revises el ejemplo TxRx_0, en ese ejemplo manejo tablas que contienen mensajes, pero para estas tablas utilizo la instruccion tblrd , que es lo que recomienda Microchip para los PIC18, una de sus ventajas es que los mensajes ocupan la mitad de la memoria que cuando usas retlw. Ya que dices que vas a usar muchos mensajes posiblemente sea mejor que uses este metodo.

Sobre tu programa revisandolo rapidamente me parece que tienes un  error en la parte donde defines tu tabla, la etiqueta TABnoerr deberia estar antes de la directiva DT no antes de la instruccion movwf   PCL, de aqui que no leas el primer caracter, otro error es que el valor de offset debe variar en incrementos de 2 (0,2,4,6 ...), pero cuando realizas addwf offset,1 ,la variable offset tendra un valor de la posicion de memoria en la que se encuentra la tabla y eso es lo que te trae errores posteriores con los otros caracteres.

Saludos

La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado norak

  • PIC10
  • *
  • Mensajes: 33
Re: problemas con Define Tablas ¿PC?
« Respuesta #2 en: 17 de Noviembre de 2008, 05:25:56 »
Hola,

muchas gracias por tu ayuda.
Tienes razón, al no encontrar el error, me puese a documentarme y acabé por usar las instrucciones que mencionas.
(además de derivarse de ello las ventajas que describes)

Sobre los errores del código que comentas, la etiqueta TABnoerr, necesitaba que estuviera con la instrucción movwf PCL, para antes de acceder
a la tabla, el PCL tenga el valor adecuado.

Tienes razón con que el incremento tiene que ser en múltiplos de dos, si te fijas, lo hago en la rutina TxSerialSMS (dos instrucciones incf offset,1)

pero aquí que es posible que hayas encontrado el error por que en el código principal utilizo también la variable offset para calcular el valor que finalmente
irá al PCL (addwf offset,1) con lo que pierdo el valor anteriormente almacenado en esa variable.

muchas gracias.

uN Abrazo


 

anything