<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=ON_VALUE</id>
		<title>ON VALUE - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=ON_VALUE"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=ON_VALUE&amp;action=history"/>
		<updated>2026-05-30T12:46:49Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=ON_VALUE&amp;diff=774&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;= &lt;span class=&quot;f_Header&quot;&gt;Action&lt;/span&gt; =  Branch to one of several specified labels, depending on the value of a variable.  &lt;span style=&quot;font-family: Arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;  &lt;s...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=ON_VALUE&amp;diff=774&amp;oldid=prev"/>
				<updated>2013-02-11T20:52:05Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =  Branch to one of several specified labels, depending on the value of a variable.  &amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;  &amp;lt;s...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Branch to one of several specified labels, depending on the value of a variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;ON&amp;lt;/span&amp;gt;&amp;amp;nbsp;var [GOTO] [GOSUB] label1 [, label2 ] [,CHECK]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;515&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;21%&amp;quot; style=&amp;quot;width: 105px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Var&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;98%&amp;quot; style=&amp;quot;width: 401px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The numeric variable to test.&lt;br /&gt;
&lt;br /&gt;
This can also be a SFR such as PORTB.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;21%&amp;quot; style=&amp;quot;width: 105px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
label1, label2&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;98%&amp;quot; style=&amp;quot;width: 401px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The labels to jump to depending on the value of var.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;21%&amp;quot; style=&amp;quot;width: 105px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
CHECK&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;98%&amp;quot; style=&amp;quot;width: 401px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
An optional check for the number of provided labels.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the value is zero based. So when var is 0, the first specified label is jumped/branched.&lt;br /&gt;
&lt;br /&gt;
It is important that each possible value has an associated label.&lt;br /&gt;
&lt;br /&gt;
When there are not enough labels, the stack will get corrupted. For example&amp;amp;nbsp;:&lt;br /&gt;
&lt;br /&gt;
ON value label1, label2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And value = 2, there is no associated label.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use the optional CHECK so the compiler will check the value against the number of provided labels. When there are not enough labels for the value, there will be no GOTO or GOSUB and the next line will be executed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See Also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
[[ON INTERRUPT|ON INTERRUPT]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;ASM&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
The following code will be generated for a non-MEGA micro with ON value GOTO.&lt;br /&gt;
&lt;br /&gt;
Ldi R26,$60 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; load address of variable&lt;br /&gt;
&lt;br /&gt;
Ldi R27,$00&amp;amp;nbsp;; load constant in register&lt;br /&gt;
&lt;br /&gt;
Ld R24,X&lt;br /&gt;
&lt;br /&gt;
Clr R25&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ldi R30, Low(ON_1_ * 1) &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; load Z with address of the label&lt;br /&gt;
&lt;br /&gt;
Ldi R31, High(ON_1_ * 1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add zl,r24 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; add value to Z&lt;br /&gt;
&lt;br /&gt;
Adc zh,r25&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ijmp &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;; jump to address stored in Z&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ON_1_:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rjmp lbl1 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;; jump table&lt;br /&gt;
&lt;br /&gt;
Rjmp lbl2&lt;br /&gt;
&lt;br /&gt;
Rjmp lbl3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code will be generated for a non-MEGA micro with ON value GOSUB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;;#####&amp;lt;/nowiki&amp;gt; On X Gosub L1 , L2&lt;br /&gt;
&lt;br /&gt;
Ldi R30,Low(ON_1_EXIT * 1)&lt;br /&gt;
&lt;br /&gt;
Ldi R31,High(ON_1_EXIT * 1)&lt;br /&gt;
&lt;br /&gt;
Push R30&amp;amp;nbsp;;push return address&lt;br /&gt;
&lt;br /&gt;
Push R31&lt;br /&gt;
&lt;br /&gt;
Ldi R30,Low(ON_1_ * 1) &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;;load table address&lt;br /&gt;
&lt;br /&gt;
Ldi R31,High(ON_1_ * 1)&lt;br /&gt;
&lt;br /&gt;
Ldi R26,$60&lt;br /&gt;
&lt;br /&gt;
Ld R24,X&lt;br /&gt;
&lt;br /&gt;
Clr R25&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add zl,r24&amp;amp;nbsp;; add to address of jump table&lt;br /&gt;
&lt;br /&gt;
Adc zh,r25&lt;br /&gt;
&lt;br /&gt;
Ijmp &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;; jump&amp;amp;nbsp;!!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ON_1_:&lt;br /&gt;
&lt;br /&gt;
Rjmp L1&lt;br /&gt;
&lt;br /&gt;
Rjmp L2&lt;br /&gt;
&lt;br /&gt;
ON_1_EXIT:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see a jump is used to call the routine. Therefore the return address is first saved on the stack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
'name : ongosub.bas&lt;br /&gt;
'copyright : (c) 1995-2005, MCS Electronics&lt;br /&gt;
'purpose : demo : ON .. GOSUB/GOTO&lt;br /&gt;
'micro : Mega48&lt;br /&gt;
'suited for demo : yes&lt;br /&gt;
'commercial addon needed : no&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
$regfile = &amp;quot;m48def.dat&amp;quot; ' specify the used micro&lt;br /&gt;
$crystal = 4000000 ' used crystal frequency&lt;br /&gt;
$baud = 19200 ' use baud rate&lt;br /&gt;
$hwstack = 32 ' default use 32 for the hardware stack&lt;br /&gt;
$swstack = 10 ' default use 10 for the SW stack&lt;br /&gt;
$framesize = 40 ' default use 40 for the frame space&lt;br /&gt;
 &lt;br /&gt;
Dim A As Byte&lt;br /&gt;
Input &amp;quot;Enter value 0-2 &amp;quot; , A 'ask for input&lt;br /&gt;
Rem Note That The Starting Value Begins With 0&lt;br /&gt;
On A Gosub L0 , L1 , L2&lt;br /&gt;
Print &amp;quot;Returned&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
If Portb &amp;lt; 2 Then 'you can also use the portvalue&lt;br /&gt;
On Portb Goto G0 , G1&lt;br /&gt;
End If&lt;br /&gt;
End_prog:&lt;br /&gt;
End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
L0:&lt;br /&gt;
Print &amp;quot;0 entered&amp;quot;&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
L1:&lt;br /&gt;
Print &amp;quot;1 entered&amp;quot;&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
L2:&lt;br /&gt;
Print &amp;quot;2 entered&amp;quot;&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
G0:&lt;br /&gt;
Print &amp;quot;P1 = 0&amp;quot;&lt;br /&gt;
Goto End_prog&lt;br /&gt;
 &lt;br /&gt;
G1:&lt;br /&gt;
Print &amp;quot;P1 = 1&amp;quot;&lt;br /&gt;
Goto End_prog&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br/&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM Language Reference]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>