For your first part – when I have a large program and want to use a function-like appraoch, I do something like this.
	Code:
	' Variables for use inside functions
temp1 var word
temp2 var word
temp3 var word
' for Divide Function
Numerator var temp1
Denominator var temp2
DivAnswer var temp3
' for Square Function
tobesquared var temp1
SqrAnswer var temp2
Main:
' Do lots of stuff here
Numerator = 45
Denominator = 5
Gosub Divide
Serout, Portb.1, 2, (#DivAnswer)
' More stuff here
tobesquared= 9
Gosub Squared
 Serout, Portb.1, 2, (#SqrAnswer)
' Do more stuff
Goto Main
' Divide Function
Divide:
DivAnswer = Numerator/Demonimator
Return
' Squared Function
Squared:
SqrAnswer = tobesquared * tobesquared
Return
 In this manner, I can use names that make sense but reuse the globals each time.
For your second part try something like this:
	Code:
	...
counter var byte
compare var bit
counter = 0
GOTO Main ' jump over subroutine (to wherever I want, even line 100)
 'Init ABIC Suroutine
INTABIC:
LOW DIN
LOW SCLK
HIGH SCLK
HIGH DIN
LOW SCLK
LOW DIN
RETURN
Main:
for counter = 7 to 0 step -1
	if config_page_1.0[counter] Then
		HIGH DIN
	else
		LOW DIN
	ENdif
	HIGH SCLK
	LOW SCLK
next counter 
GOSUB INITABIC
for counter = 7 to 0 step -1
	if config_page_3.0[counter] Then
		HIGH DIN
	else
		LOW DIN
	ENdif
	HIGH SCLK
	LOW SCLK
next counter 
GOSUB INITABIC
etc.
GOTO Main
END
 
				
			
Bookmarks