Befehlserweiterungen fr MCS-51-BASIC ------------------------------------- Befehlserweiterungen lassen sich fr MCS-51-BASIC sehr leicht selber schreiben, da sie im Interpreter bereits vorgesehen sind! Es k”nnen max. 16 eigene Befehle oder Funktionen (fr die Tokens 10H bis 1FH) hinzugefgt werden. Betriebssystemrotinen k”nnen ber das Laden eines OPBYTET's und den Aufruf LCALL 30H verwendet werden. Es folgt eine Liste aller vorhandenen OPBYTE's: Die Vorhandenen OPBYTE's des MCS-51-BASIC ----------------------------------------- OPBYTE - 00H Rckkehr in den Kommando-Modus - Der BASIC-Interpreter gibt die Meldung READY aus und warten nach dem Prompt ">", auf weitere Eingaben. OPBYTE - O1H Wert auf dem Argument Stack nach R3:Rl holen - Der auf dem Argument Stack befindliche Wert wird als 16 Bit Integer-Zahl in das Registerpaar R3:Rl geholt. Fehler werden dabei vom BASIC behandelt (A-STACK, BAD ARGUMENT). Die Zahl muá dabei zwischen 0 und OFFFFH liegen. Der Nachkommateil wird dabei abgeschnitten und nicht gerundet. OPBYTE - 02H Wert der durch R2:RO adressierten Flieákommazahl auf den Argument Stack speichern - Eine durch Registerpaar R2:RO adressierte Flieákommazahl wird dem Argument Stack bergeben. R2:RO zeigt dabei auf das h”chstwertigste Byte. Nach der Operation ist der Argument-Stack-Pointer und R2:RO jeweils um 6 erniedrigt. OPRYTE - 03H Wert der Flieákommazahl auf dem Argument Stack nach R3:Rl speichern - Die Flieákommazahl auf dem Argument Stack wird ab Adresse R3:Rl abgespeichert. R3:Rl zeigt dabei auf die Speicherstelle fr das h”chstwertigste Byte. Nach der Operation ist der Argument Stack Pointer um 6 erh”ht. das Registerpaar R3:Rl um 6 erniedrigt. OPRYTE - 04H EPROM-Programmierung - Gleiche Funktion wie BASIC Befehl "PGM". Die zu programmierenden Daten mssen im externen Datenspeicher abgelegt sein. Das Registerpaar R3:Rl enth„lt die Startadresse der Daten. Registerpaar R7:R6 die Anzahl der Datenbytes. Das Registerpaar R2:RO wird mit der Startadresse (minus 1) des PROMs geladen. Der Anwender muá weiterhin dafr sorgen, daá die Programmierspannung vor Beginn der Programmierung eingeschaltet wird. Dies wird durch L”schen von Port 1 Bit 5 erreicht. Nach erfolgter Programmierung sollte die Programierspannung auch wieder abgeschaltet werden. Tritt w„hrend der Programmierung ein Fehler auf, so wird dies dem aufrufendem Programm dadurch mitgeteilt, daá das Registerpaar R7:R6 nicht bis auf Null heruntergez„hlt wurde. In Registerpaar R2:RO steht dann die Adresse im PROM, bei der ein Fehler aufgetreten ist. OPBYTE - 05H Eingabe eines String in den Eingabe-Puffer - Eine Zeile Text wird in den BASIC Eingabe Puffer von der Konsole eingelesen. Dieser beginnt an der externen Datenspeicherstelle 0007H. Zeileneditierung ist m”glich (DEL, CONTROL-D). Wird w„hrend der Eingabe CONTROL-C empfangen, springt MCS BASIC-52 in den Kommando-Modus. Die Eingabezeile wird mit einem Wagenrcklauf (CR) abgeschlossen. OPBYTE - 06H Konsolen-Ausgabe eines Strings ab Adresse R3:R1 - Dieser Befehl gibt einen String an die Konsole aus. Die Startadresse wird dabei in R3:R1 hinterlegt. Der String kann sich im externen Daten- oder Programmspeicherbereich befinden. Die Festlegung erfolgt mit BIT 34H (Speicherstelle 26.4H). Ist dieses Bit "HIGH", so erfolgt die Ausgabe aus dem Programmspeicher; bei "LOW" aus dem Datenspeicher. Die Ausgabe erfolgt Zeichen fr Zeichen, bis das Endezeichen bearbeitet worden ist. Fr Daten im Programmspeicher ist das Endezeichen ein CR (0DH), fr Daten im Datenspeicher das Anfhrungszeichen (22H). OPBYTE - 07H Ausgabe von Wagenrcklauf und Zeilenvorschub (CR/LF-neue Zeile) an die Konsole. Die nachfolgenden Operationen haben jeweils die gleiche Funktion, wie die angegebenen BASIC Statements. Eine zu bearbeitende Zahl wird vom ARGUMENT STACK gelesen und gel”scht. Das Ergebnis wird auf dem ARGUMENT STACK abgelegt. Bei den Grundrechenarten sind zwei M”glichkeiten der Fehlerbehandlung vorhanden: a) MCS BASIC 52 gibt die entsprechende Fehlermeldung aus. b) Im Akkumulator wird ein Fehlercode zurckgeliefert. Dabei gilt: ACC.0 - ARITHMETIC UNDERFLOV ACC.1 - ARITHMETIC OVERFLOV ACC.2 - ERGEBNIS GLEICH 0 (Kein Fehler, Nur Anzeige) ACC.3 - DIVISION DURCH NULL Die Art der Fehlerbehandlung ist hinter den entsprechenden OPBYTEs angegeben. OPBYTE - 09H Potenzierung OPBYTE - 0AH a) Multiplikation * OPBYTE - 88H b) Multiplikation * OPBYTE - 0BH a) Addition + OPBYTE - 82H b) Addition + OPBYTE - 0CH a) Division / OPBYTE - 8AH b) Division / OPBYTE - 0DH a) Subtraktion - OPBYTE - 84H b) Subtraktion - OPBYTE - 0EH Logisches EXOR .XOR. OPBYTE - 0FH Logisches UND AND. OPBYTE - 10H Logisches ODER .0R. OPBYTE - 12H Test = (gleich) OPBYTE - 13H Test >= (gr”áer gleich) OPBYTE - 14H Test <= (kleiner gleich) OFBYTE - 15H Test <> (ungleich) OPBYTE - 16H Test < (kleiner) OPBYTE - 17H Test >