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