SIOS-Betriebssystem

- Kommandos -


Dieser Text wendet sich in erster Linie an Entwickler, die Software für SIOS erstellen wollen. Die Kenntnis der gültigen Interface-Kommandos ermöglicht Lösungen mit beliebigen Programmiersprachen. Das SIOS-Betriebssystem ist ähnlich aufgebaut wie das System des ES535. Es wurde jedoch nicht in Assembler geschrieben, sondern komplett mit dem Makrocompiler MC.

1 Grundlagen

Nach dem Einschalten befindet sich das SIOS im Basismodus und wartet auf gültige Kommandos. Es gelten folgende Einstellungen:

Serielle Schnittstelle: 19200 Baud, 8 Bits, 2 Stopbits
Meßbereiche der Analogeingänge A und B: 0...5V
Meßbereiche der Analogeingänge C und D: 0...2,5V
Referenzspannung an den Sensorbuchsen C und D: 2,5V
Interne Zeitbasis: 1 ms
Interface-Kennung: 10 (Version 1.0)

Neben den SIOS-Kommandos werden auch die Compactbox-kompatiblen Kommandos (81, 176, 210, 211) ausgeführt, so daß alte Programme weiterhin arbeiten. Zusätzlich kann das Interface in einen CompuLAB-kompatibeln Modus versetzt werden. Es liefert dann die Kennung 201 (CompuLAB, Version 2.01). Neben den alten Kommandos der Compactbox werden in der Emulation auch die CAMFACE-Kommandos (64, 72, 58, 69) ausgeführt.

Das SIOS enthält eine Funktionstest ohne angeschlossenen PC: Beim Start muß der digitale Eingang D0 hochgesetzt sein. Dann erscheint das Bitmuster 01010101 an den Ausgängen.

Durch entsprechende Kommandos kann im Basismodus die Baudrate bis 57,6 Kilobaud eingestellt werden. Die Zeitbasis von 1 ms kann für Meßserien auf 0,2ms oder 10 ms verändert werden. Die Referenzspannungen der Sensoranschlüsse werden durch zwei Analog-Kanäle gebildet und sind frei veränderbar. Der Standardwert 2,5V wird mit dem Parameter 128 (= 1/2 Ub) gewählt.

Für jeden der vier Eingänge kann der Meßbereich für 8-Bit-Messungen 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 durch spezielle Kommandos eingegebenen Meßbereiche überschreiben die

Standardauflösungen von 5V, 5V, 2,5V und 2,5V nur für Direktmessungen im 8-Bit-Modus. 10-Bit-Messungen verwenden grundsätzlich den vollen Bereich von 0...5V. Für Serienmessungen erfolgt eine eigene Einstellung der Bereiche im Definitionsblock der Messung.

Serienmessungen werden durch insgesamt 14 Parameter definiert. Dabei werden die Anzahl der Einzelmessungen, die aktiven Kanäle in 8- oder 10-Bit-Auflösung, die Meßbereiche getrennt für jeden Kanal, die Intervallzeit, die Zeitbasis und ein Steuerbyte für Zusatzoptionen angegeben. Die Intervallzeit wird als 16-Bit-Wert als Vielfaches der gewählten Zeitbasis von 0,1ms, 0,2ms, 1ms oder 10ms angegeben. Die schnellste einstellbare Abtastung für beliebige Messungen erfolgt im 0,2-ms-Raster (Abtastrate 5kHz). Für Einkanalmessungen ohne Zusatzoptionen ist auch eine Zeitbasis von 0,1ms erlaubt. Noch schnellere Messungen werden durch nachgeladene Spezialprogramme erreicht.

Beispiel: 112,0,100,1,2,3,4,0,0,128,128,0,6,2,1 stellt ein:

100 Messungen, alle Kanäle, Standardauflösung 8 Bit ,Intervall 10ms, Zeitbasis 1ms, der Digitalausgang D0 zeigt die Dauer der Messung. Die eigentliche Messung wird durch ein eigenes Kommando gestartet. Alternativ stehen Startkommandos mit Triggerung zur Verfügung. Mit "0" kann die Messung vorzeitig abgebrochen werden. Die Unterbrechung entspricht einem Neustart, wobei allerdings alle Meßdaten erhalten bleiben. Nach dem Ende einer Messung sendet SIOS ein Ready-Byte (1).

Nach dem Ende der Messung können die Meßdaten ausgelesen werden. Der Umfang der Daten kann bis zu 30 kB betragen. Das Datenformat der Meßserien ist wie folgt festgelegt: 14 Bytes des Definitionsblocks, dann Meßergebnisse für alle Kanäle geschachtelt, je 1 Byte für 8-Bit, 2 Bytes für 10-Bit-Messungen. Bei 10-Bit ist der im Definitionsblock angegebene Meßbereich ohne Bedeutung und beträgt immer 0-5V. 8- und 10-Bit-Meßkanäle dürfen zusammen verwendet werden.

Das Betriebssystem erlaubt den freien Zugriff auf alle Adressen des Prozessor-internen RAMs, des externen 32K-RAMs und der Spezialfunktionsregister des Prozessors. Es können Programme nach geladen und gestartet werden. Außerdem können spezielle Speicherkonfigurationen eingeschaltet werden, die sich nur durch Ausschalten wieder verlassen lassen.

SIOS kann durch falsche Kommandos zum Absturz gebracht werden. Empfängt das Interface zufällige Kommandos, dann könnte eine unkontrollierte Aktion eintreten und den weiteren Datenaustausch blockieren. Mögliche Fehlerquellen sind z.B.:

 

2 SIOS-Kommandos im Basismodus:

 

2.1 Spezielle SIOS-Optionen:

Senden               Empfangen     Funktion
-----------------------------------------------------------
00h                               Interrupt für laufende Messungen und
                                  Programme
01h                  10           Versionsnummer 1.0 abfragen
02h                  15           Datum: Tag
03h                   8           Datum: Monat
04h                  96           Datum: Jahr
05h, Byte                         Baudrate ändern: FFh=57,6kBd
                                  FDh=19,2kBd, FAh=9,6kBd usw.
08h, Byte                         Meßbereich Kanal 0 ändern
...                               00h=5V 80h=2,5V, 40h=1,25V
0Bh, Byte                         Meßbereich Kanal 3 ändern
2.2 Portausgaben:

Senden               Empfangen     Funktion
-----------------------------------------------------------
10h, Byte                         Ausgabe Port 4 = "DezAus"
2.3  Porteingaben:

Senden               Empfangen     Funktion
-----------------------------------------------------------
20h                  Byte          Lesen Port 1 = "DezEin"
2.4  Analogeingaben, 8 Bit:

Senden               Empfangen     Funktion
-----------------------------------------------------------
30h                 Byte          Messen Kanal 0 (A)
31h                 Byte          Messen Kanal 1 (B)
32h                 Byte          Messen Kanal 2 (C)
33h                 Byte          Messen Kanal 3 (D)

  Analogeingaben, 10 Bit:
38h                 Highbyte      Messen Kanal 0 (A)
 1                  Lowbyte
...
3Bh                 Highbyte      Messen Kanal 3 (D)
 1                  Lowbyte
2.5  Analogausgaben:

Senden               Empfangen     Funktion
-----------------------------------------------------------
40h  Byte                         Analogausgabe Kanal 0  (A)
41h  Byte                         Analogausgabe Kanal 1  (B)
42h  Byte                         Referenzspannung Kanal 2 (C)
43h  Byte                         Referenzspannung Kanal 3 (D)


2.6  Reservierte Kommandos für Timer-Funktionen (künftige Erweiterungen):
Senden               Empfangen     Funktion
-----------------------------------------------------------

50h
51h  Byte                         altes Kompaktbox-Kommando 81, DezAus



2.7  Speicherzugriffe:
Senden               Empfangen     Funktion
-----------------------------------------------------------
60h HiAdr, LoAdr                  Code laden
                     1
    1, Byte                       1. Byte
                     1
    1, Byte                       2. Byte
    ...
                     1
    0                             Ende
61h HiAdr, LoAdr                  Programmstart
62h HiAdr, LoAdr, Byte            RAM-Adresse beschreiben
63h HiAdr, LoAdr         Byte     RAM-Adresse auslesen
64h Adr, Byte                     Register beschreiben
65h Adr                  Byte     Register auslesen
66h SFR, Byte                     SFR beschreiben
67h SFR                  Byte     SFR auslesen
68h HiAdr, LoAdr                  Speicherbereich auslesen
    1                    Byte     1. Byte
    1                    Byte     2. Byte
    ...
    0                             Ende

2.8  Serienmessungen:
Senden               Empfangen     Funktion
-----------------------------------------------------------
70h, Anzahl-High, Anzahl-low      Serie definieren
     Kanal 1, 2, 3, 4             "0" = aus, 129,130,131,132 f. 10-Bit
     Meßbereiche Kanal 0...3      Standard: 0,0,128,128 f. 5V/2,5V
     Zeit-high, Zeit-low          Meßzeit = Zeit + Anzahl Kanäle
     Zeitbasis                    1=0,2ms, 2=1ms, 3=10ms
     Optionen                     Bit0: D0 zeigt Messung
                                  Bit1: D1 zeigt Meßpunkte
                                  Bit2: Rampe an Analogausgang A
                                  Bit3: Hochzählen an Ausgängen
71h                      1        Start der Messung, 1=beendet
72h                               Meßwertspeicher auslesen
                         Byte     1. Byte
    1                    Byte     2. Byte
    ...
    0                             Ende

73h  Byte                1       Start mit Triggerung, pos. an A0
74h  Byte                1       Start mit Triggerung, neg. an A0
75h  Byte                1       Start mit Triggerung, pos. an A1
76h  Byte                1       Start mit Triggerung, neg. an A1
77h                      1       Start mit Triggerung, pos. an D0
78h                      1       Start mit Triggerung, neg. an D0




3 Compactbox-Kommandos:
SIOS enthält aus Gründen der Kompatibilität den Befehlssatz der alten
Compactbox bzw. der RS-Box. Alle alten Programme können daher weiter
verwendet werden.

Senden               Empfangen     Funktion
-----------------------------------------------------------
51h  Byte                         Digitale Ausgabe (81)
B0h                               Analogeingang-Init (176)
D2h                     Byte      Messung, Kanäle abwechselnd (210)
D3h                     Byte      Digitale Eingabe (211)




4 CompuLAB-Emulation:
Senden               Empfangen     Funktion
-----------------------------------------------------------
61h, 10h, 00h                     Starten des CompuLAB-Modus

Die Emulation wird als Aufruf eines Programms im EPROM bei Adresse 0100h
gestartet. Es gibt keine Rückkehr außer durch Ausschalten. Der Interrupt
ist gesperrt. Das SIOS kennt nun nur noch die alten RS-Box-Kommandos 
(81, 176, 210 und 211) sowie die CamFace-Kommandos (64, 72, 60 und 58).
Außerdem wird die Interface-Kennung "201" wie beim CompuLAB ausgegeben.


Senden               Empfangen     Funktion
-----------------------------------------------------------
51h  Byte                         Digitale Ausgabe (81)
B0h                               Analogeingang-Init (176)
D2h                     Byte      Messung, Kanäle abwechselnd (210)
D3h                     Byte      Digitale Eingabe (211)

48h  Byte                         Digitale Ausgabe (72)
3Ch                     Byte      Messung, Kanal 0 (60)
3Ah                     Byte      Messung, Kanal 1 (58)
D3h                     Byte      Digitale Eingabe (211)

01h                     201       Identifikation: CompuLAB


Im Normalfall können die alten Compactbox-Kommandos direkt 
aus dem Standard-Modus aufgerufen werden. Nur die Interface-
Kennung und der zweite Befehlssatz des CompuLAB unterscheiden 
die Emulation vom Basismodus.

5 Speicherbereiche und Betriebsmodi

Das SIOS verfügt über vier unterschiedliche Betriebsmodi mit jeweils eigenen Speichermodellen. Nach dem Einschalten befindet es sich im Modus 0 mit dem EPROM im Adreßbereich 0000h bis 7FFFh und dem RAM als Programmspeicher im Bereich 8000h bis FFFFh, gespiegelt als Datenspeicher im Bereich 0000h bis 7FFFh.

0000h - 07FFh      Programmbereich  2K (läuft bei 8000h-87FFh)
                   800Bh...800Dh und 8023h...8025h reserviert für
                   Interrupt-Vektoren
0800h - 7FFFh      Datenbereich    30K
 

Der gesamte Datenbereich erscheint bei 8000h - FFFFh als Programmbereichgespiegelt.

Alle Prozessor-Interrups werden in den RAM-Bereich ab 8000h gelenkt. Das System verwendet den Timer0 (800Bh) und die serielle Schnittstelle (8023h), wobei die Vektoren in den EPROM-Bereich zurückgelenkt werden. Der Anwender darf deshalb die RAM-Bereiche 000Bh-000Ch und 0023h-0025h nicht verändern, außer er möchte die Interrupts für eigene Zwecke einsetzen.

SIOS kennt insgesamt vier verschiedene Betriebsmodi, die zum Entwicklungssystem ES535 komkatibel sind. Es können deshalb Programme in der jeweils passenden Speicheraufteilung nachgeladen werden. Die Umschaltung in die Betriebsmodi 1 bis 3 erfolgt durch Programmsprünge zu den Adressen 7400h, 7800h und 7C00h. Eine Rückkehr in den Modus 0 durch Software ist nicht vorgesehen. Die Umschaltung bleibt gültig, bis SIOS neu gestartet wird. Im Normalfall wird spezielle Software in das RAM geladen, um dann den gewünschten Modus einzuschalten. Dabei ist darauf zu achten, daß beim Laden die Interrupt-Vektoren bei 800Bh und 8023h nicht zerstört werden.

Die Umschaltung in höhere Betriebsmodi erfolgt durch Programmsprünge zu besonderen Adressen: 7400h für Modus 1, 7800h für Modus 2 und 7C00h für Modus 3. Modus 1 und 2 dienen ausschließlich dazu, Programme in den Adreßbereich ab 0000h zu laden und zu starten. Das RAM liegt als Datenspeicher jeweils bei Adresse 0. Während allerdings im Modus 1 das gesamte RAM zugleich als Programm- und Datenspeicher im Bereich 0000h bis 7FFFh angesprochen werden kann, ist es im Modus 2 in zwei 16K-Bereiche aufgeteilt, die als Programm- und Datenspeicher im Bereich 0000h bis 3FFFh parallel liegen und jeweils im Bereich 4000h bis 7FFFh gespiegelt werden.

Modus 3 schaltet ein alternatives Betriebssystem in oberen 16-K-Bereich des EPROMs ein. Dieser Bereich wird derzeit nicht benutzt und ist für künftige Erweiterungen vorgesehen. Das RAM steht im Bereich 0000h bis 7FFFh als reiner Datenspeicher zur Verfügung.

Die folgende Übersicht zeigt noch einmal alle vier Betriebsmodi und die zugehörige Speicheraufteilung:

Modus 0:
    Programmspeicher     Datenspeicher     I/O-Bereich
    ---------------------------------------------------
    EPROM                RAM
    0...32K              0...32K
    ----------------------------------------------------
    RAM                                    32K...64K
    32K...64K (gespiegelt)
    ----------------------------------------------------


Modus 1    (Umschaltung: 7400h):
    Programmspeicher     Datenspeicher     I/O-Bereich
    ---------------------------------------------------
    RAM (untere Hälfte)  RAM (obere Hälfte)
    0...16K              0...16K
    gespiegelt 16K...32K gespiegelt 16K...32K
    ----------------------------------------------------
                                           32K...64K
    ----------------------------------------------------


Modus 2    (Umschaltung: 7800h):
    Programmspeicher     Datenspeicher     I/O-Bereich
    ---------------------------------------------------
    RAM                  RAM
    0...32K              0...32K
    ----------------------------------------------------
                                           32K...64K
    ----------------------------------------------------


Modus 3    (Umschaltung: 7C00h):
    Programmspeicher     Datenspeicher     I/O-Bereich
    ---------------------------------------------------
    EPROM                RAM
    16...32K, 0...16K    0...32K
    ----------------------------------------------------
                                           32K...64K
    ----------------------------------------------------



Die übrigen Ressourcen des Prozessors 80C535 sind wie folgt eingesetzt:

P1 = Digitale Eingänge,
P4 = Digitale Ausgänge
P5 = Daten zum DA-Wandler,  P3.2...P3.4 = A0,A1,/CS für DA-Wandler
P3.5 bildet die digitale Datenleitung am Pin 6 der Sensoranschlüsse C/D.
P4.2 und P4.3 liegen jeweils direkt am Pin 5 der Sensoranschlüsse C/D.
 

6 Einsatz des Makrocompilers MC

Software-Entwickler können den Makrocompiler MC einsetzen, um spezielle

Software für das SIOS zu schreiben. MC übersetzt einen Quelltext in ein lauffähiges Maschinenprogramm für beliebige Speicherbereiche. Das SIOS-Betriebssystem wurde komplett mit MC entwickelt. Typische Einsatzbereiche für zusätzlich nachgeladene Software sind:

Um MC-Programme zu schreiben, sind die folgenden Einstellungen im Option-Menü des Makrocompilers einzutragen:

  COM                  2
  Baud                 19200
  Prozessor            80535
  Startseite           129
  Startadresse         51
  Tabelle              MCSIOS.TAB
  Helpfile             MCSIOS.HLP
  Download-Protokoll   2
  Download-Delay       0

Die Startseite 129 ist zu wählen, um die Interruptvektoren auf der ersten RAM-Seite nicht zu verändern.

Besondere MC-Befehle für SIOS:
  RdPORT,  WrPORT                        Portzugriffe
  RdAd                                   AD-Wandler 8-Bit
  RdAd10                                 AD-Wandler 10-Bit, lowbyte in B
  WrDA                                   DA-Wandler, Kanal in B
  WrCOM,   RdCOM                         Serielle Schnittstelle
  Delay                                  Reitraster-Steuerung
  Time0.1ms, Time0.2ms,                  Zeitbasis für Delay
  Time1ms, Time10ms                         (default: 1ms)


Das folgende Beispielprogramm demonstriert die Verwendung der analogen Ein- und Ausgänge:

;Ausgabe der Spannung am Analogeingang A über Analogausgang A
;Invertierte Ausgabe über Analogausgang B
;Aus einem Einphasensignal wird ein Gegentaktsignal gebildet

Procedure AnalogRechnen
RdAD 0         ;Analogeingan 0 abfragen (8 Bit)
WrMem 1        ;Ergebnis zwischenspeichern
B 0            ;Analogausgang 0
WrDA           ;Analogausgabe Kanal 0
RdMem 1        ;Ergebnis wiederherstellen
NOT            ;Ergebnis invertieren
B 1            ;Analaogausgang 1
WrDA           ;Analogausgabe Kanal 1
EndProc

Begin
Loop AnalogRechnen
End
 

Mit MC können Hintergrundprogramme geschrieben werden, die auf Prozessor-Interrupts reagieren. Das folgende Beispiel demonstriert die Timer-gesteuerte Ausgabe über die digitalen Ausgänge. Das Programm läuft im Hintergrund neben dem Betriebssystem. Anwenderprogramme wie z.B. Do-it für SIOS können gleichzeitig alle SIOS-Kommandos im Vordergrund verwenden. Bei der Programmierung müssen verschiedene Einzelheiten beachtet werden:

;Interruprgesteuerte Portausgaben im Hintergrund

CodeAdress 81h 10h

Procedure TimerInterrupt
Inline C0,E0      ;Push Akku
RdMem 30          ;Zwischenspeicher
A+1
WrMem 30
WrPort            ;Portausgabe
Inline D0,E0      ;Pop Akku
Inline 02,00,71   ;Ljmp 0071h; Timer-Routine
EndInterrupt

Begin
T0.2ms            ;Aufruf alle 0,2ms
WrTCON 01000000b  ;Timer 0 stoppen
DPTR 00h 0Bh      ;Daten bei 000B = Programmcode bei 800B
Wr@DPTR 02h       ;02 81 10, Sprung auf Prozedur "TimerInterrupt
DPTR 00h 0Ch
Wr@DPTR 81h
DPTR 00h 0Dh
Wr@DPTR 10h
WrTCON 01010000b  ;Timer 0 starten
Inline 02,07,E7   ;ljmp 07E7h,  Rücksprung zur Interpreterschleife
End