Hi Darrel - Hi Bruce,
Darrel I checked out your new message table code for 16 bit pics. Very Nice!
Bruce I read up on the info you linked me to, and I have a pretty good grasp of what you are doing in your code. I also figured out that the GOTO $-2 is just a slick way to skip backwards without having to use a labeled reference.
Well of course after getting my brain filled with a bit more knowledge I decided to try my hand at writing yet another variation on message string handling, but not without problems (and a smoking head). Check out this code:
It's more of a variation of what Darrel's code does. Only I wanted to try using the POP and PUSH functions on the PIC18F to allow me to have embedded message strings (this is a pet peeve of mine). Anyway if you run the code as is (leave the 2nd message string commented out) everything works great. However if you try to use more then one message (uncomment the 2nd message string) then all hell breaks loose, and you end up with garbled messages and a runaway processor.Code:DEFINE LOADER_USED 1 DEFINE OSC 40 ' change to suit oscillator speed DEFINE HSER_RCSTA 90h DEFINE HSER_TXSTA 20h DEFINE HSER_BAUD 19200 ' change to suit baud rate message var byte[40] stringsize var byte x var byte temp var byte Clr Main: Call getSTR @ data "This is a string",0 Gosub putSTR ' Call getSTR '@ data "yet another string again",0 ' Gosub putSTR Done: Goto Done putSTR: For x = 0 To (stringsize-1) temp = message[x] Hserout [temp] Next x Hserout [$0D,$0A] ; send carriage return + line feed stringsize = 0 ; reset for next message Return asm _getSTR LFSR FSR0,_message ; set message array base address ;copy return address to TBLPTR and then pop it off the stack movf TOSU,W movwf TBLPTRU movf TOSH,W movwf TBLPTRH movf TOSL,W movwf TBLPTRL POP ;TBLPTR should now be pointing to 1st character in string Next_Char tblrd *+ ; table read and post increment TBLPTR movf TABLAT,W ; retrieve character to W register movwf POSTINC0 ; xfer to message array and increment FSR incf _stringsize,F ; keep track of message string size movf TABLAT,W ; Is character = 0? bnz Next_Char ; If not, then get next character ;use incremented value of TBLPTR as new return address (push it) movf TBLPTRU,W movwf TOSU movf TBLPTRH,W movwf TOSH movf TBLPTRL,W movwf TOSL PUSH return ;finished with message, return to caller endasm
Any ideas what I am doing wroung?




Bookmarks