I do it this way , and use the bounds checking features of arraywriteCode:'pic18f45k20 '**************************************************************** '* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 4/14/2015 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** '* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 4/14/2015 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** #CONFIG CONFIG FOSC = INTIO67 CONFIG FCMEN = OFF CONFIG IESO = OFF CONFIG PWRT = OFF CONFIG BOREN = SBORDIS CONFIG BORV = 18 CONFIG WDTEN = ON CONFIG WDTPS = 512 CONFIG CCP2MX = PORTC CONFIG PBADEN = OFF CONFIG LPT1OSC = OFF CONFIG HFOFST = ON CONFIG MCLRE = ON CONFIG STVREN = ON CONFIG LVP = OFF CONFIG XINST = OFF CONFIG DEBUG = OFF CONFIG CP0 = OFF CONFIG CP1 = OFF CONFIG CP2 = OFF CONFIG CP3 = OFF CONFIG CPB = OFF CONFIG CPD = OFF CONFIG WRT0 = OFF CONFIG WRT1 = OFF CONFIG WRT2 = OFF CONFIG WRT3 = OFF CONFIG WRTC = OFF CONFIG WRTB = OFF CONFIG WRTD = OFF CONFIG EBTR0 = OFF CONFIG EBTR1 = OFF CONFIG EBTR2 = OFF CONFIG EBTR3 = OFF CONFIG EBTRB = OFF #ENDCONFIG define OSC 64 osccon=$70 '64 mhz OSCTUNE.6=1 pause 2000 Serout2 PORTb.7,84,["ready",13,10] Addr var word Char var byte cnt var byte inbuff var byte[30] buff var byte[30] Clear goto StartLoop ' Required String1: @ da "This is a string",0 AnotherString: @ da "Here is another string",0 '------------GetAddress Macro - Location insensitive ------------------------- ASM GetAddress macro Label, Wout ; Returns the Address of a Label as a Word CHK?RP Wout movlw low Label movwf Wout movlw High Label movwf Wout + 1 endm ENDASM StartLoop: ' This loop repeats continuously just as a test. @ GetAddress _String1, _Addr ' Get address of String cnt=0 gosub StringOut ' Send the String Serout2 PORTb.7,84, [13,10] ' New Line Serout2 PORTb.7,84, ["inbuff ",str inbuff\cnt ,13,10] ' New Line @ GetAddress _AnotherString, _Addr ' Get address of String cnt=0 gosub StringOut ' Send the String Serout2 PORTb.7,84,[13,10] ' New Line Serout2 PORTb.7,84, ["inbuff ",str inbuff\cnt ,13,10] ' New Line pause 500 goto StartLoop ' Repeat StringOut: ' Send the string out via Hserout Readcode Addr, Char ' Get a character if Char = 0 then StringDone ' Look for Null char, Stop if found buff[cnt]=char cnt=cnt+1 Serout2 PORTb.7,84, [Char] ' Send char Addr = Addr + 1 ' Point to next character goto StringOut ' Continue with rest of the string StringDone: ARRAYWRITE inbuff,cnt,,[str buff] return end
Bookmarks