Übersetzungen dieser Seite:

Befehlssatz

Die gelb unterlegten Bereiche sind die Erweiterungen meiner ATTiny_TPS und der Arduino_TPS Version. In eckigen Klammern stehen jeweils die entsprechenden Mnemonics des SPS Assemblers.

<html> <table width=„100%“ cellspacing=„0“ border=„1“ style=„page-break-inside: avoid“>

  <thead>
      <tr valign="TOP">
          <th width="3%">&nbsp;</th>
          <th width="10%">0</th>
          <th width="10%">1</th>
          <th width="10%">2</th>
          <th width="12%">3</th>
          <th width="10%">4</th>
          <th width="14%">5</th>
          <th width="10%">6</th>
          <th width="18%">7</th>
      </tr>
  </thead>
  <tbody>
      <tr valign="TOP">
          <td>&nbsp;</td>
          <td>n.n.</td>
          <td>Port<br/>[DOUT]</td>
          <td>Delay<br/>[WAIT]</td>
          <td>Jump back relative<br/>[RJMP]</td>
          <td>A=#<br/>[LDA]</td>
          <td>=A</td>
          <td>A=</td>
          <td>A=Ausdruck</td>
      </tr>
      <tr valign="TOP">
          <td>0</td>
          <td bgcolor="#ffff00">NOP [NOP]</td>
          <td>aus</td>
          <td>1ms</td>
          <td>0</td>
          <td>0</td>
          <td bgcolor="#ffff00">A&lt;-&gt;B [SWAP]</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
      </tr>
      <tr valign="TOP">
          <td>1</td>
          <td>&nbsp;</td>
          <td>1</td>
          <td>2ms</td>
          <td>1</td>
          <td>1</td>
          <td>B=A [MOV]</td>
          <td>A=B [MOV]</td>
          <td>A=A + 1 [INC]</td>
      </tr>
      <tr valign="TOP">
          <td>2</td>
          <td>&nbsp;</td>
          <td>2</td>
          <td>5ms</td>
          <td>2</td>
          <td>2</td>
          <td>C=A [MOV]</td>
          <td>A=C [MOV]</td>
          <td>A=A - 1 [DEC]</td>
      </tr>
      <tr valign="TOP">
          <td>3</td>
          <td>&nbsp;</td>
          <td>3</td>
          <td>10ms</td>
          <td>3</td>
          <td>3</td>
          <td>D=A [MOV]</td>
          <td>A=D [MOV]</td>
          <td>A=A + B [ADD]</td>
      </tr>
      <tr valign="TOP">
          <td>4</td>
          <td>&nbsp;</td>
          <td>4</td>
          <td>20ms</td>
          <td>4</td>
          <td>4</td>
          <td>Dout=A [STA]</td>
          <td>Din [LDA]</td>
          <td>A=A - B [SUB]</td>
      </tr>
      <tr valign="TOP">
          <td>5</td>
          <td>&nbsp;</td>
          <td>5</td>
          <td>50ms</td>
          <td>5</td>
          <td>5</td>
          <td>Dout.1=A.1 [STA]</td>
          <td>Din.1 [LDA]</td>
          <td>A=A * B [MUL]</td>
      </tr>
      <tr valign="TOP">
          <td>6</td>
          <td>&nbsp;</td>
          <td>6</td>
          <td>100ms</td>
          <td>6</td>
          <td>6</td>
          <td>Dout.2=A.1 [STA]</td>
          <td>Din.2 [LDA]</td>
          <td>A=A / B [DIV]</td>
      </tr>
      <tr valign="TOP">
          <td>7</td>
          <td>&nbsp;</td>
          <td>7</td>
          <td>200ms</td>
          <td>7</td>
          <td>7</td>
          <td>Dout.3=A.1 [STA]</td>
          <td>Din.3 [LDA]</td>
          <td>A=A and B [AND]</td>
      </tr>
      <tr valign="TOP">
          <td>8</td>
          <td>&nbsp;</td>
          <td>8</td>
          <td>500ms</td>
          <td>8</td>
          <td>8</td>
          <td>Dout.4=A.1 [STA]</td>
          <td>Din.4 [LDA]</td>
          <td>A=A or B [OR]</td>
      </tr>
      <tr valign="TOP">
          <td>9</td>
          <td>&nbsp;</td>
          <td>9</td>
          <td>1s</td>
          <td>9</td>
          <td>9</td>
          <td>PWM.1=A [STA]</td>
          <td>ADC.1 [LDA]</td>
          <td>A=A xor B [XOR]</td>
      </tr>
      <tr valign="TOP">
          <td>a</td>
          <td>&nbsp;</td>
          <td>10</td>
          <td>2s</td>
          <td>10</td>
          <td>10</td>
          <td>PWM.2=A [STA]</td>
          <td>ADC.2 [LDA]</td>
          <td>A= not A [NOT]</td>
      </tr>
      <tr valign="TOP">
          <td>b</td>
          <td>&nbsp;</td>
          <td>11</td>
          <td>5s</td>
          <td>11</td>
          <td>11</td>
          <td bgcolor="#ff8000">Servo.1=A [STA]</td>
          <td bgcolor="#ffff00">RCin.1 [LDA]</td>
          <td bgcolor="#ffff00">A= A % B (Rest) [MOD]</td>
      </tr>
      <tr valign="TOP">
          <td>c</td>
          <td>&nbsp;</td>
          <td>12</td>
          <td>10s</td>
          <td>12</td>
          <td>12</td>
          <td bgcolor="#ff8000">Servo.2=A [STA]</td>
          <td bgcolor="#ffff00">RCin.2 [LDA]</td>
          <td bgcolor="#ffff00">A= A + 16 * B [BYTE]</td>
      </tr>
      <tr valign="TOP">
          <td>d</td>
          <td>&nbsp;</td>
          <td>13</td>
          <td>20s</td>
          <td>13</td>
          <td>13</td>
          <td bgcolor="#ffff00">E=A [MOV]</td>
          <td bgcolor="#ffff00">A=E [MOV]</td>
          <td bgcolor="#ffff00">A= B - A[BSUBA]</td>
      </tr>
      <tr valign="TOP">
          <td>e</td>
          <td>&nbsp;</td>
          <td>14</td>
          <td>30s</td>
          <td>14</td>
          <td>14</td>
          <td bgcolor="#ffff00">F=A [MOV]</td>
          <td bgcolor="#ffff00">A=F [MOV]</td>
          <td bgcolor="#ffff00">A=A SHR 1 [SHR]<br/> ab V 11</td>
      </tr>
      <tr valign="TOP">
          <td>f</td>
          <td>&nbsp;</td>
          <td>15</td>
          <td>60s</td>
          <td>15</td>
          <td>15</td>
          <td bgcolor="#ffff00">Push A [PUSH]</td>
          <td bgcolor="#ffff00">Pop A [POP]</td>
          <td bgcolor="#ffff00">A=A SHL 1 [SHL]<br/> ab V 11</td>
      </tr>
  </tbody>

</table> </html> Zus. Features in der Arduino_TPS Version:

  • Es gibt 2 zus. Register (E und F)
  • und es gibt einen Kellerstapel mit den 2 Methoden push (auflegen) und pop (runter nehmen). In dem Stapel haben 16 Werte Platz.
  • Weiterhin gibt es 2 neue Berechnungen, einmal den Rest einer Division (A= A % B) und einmal eine 8-Bit umwandlung. A = A + 16 * B
  • Ab Version 0.6 ist auch noch der Swap Befehl hinzugekommen, der A und B Register vertauscht.
  • Und eine neue Berechnung A = B - A. Gerade wenn man sich im 8-Bit Raum aufhält ist es manchmal recht umständlich, diese Operation auszuführen.
  • ab Version 11 gibt es nun auch Shift Operationen. Diese verschieben den Inhalt des Registers A entwedernahc links SHL (was eine Multiplikation mit 2 entspricht) oder nach rechts (SHR). Das wäre dann eine Division durch 2. Achtung: zwar befinden wir uns hier im 4Bit Raum, diese Operationen sind aber 8 Bit fähig.

<html> <table width=„100%“ cellspacing=„0“ border=„1“ style=„page-break-inside: avoid“>

  <thead>
      <tr valign="TOP">
          <th width="3%">&nbsp;</th>
          <th width="8%">8</th>
          <th width="12%">9</th>
          <th width="17%">a</th>
          <th width="17%">b</th>
          <th width="13%">c</th>
          <th width="16%">d</th>
          <th width="10%">e</th>
          <th width="4%">f</th>
      </tr>
  </thead>
  <tbody>
      <tr valign="TOP">
          <td>&nbsp;</td>
          <td>Page [PAGE]</td>
          <td>Jump absolut (#+16*page)<br/>[JMP]</td>
          <td>C* C&gt;0: C=C-1;<br/>
          Jump # + (16*page)<br/>[LOOPC]</td>
          <td>D* D&gt;0:D=D-1;<br/>
          Jump # + (16*page)<br/>[LOOPC]</td>
          <td>Skip if</td>
          <td>Call # + (16*Page)<br/>[Call]</td>
          <td>Callsub/Ret</td>
          <td>Byte Befehle</td>
      </tr>
      <tr valign="TOP">
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td bgcolor="#ffff00">A==0 [SKIP0]</td>
          <td>0</td>
          <td>ret [RTR]</td>
          <td bgcolor="#ffff00">A=ADC.1 [BLDA]</td>
      </tr>
      <tr valign="TOP">
          <td>1</td>
          <td>1</td>
          <td>1</td>
          <td>1</td>
          <td>1</td>
          <td>A&gt;B [AGTB]</td>
          <td>1</td>
          <td bgcolor="#ffff00">Call 1 [CASB]</td>
          <td bgcolor="#ffff00">A=ADC.2 [BLDA]</td>
      </tr>
      <tr valign="TOP">
          <td>2</td>
          <td>2</td>
          <td>2</td>
          <td>2</td>
          <td>2</td>
          <td>A&lt;B [ALTB]</td>
          <td>2</td>
          <td bgcolor="#ffff00">2 [CASB]</td>
          <td bgcolor="#ffff00">A=RCin.1 [BLDA]</td>
      </tr>
      <tr valign="TOP">
          <td>3</td>
          <td>3</td>
          <td>3</td>
          <td>3</td>
          <td>3</td>
          <td>A==B [AEQB]</td>
          <td>3</td>
          <td bgcolor="#ffff00">3 [CASB]</td>
          <td bgcolor="#ffff00">A=RCin.2 [BLDA]</td>
      </tr>
      <tr valign="TOP">
          <td>4</td>
          <td>4</td>
          <td>4</td>
          <td>4</td>
          <td>4</td>
          <td>Din.1==1 [DEQ1 1]</td>
          <td>4</td>
          <td bgcolor="#ffff00">4 [CASB]</td>
          <td bgcolor="#ffff00">PWM.1=A [BSTA]</td>
      </tr>
      <tr valign="TOP">
          <td>5</td>
          <td>5</td>
          <td>5</td>
          <td>5</td>
          <td>5</td>
          <td>Din.2==1 [DEQ1 2]</td>
          <td>5</td>
          <td bgcolor="#ffff00">5 [CASB]</td>
          <td bgcolor="#ffff00">PWM.2=A [BSTA]</td>
      </tr>
      <tr valign="TOP">
          <td>6</td>
          <td>6</td>
          <td>6</td>
          <td>6</td>
          <td>6</td>
          <td>Din.3==1 [DEQ1 3]</td>
          <td>6</td>
          <td bgcolor="#ffff00">6 [CASB]</td>
          <td bgcolor="#ff8000">Servo.1=A [BSTA]</td>
      </tr>
      <tr valign="TOP">
          <td>7</td>
          <td>7</td>
          <td>7</td>
          <td>7</td>
          <td>7</td>
          <td>Din.4==1 [DEQ1 4]</td>
          <td>7</td>
          <td>&nbsp;</td>
          <td bgcolor="#ff8000">Servo.2=A [BSTA]</td>
      </tr>
      <tr valign="TOP">
          <td>8</td>
          <td bgcolor="#ffff00">8</td>
          <td>8</td>
          <td>8</td>
          <td>8</td>
          <td>Din.1==0 [DEQ0 1]</td>
          <td>8</td>
          <td bgcolor="#ffff00">Def 1 [DFSB]</td>
          <td  bgcolor="#ff8000">Tone=A [TONE]</td>
      </tr>
      <tr valign="TOP">
          <td>9</td>
          <td bgcolor="#ffff00">9</td>
          <td>9</td>
          <td>9</td>
          <td>9</td>
          <td>Din.2==0 [DEQ0 2]</td>
          <td>9</td>
          <td bgcolor="#ffff00">2 [DFSB]</td>
          <td>&nbsp;</td>
      </tr>
      <tr valign="TOP">
          <td>a</td>
          <td bgcolor="#ffff00">10</td>
          <td>10</td>
          <td>10</td>
          <td>10</td>
          <td>Din.3==0 [DEQ0 3]</td>
          <td>10</td>
          <td bgcolor="#ffff00">3 [DFSB]</td>
          <td>&nbsp;</td>
      </tr>
      <tr valign="TOP">
          <td>b</td>
          <td bgcolor="#ffff00">11</td>
          <td>11</td>
          <td>11</td>
          <td>11</td>
          <td>Din.4==0 [DEQ0 4]</td>
          <td>11</td>
          <td bgcolor="#ffff00">4 [DFSB]</td>
          <td>&nbsp;</td>
      </tr>
      <tr valign="TOP">
          <td>c</td>
          <td bgcolor="#ffff00">12</td>
          <td>12</td>
          <td>12</td>
          <td>12</td>
          <td>S_PRG==0 [PRG0]</td>
          <td>12</td>
          <td bgcolor="#ffff00">5 [DFSB]</td>
          <td>&nbsp;</td>
      </tr>
      <tr valign="TOP">
          <td>d</td>
          <td bgcolor="#ffff00">13</td>
          <td>13</td>
          <td>13</td>
          <td>13</td>
          <td>S_SEL==0 [SEL0]</td>
          <td>13</td>
          <td bgcolor="#ffff00">6 [DFSB]</td>
          <td bgcolor="#ffff00">int. LED on</td>
      </tr>
      <tr valign="TOP">
          <td>e</td>
          <td bgcolor="#ffff00">14</td>
          <td>14</td>
          <td>14</td>
          <td>14</td>
          <td>S_PRG==1 [PRG1]</td>
          <td>14</td>
          <td>&nbsp;</td>
          <td bgcolor="#ffff00">int. LED off</td>
      </tr>
      <tr valign="TOP">
          <td>f</td>
          <td bgcolor="#ffff00">15</td>
          <td>15</td>
          <td>15</td>
          <td>15</td>
          <td>S_SEL==1 [SEL1]</td>
          <td>15</td>
          <td bgcolor="#ffff00">restart [REST]</td>
          <td bgcolor="#ffff00">PrgEnd [PEND]</td>
      </tr>
  </tbody>

</table> </html> Zus. Features in der Arduino_TPS Version:

  • Weil wir genug EEPROM haben ist der Page Bereich auf 16 Seiten ausgedehnt. Macht also ins. 256 Bytes
  • Beim Skip gibt’s noch den A=0 Befehl.
  • Über die E Befehle können nun auch 6 echte Unterprogramme angelegt werden. Diese werden über den Befehl Def# angelegt. Mit Call# wird die Routine angesprungen. Mit Return kommt man zurück. Die Def# dürfen auch oberhalb der 256 Bytes im EEPROM liegen. Also auch ausserhalb der Reichtweite der Sprungbefehle.
  • Neu ist auch der Restartbefehl, mit dem der ganze Controller neu gestartet wird.
  • Im Bereich F sind Befehle hinterlegt, die mit 8 Bit Auflösung arbeiten.
  • FF bedeutet Programmende. → automatischer Sprung nach 0.
  • NEU Tone Befehl: gibt einen Ton aus. Basis sind die Midinoten. Es werden die Midi Noten von 36 (C2) bis 108 (C8) unterstützt. Ausgang ist der PWM 2. Basis ist das A-Register als 8 Bit Wert.
arduino/arduinosps/commandtable.txt · Zuletzt geändert: 2022/06/07 10:15 von admin
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0