milestag
- 15th April 2014, 00:28
I am using PBP3 (3.0.7.4) and Microcode Studio Plus (5.0.0.5). This code runs fine on a PIC18F2525, but on the 18F2550, I cannot get any GOTO or GOSUB instructions to work if the code I am jumping too is too far away. See the code attached which is very simplified but demonstrates the problem. The GOSUB works fine until I insert enough "filler code" to separate the call and the destination. The filler code is never executed, it just pushes the subroutine farther into the code space.
I am using the Trace Systems Bootloader, but the same problem still appears if I burn hex directly to a clean PIC. Interestingly, in the case of the Trace Bootloader, when the GOSUB fails, the PIC falls through to the bootloader (the bootloader is located at 0x6200). I have it down to commenting or uncommenting a single line of code to cause the problem.
To me it seems like the PIC gets lost if I try to jump to an address that is too far from the call. But this should not be the case on a PIC18F. I should be able to jump to any address on the PIC. I commented the code to show where it fails. If I uncomment that one line, it will never execute the subroutine when the "trigger" is pressed.
Has anyone else seen something similar to this? This is KILLING my real program. Thanks for any guidance.
--Jim
'Program Memory Bytes Used: 16372 of 32767
'Revision Date: 14 April 2014
'Written for PICBASIC PRO Compiler version 3.0.7
'Processor=PIC18F2550 20MHz Oscillator
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 5
DEFINE LCD_DATAUS 100
DEFINE NO_CLRWDT 1
DEFINE OSC 20 '
INCLUDE "con_vars.inc" 'constant and variable definitions
'************************************************* ************
'************************************************* ************
'******************** PIN ASSIGNMENTS ************************
'************************************************* ************
'************************************************* ************
'------------------ PORT B PIN ASSIGNMENTS -------------------
Symbol ir_in = PORTB.0 'IR receiver data input
Symbol sclk = PORTB.1 'isd_spi_clock
Symbol mosi = PORTB.2 'isd_spi_out
Symbol backlight = PORTB.3 'backlight
Symbol modesel = PORTB.4 'mode button
Symbol reload = PORTB.5 'reload button
Symbol hitled = PORTB.6 'sensor LED
Symbol trigger = PORTB.7 'trigger button
'------------------ PORT C PIN ASSIGNMENTS -------------------
Symbol ir_power = PORTC.0 'ir_power
Symbol muzzle2 = PORTC.1 'muzzle 2
Symbol mod_out = PORTC.2 'mod_out
'Symbol not_used = PORTC.3 'USB Vreg Capacitor
'Symbol not_used = PORTC.4 'USB D-
'Symbol not_used = PORTC.5 'USB D+
Symbol muzzle = PORTC.6 'muzzle 1
Symbol ss = PORTC.7 'isd_spi_slave_select
'------------------ PORT E PIN ASSIGNMENTS -------------------
Symbol sw4 = PORTE.3 'Input Only
'************************************************* ************
'************************************************* ************
'******************** INITIALIZATION *************************
'************************************************* ************
'************************************************* ************
initialize:
CLEAR 'initialize RAM
ADCON0 = 1 'AD on, CH0
ADCON1 = 15 'all pins are digital
ADCON2 = %00111111 'left justified result, max times
CMCON = 7 'turn off comparators
Poke $81,$FF 'turn off PORT B weak pull ups
RCSTA = 0 'disable serial port
'------------------------- TIMER 0 --------------------------
'Timer 0 is used for Input Pulse Measurement
TMR0L = 0 'clear Timer 0 low byte
T0CON = %11000101 'prescale = /64
INTCON.5 = 0 'disable TMR0 interrupt
'------------------------- TIMER 1 --------------------------
'Timer 1 is for Elapsed Time
TMR1H = 0 'clear Timer 1 high byte
TMR1L = 0 'clear Timer 1 low byte
T1CON = 49 'turn Timer 1 on ; prescale = 1:8
PIE1.0 = 0 'enable Timer 1 interrupt flag
PIR1.0 = 0 'clear overflow flag
'------------------------- TIMER 2 --------------------------
'Timer 2 is used for PWM module(s)
T2CON = 4 'Timer2 = ON; Prescale = 1:1
CCP1CON = 0 'PWM module off
'------------------------------------------------------------
TRISA = %00000000 'set PortA directions (0=Output, 1=Input)
TRISB = %10110001 'set PortB directions
TRISC = %00000000 'set PortC directions
PORTB = %00000010
PORTC = %10000000
pause 200
'************************************************* ***************
'************************************************* ***************
bootload_access: 'Trace Systems PIC18F Bootloader
IF trigger = 0 then 'bootloader access key, only on power up
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80," BOOT "
LCDOut $FE,$C0," LOADER "
pause 1000
@ goto 0x6200 'bootloader start address
EndIf
'************************************************* ***************
'************************************************* ***************
startup_screen:
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80,"JumpFail"
LCDOut $FE,$C0,"TestCode"
PAUSE 1000
'************************************************* ***************
'************************************************* ***************
start:
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80,"Waiting"
LCDOut $FE,$C0,"Trigger"
test_loop:
pause 100
if trigger = 0 then
gosub test_sub
endif
pause 100
goto test_loop
'************************************************* ***************
'************************************************* ***************
filler_code:
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'works to here
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'FAILED HERE IF LINE UNCOMMENTED
' LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
' LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
' LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
'************************************************* ***************
'************************************************* ***************
test_sub:
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80,"Got Here"
LCDOut $FE,$C0,"Test Sub"
pause 200
high hitled
pause 500
low hitled
return
'************************************************* ***************
'************************************************* ***************
End
I am using the Trace Systems Bootloader, but the same problem still appears if I burn hex directly to a clean PIC. Interestingly, in the case of the Trace Bootloader, when the GOSUB fails, the PIC falls through to the bootloader (the bootloader is located at 0x6200). I have it down to commenting or uncommenting a single line of code to cause the problem.
To me it seems like the PIC gets lost if I try to jump to an address that is too far from the call. But this should not be the case on a PIC18F. I should be able to jump to any address on the PIC. I commented the code to show where it fails. If I uncomment that one line, it will never execute the subroutine when the "trigger" is pressed.
Has anyone else seen something similar to this? This is KILLING my real program. Thanks for any guidance.
--Jim
'Program Memory Bytes Used: 16372 of 32767
'Revision Date: 14 April 2014
'Written for PICBASIC PRO Compiler version 3.0.7
'Processor=PIC18F2550 20MHz Oscillator
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 5
DEFINE LCD_DATAUS 100
DEFINE NO_CLRWDT 1
DEFINE OSC 20 '
INCLUDE "con_vars.inc" 'constant and variable definitions
'************************************************* ************
'************************************************* ************
'******************** PIN ASSIGNMENTS ************************
'************************************************* ************
'************************************************* ************
'------------------ PORT B PIN ASSIGNMENTS -------------------
Symbol ir_in = PORTB.0 'IR receiver data input
Symbol sclk = PORTB.1 'isd_spi_clock
Symbol mosi = PORTB.2 'isd_spi_out
Symbol backlight = PORTB.3 'backlight
Symbol modesel = PORTB.4 'mode button
Symbol reload = PORTB.5 'reload button
Symbol hitled = PORTB.6 'sensor LED
Symbol trigger = PORTB.7 'trigger button
'------------------ PORT C PIN ASSIGNMENTS -------------------
Symbol ir_power = PORTC.0 'ir_power
Symbol muzzle2 = PORTC.1 'muzzle 2
Symbol mod_out = PORTC.2 'mod_out
'Symbol not_used = PORTC.3 'USB Vreg Capacitor
'Symbol not_used = PORTC.4 'USB D-
'Symbol not_used = PORTC.5 'USB D+
Symbol muzzle = PORTC.6 'muzzle 1
Symbol ss = PORTC.7 'isd_spi_slave_select
'------------------ PORT E PIN ASSIGNMENTS -------------------
Symbol sw4 = PORTE.3 'Input Only
'************************************************* ************
'************************************************* ************
'******************** INITIALIZATION *************************
'************************************************* ************
'************************************************* ************
initialize:
CLEAR 'initialize RAM
ADCON0 = 1 'AD on, CH0
ADCON1 = 15 'all pins are digital
ADCON2 = %00111111 'left justified result, max times
CMCON = 7 'turn off comparators
Poke $81,$FF 'turn off PORT B weak pull ups
RCSTA = 0 'disable serial port
'------------------------- TIMER 0 --------------------------
'Timer 0 is used for Input Pulse Measurement
TMR0L = 0 'clear Timer 0 low byte
T0CON = %11000101 'prescale = /64
INTCON.5 = 0 'disable TMR0 interrupt
'------------------------- TIMER 1 --------------------------
'Timer 1 is for Elapsed Time
TMR1H = 0 'clear Timer 1 high byte
TMR1L = 0 'clear Timer 1 low byte
T1CON = 49 'turn Timer 1 on ; prescale = 1:8
PIE1.0 = 0 'enable Timer 1 interrupt flag
PIR1.0 = 0 'clear overflow flag
'------------------------- TIMER 2 --------------------------
'Timer 2 is used for PWM module(s)
T2CON = 4 'Timer2 = ON; Prescale = 1:1
CCP1CON = 0 'PWM module off
'------------------------------------------------------------
TRISA = %00000000 'set PortA directions (0=Output, 1=Input)
TRISB = %10110001 'set PortB directions
TRISC = %00000000 'set PortC directions
PORTB = %00000010
PORTC = %10000000
pause 200
'************************************************* ***************
'************************************************* ***************
bootload_access: 'Trace Systems PIC18F Bootloader
IF trigger = 0 then 'bootloader access key, only on power up
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80," BOOT "
LCDOut $FE,$C0," LOADER "
pause 1000
@ goto 0x6200 'bootloader start address
EndIf
'************************************************* ***************
'************************************************* ***************
startup_screen:
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80,"JumpFail"
LCDOut $FE,$C0,"TestCode"
PAUSE 1000
'************************************************* ***************
'************************************************* ***************
start:
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80,"Waiting"
LCDOut $FE,$C0,"Trigger"
test_loop:
pause 100
if trigger = 0 then
gosub test_sub
endif
pause 100
goto test_loop
'************************************************* ***************
'************************************************* ***************
filler_code:
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'works to here
LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'FAILED HERE IF LINE UNCOMMENTED
' LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
' LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
' LCDOut $FE,$C0,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
'************************************************* ***************
'************************************************* ***************
test_sub:
LCDOut $FE, 1 'clear LCD
LCDOut $FE,$80,"Got Here"
LCDOut $FE,$C0,"Test Sub"
pause 200
high hitled
pause 500
low hitled
return
'************************************************* ***************
'************************************************* ***************
End