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
;----------------------------------------------------------------------------