Der bekannte BASIC-Interpreter 8052AH-BASIC von Intel ist ein leistungsfähiges System für 8052-Mikrocontroller. Das System wurde für das SIOS-Interface angepaßt und um einige spezielle Befehle erweitert. Damit besteht nun die Möglishkeit, das SIOS auch mit BASIC-Programmen autonom betreiben zu können. SIOSBAS.EXE ist ein integriertes Editor- und Terminalprogramm für autonome BASIC-Programme im SIOS-Interface.
Das SIOS-Basic ist bei der Firma Modul-Bus (www.ak-modul-bus.de) als Diskette mit Interpreter und Editor/Terminal unter DOS und Windows erhältlich. Beim Start des Terminal-Programms wird der Basic-Compiler in das RAM des SIOS geladen.
Nach dem Neustart meldet sich der BASIC52-Interpreter mit seiner Einschaltmeldung:
MCS-51(tm) BASIC V1.1 SIOS
READY
>
Nun kann ein erstes Programm eingegeben und gestartet werden:
10 REM Portausgaben (Test1.bas) 20 FOR N=0 TO 255 30 OUTPORT=N 40 FOR I=1 TO 200 : NEXT I 50 NEXT N 60 GOTO 20 RUN
3 Befehlsübersicht
Die folgende Übersicht zeigt die wichtigsten Befehle und Funktionen des BASIC-52. Zahlreiche Sonderfuntionen sind speziell an die Umgebung des Mikrocontrollers angepaßt. Einige originale BASIC52-Befehle sind mit dem SIOS-Interface nicht nutzbar und werden hier nicht aufgeführt. Vier neue Befehle wurden speziell für das SIOS hinzugefügt.
Kommandos: RUN Ctrl-C CONT LIST NEW Operatoren: + - / * = > >= < <= <> .AND. .OR. .XOR. ABS() NOT() INT() SGN() SQR() RND LOG() EXP() SIN() COS() TAN() ATN() Statements: CALL DATA READ RESTORE DIM DO-WHILE DO-UNTIL END FOR-TO-STEP NEXT GOSUB ON-GOTO ON-GOSUB IF-THEN-ELSE INPUT LET ONERR PRINT REM STOP Erweiterte Statements des BASIC-52: ONEX1 Unterprogrammaufruf nach Interrupt 1 ONTIME Timer-Interruptaufruf RETI Ende eines Interrupt-Unterprogramms PH0., PH1. Ausgabe einer Hexadezimalzahl ohne/mit Nullstellen PUSH, POP Daten zum, vom Argument-Stack STRING Speicher für Textstrings reservieren IDLE Warten auf Interrupt Spezialfunktions-Opreratoren und Systemvariablen: CBY() DBY() XBY() GET IE IP PCON T2CON TCON TIME TIMER0 TIMER2 PI XTAL MTOP LEN FREE Zur direkten Unterstützung der speziellen Ein- und Ausgänge des SIOS wurden vier neue Befehle entwickelt: OutPort (Schreiben und Lesen) OutPort 255 schaltet Ausgänge DO0...DO7 an A = Outport liest die Ausgangszustände zurück Outport = Outport + 2 liest und ändert die Ausgänge InPort (nur Lesen) B = Inport liest die Zustände von DI0...DI7 AD (Kanal) (nur Lesen) C = AD (0) Analogeingabe (0..5V) am Eingang A C = AD (3) Messung (0...2,5V) am Eingang C DA Kanal, Ausgabewert DA 1,100 Analogausgabe am Ausgang B DA 2,128 Einstellung der Referenzspannung C
Die Meßbereiche der Analogeingänge betragen 0 bis 5 V für die vorderen Eingänge A (AD (0)) und B (AD (1)) und 0 bis 2,5 V für die Sensoranschlüsse C (AD(2)) und D (AD(3)) am hintern Rand des SIOS. Die Meßbereiche lassen sich jedoch in weiten Grenzen verändern, wie weiter unten noch gezeigt wird. Die Eingänge A und B besitzen einen Eingangswiderstand von 100 kW, während die Eingänge C und D hochohmig sind und deshalb als offene Eingänge zufällige Spannungswerte zeigen.
Die Analogausgänge besitzen einen Ausgangsspannungsbereich von 0 bis 5 V. Die Ausgänge A (DA 0, ..) und B (DA 1,..) sind an den vorderen Anschlüssen zugänglich und verfügen über Leistungsausgänge mit einer Belastbarkeit bis ca. 0,3 A. Die Ausgänge C (DA 2,..) und D (DA 3,..) bilden die Referenzspannung der Sensoranschlüsse C und D und sind im Normalfall auf 2,5 V eingestellt. Als Analogausgänge ohne Leistungsverstärker haben sie den Vorteil einer größeren Genauigkeit und einer kleineren Offset-Spannung.
Der Anwender hat die Möglichkeit, die Meßbereiche des AD-Wandlers für jeden Eingangskanal getrennt zu verändern. Verantwortlich für die Meßbereiche sind die Inhalte von vie Speicherstellen im internen RAM, des Mikrocontrollers, die mit DBY gelesen und verändert werden können. Die folgende Tabelle zeigt die vier Steuerregister mit ihren Standardwerten.
Zugriff Default Einstellung dby(28) 0 Kanal 0, 0...5V dby(29) 0 Kanal 1, 0...5V dby(30) 255 Kanal 2, 0...2,55V dby(31) 255 Kanal 3, 0...2,55V
Für jeden der vier Eingänge kann der Meßbereich in weiten Grenzen eingestellt werden, wobei jeweils eine untere und eine obere Grenze durch einen 4-Bit-Parameter festgelegt sind, die zusammen einen Byte-Parameter bilden. Bit 0...3 legt die untere Grenze als Vielfaches von 5V/16 fest, Bit 4...7 ebenso die obere Grenze. Beide Referenzspannungen müssen einen Mindestabstand von 1,25V einhalten. Beispiel: 84h bewirkt den Meßbereich 1,25V-2,5V. Ausnahme: 00h=0.5V. Die eingegebenen Meßbereiche ersetzen die Standardbereiche von 5V, 5V, 2,5V und 2,5V.
Die folgenden Beispielprogramme sollen keinen BASIC-Grundlagenkurs ersetzen, sondern in erster Linie den Gebrauch der SIOS-spezifischen Befehle des Interpreters demonstrieren.
TEST1.BAS erzeugt fortlaufende Portausgaben an den digitalen Ausgängen. Die Programmausführung wurde durch eine Warteschleife verzögert, damit die Veränderung der Bitmuster gut beobachtet werden kann.
10 REM Portausgaben (Test1.bas) 20 FOR N=0 TO 255 30 OUTPORT=N 40 FOR I=1 TO 200 : NEXT I 50 NEXT N 60 GOTO 20
TEST2.BAS zeigt laufend den Zustand der digitalen Eingänge. Es
erscheinen abwechselnd Ausgaben im Dezimalformat und im Hexadezimalformat.
10 REM Lesen des Eingangsports (Test2.bas) 20 PRINT INPORT 30 FOR I=1 TO 100 : NEXT I 40 PH0. INPORT : REM Hexadezimalausgabe 50 GOTO 20
TEST3.BAS zeigt ein Beispiel für die Spannungmessung an den Eingangskanälen
A und B. Die Funktion AD liefert Bytes im Wertebereich 0 ... 255. Zur Umrechnung
in die gemessene Spannung in Volt wird hier durch 50 geteilt. Damit entstehen
Spannungsstufen von genau 20 mV und der Meßbereich ist 0...5,1V.
Der Skalierungsfehler von 0,1 V oder 2% entspricht etwa der Genauigkeit
der Messung. Will man exakt auf einen Endwert von 5,0 V skalieren, lautet
die Umrechnung "(AD(0))/255*5".
10 REM Spannungsmessung an Kanal 0 (A) und 1 (B) (test3.bas) 20 U1=(AD(0))/50 30 U2=(AD(1))/50 40 PRINT U1,U2 50 FOR I=1 TO 200 : NEXT I 60 GOTO 20
TEST4.BAS demonstriert die Ausgabe von Analogwerten an den Analogausgängen
A und B. An DA werden Werte im Bereich 0...255 entsprechend einem Spannungsbereich
0...5V übergeben. Im Beispiel werden beide Ausgangskanäle mit
gegenphasigen, langsamen Sinusfunktionen angesteuert. Die Geschwindigkeit
der Signale läßt sich z.B. durch die Angabe "STEP 1"
vergrößern. Die entstehenden Ausgangssignale eignen sich zur
direkten Ansteuerung von Lämpchen oder Gleichstommotoren.
10 REM Analogausgabe, Sinus-Signale 20 FOR T=1 TO 360 STEP 5 30 DA 0,128+INT(127*SIN(T/360*2*PI)) 40 DA 1,128-INT(127*SIN(T/360*2*PI)) 50 NEXT T 60 GOTO 20
Das Programm TEST5.BAS verwendet den Analogeingang A und die digitalen
Ausgänge zum Aufbau einer Leuchtbandanzeige. Der Meßbereich
wird in acht gleiche Stufen geteilt, die durch die acht LEDs der Leuchtbandanzeige
dargestellt werden.
10 REM Leuchtbandanzeige (test5.bas) 20 ANZAHL=INT((AD(0))/32+0.5) 25 PRINT ANZAHL 30 ON ANZAHL GOSUB 100,110,120,130,140,150,160,170,180 40 GOTO 20 100 OUTPORT=0 : RETURN 110 OUTPORT=080H : RETURN 120 OUTPORT=0C0H : RETURN 130 OUTPORT=0E0H : RETURN 140 OUTPORT=0F0H : RETURN 150 OUTPORT=0F8H : RETURN 160 OUTPORT=0FCH : RETURN 170 OUTPORT=0FEH : RETURN 180 OUTPORT=0FFH : RETURN
TEST6.BAS zeigt ein Beispiel für die Verarbeitung analoger Signale
mit dem SIOS. Die Spannungslupe arbeitet mit einem veränderten Meßbereich
am Eingang A. Ein kleiner Bereich mit einer Breite von 1,25 V wird auf
den gesamten Ausgangsbereich von 0...5V des DA-Wandlers umgesetzt. Am Ausgang
kann ein Zeiger-Voltmeter angeschlossen werden, um die geringen Änderungen
einer Spannungsquelle "vergrößert" ablesen zu können.
In Zeile 20 wird der Meßbereich für den analogen Eingang A festgelegt.
Experimente mit noch kleineren Abständen zwischen Unter- und Obergrenze
des Meßbereichs sind möglich, führen aber zu keiner größeren
Auflösung als 5 mV, derphysikalischen Auflösungsgrenze des AD-Wandlers.
10 REM Spannungslupe (test6.bas) 20 DBY(28)=0C8H : REM 2,5V - 3,75V 30 A=AD(0) 40 PRINT 2.5+A/200," V" 50 DA 0,(A) 60 GOTO 30