Senden zum PC
Das ROM im Sios enthält noch weitere Routinen, die man einfach durch einen CALL aufrufen kann. Da ist erst einmal eine Verzögerung in Millisekunden. Der Akku wird mit der Anzahl der Millisekunden geladen und danach ruft man die Routine an Adresse 0120h. Da diese Routine timer-gesteuert ist, sind die Werte recht genau.
Da das Sios über die RS232-Schnittstelle mit dem PC-kommuniziert, enthält das Betriebssystem auch ein Unterprogramm zum Senden. Das Sios arbeitet mit 19200 Baud, 8 Datenbits und 2 Stoppbits. Mit diesen Einstellungen kann man mit jedem Terminalprogramm Zeichen vom Sios empfangen. Die Senderoutine liegt im ROM an der Adresse 0112h. Wiederum wird der Akkuinhalt übertragen.
Dieses Beispiel benutzt beide ROM-Routinen. Es schickt eine 1 an den Digitalausgang, das Zeichen "1" über die Schnittstelle zum PC. Nach 250 ms wird eine 2 gesendet.
0001 0000 DOUT .equ 0E8H ;D-Ausgang
0002 0000 DELAY .equ 0120H ;A/ms im ROM
0003 0000 SEND .equ 0112H ;A im ROM
0004 0000
0005 8100 .org 8100H
0006 8100 start
0007 8100 74 01 mov a,#1 ;Ausgabe 1
0008 8102 F5 E8 mov DOUT,a ;Digitalausgang
0009 8104 24 30 add a,#48 ;a+asc('0')
0010 8106 12 01 12 lcall SEND ;ROM-RS232
0011 8109 31 19 acall delay250 ;Warten
0012 810B 74 02 mov a,#2 ;Ausgabe 2
0013 810D F5 E8 mov DOUT,a ;Digitalausgang
0014 810F 24 30 add a,#48 ;a+asc('0')
0015 8111 12 01 12 lcall SEND ;ROM-RS232
0016 8114 31 19 acall delay250 ;Warten
0017 8116 02 81 00 ljmp start ;Nochmal
0018 8119
0019 8119 delay250
0020 8119 74 FA mov a,#250 ;250 ms
0021 811B 12 01 20 lcall DELAY ;ROM Call
0022 811E 22 ret
0023 811F .end
tasm: Number of errors = 0 |
Wenn das Programm gestartet wurde, kann man anschließend unter Win95/98 das Programm Hyperterminal aufrufen und eine Direktverbindung über COM1 mit den Parametern 19200,8,2 einstellen. Es sollten sich die Ziffern 1 und 2 ständig abwechseln.
Hallo Welt
|
Nun ist es endlich möglich den Standard-Satz einer neuen Programmiersprache auf den Bildschirm zu schreiben. Viele Programmiersprachen beginnen mit diesem Beispiel. Hier steht es am Ende dieses kleinen Kurses.
In Anlehnung an die Bitmuster-Ausgabe wird hier eine Tabelle mit Buchstaben angelegt. Die Zeichen 13 und 10 entsprechen den Anweisungen Wagenrücklauf (CR) und Zeilenvorschub (LF). Zum Schluss wird noch ein Beep (Zeichen 7) gesendet. Die Zeichenkette wird mit einem 0-Byte abgeschlossen. Die Tabelle kann natürlich auch an der Adresse 811Ch beginnen. Dann wird die Binärdatei noch etwas kürzer.I
. |
In einem 250 ms-Intervall wird "Hallo Welt." im Terminalfenster ausgegeben
0001 0000 DELAY .equ 0120H ;A/ms im ROM
0002 0000 SEND .equ 0112H ;A im ROM
0003 0000
0004 8100 .org 8100H
0005 8100 31 0D start acall delay250 ;Alle 250 ms
0006 8102 90 01 30 mov DPTR,#0130h ;Anfang Tabelle
0007 8105 E0 loop movx a,@DPTR ;Zeichen in Akku
0008 8106 60 F8 jz start ;0-Byte?
0009 8108 31 13 acall print ;Senden
0010 810A A3 inc DPTR ;Zeiger erhöhen
0011 810B 80 F8 sjmp loop ;Nochmal
0012 810D
0013 810D delay250
0014 810D 74 FA mov a,#250 ;250 ms
0015 810F 12 01 20 lcall DELAY ;ROM Call
0016 8112 22 ret
0017 8113
0018 8113 12 01 12 print lcall SEND ;ROM Call
0019 8116 74 01 mov a,#1 ;Muss sein
0020 8118 12 01 20 lcall DELAY ;Sonst geht nix
0021 811B 22 ret
0022 811C
0023 8130 .org 8130h
0024 8130 48616C6C6F table .byte 'H','a','l','l','o'
0025 8135 2057656C74 .byte ' ','W','e','l','t'
0026 813A 2E0D0A0700 .byte '.',13,10,7,0
0027 813F .end
tasm: Number of errors = 0 |
|