Here's some code I used for outputting text strings on a PIC16... PrintString macro DataAddr ; Macro to preload data address prior to calling print string subroutine movlw high(DataAddr) movwf StringPointerHi movlw low(DataAddr) movwf StringPointerLo call PrintStringSub endm ;========================PrintString============================== PrintStringSub ; Pass pointer to string in ROM in StringPointerHi and StringPointerLo. String is in DT statements, which ; create arrays or RETLW statements. cblock StringPointerHi StringPointerLo endc movf StringPointerHi,w ; get high half of string pointer movwf PCLATH ; save it for table jump movf StringPointerLo,w ; get low half call GetTableByte ; go get byte in retlw in w addlw 0 ; make sure Z is set or cleared based on w skpnz return ; exit if byte is zero, end of string call Tx232 ; Go send the byte incfsz StringPointerLo,f ; move up to next character goto PrintStringSub ; StringPointerLo did not overflow, so we don't need to increment high byte incf StringPointerHi,f ; bump high byte goto PrintStringSub GetTableByte movwf PCL ; jump into table. Returns with value in w HelpString dt "! Send data\r\n" dt "# Clear log, reset timer\r\n",0 SampleUse PrintString HelpString ; output the help string Harold -- FCC Rules Updated Daily at http://www.hallikainen.com - Advertising opportunities available! -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist