VC 20
Tips & Tricks

Die RS232-Schnittstelle am VC 20

Der VC 20 enthält im Betriebssystem bereits alle notwendigen Routinen zur Verwaltung einer RS232-Schnittstelle. Für den Anschluß von Peripheriegeräten wird auf den User-Port nur noch eine Erweiterungsplatine zur Anpassung der Signalpegel gesteckt.

Auf dem Markt erhältlich sind sowohl Schaltungen nach der V.24-Norm als auch nach der TTY-Norm (20 mA). Nach dem richtigen elektrischen Verbinden der Geräte ist die Einstellung der Parameter für die Zeichenübertragung im Computer dem angeschlossenen Gerät entsprechend vorzunehmen.

Eingestellt werden müssen die Baudrate, die Anzahl der Datenbits, die Anzahl der Stoppbits, die Art der Paritätsüberprüfung und das Rückmeldeverhalten. Im VC 20, wo diese Schnittstelle unter der Gerätenummer 2 verwaltet wird, müssen beim Öffnen des Übertragungskanals in zwei Registern, dem Kontrollregister und dem Befehlsregister, Zahlen zur Einstellung der Betriebsart übergeben werden. Es ist stets eine mühsame und fehlerträchtige Arbeit, derartige Zahlen aus Tabellen zusammenzusuchen und richtig zu verknüpfen.

Das hier vorgestellte Programm nimmt dem Anwender die Suche nach den Zahlen und ihre Verknüpfung ab. In einem Bildschirmdialog werden mögliche Einstellungen der Betriebsart angeboten und ausgewählt. Dabei werden die aktuellen Werte der beiden Register stets angezeigt. Nach der Einstellung beginnt ein Übertragungstest. Zuerst werden die Zeichen »Leerzeichen« bis »Rückpfeil« auf den Bildschirm geschrieben und an das Gerät gesendet. Dann wird noch ein Testsatz übertragen. Danach kann mit über die Tastatur eingegebenen Zeichen weiter getestet werden. In das Einstellungsmenü wird durch Drücken der » ← «-Taste zurückgesprungen.

Soll das Programm erst einmal ohne ein Peripheriegerät getestet werden, so genügt es, an den User-Port einen Teststecker anzuschließen. Dieser muß nur eine Brücke zwischen Pin »M« (Senden) und den Pins »C« und »B« (Empfangen) enthalten. Beim Öffnen des Files für Adresse zwei werden automatisch ein Sende- und ein Empfangspuffer mit einer Kapazität von je 256 Zeichen bereitgestellt. Über die Kurzschlußbrücke werden die gesendeten Daten in den Empfangspuffer übertragen. Dort können sie ausgelesen und weiter verarbeitet werden. In diesem Programm werden sie einfach auf den Bildschirm geschrieben.

So arbeitet des Testprogramm

In Zeile 140 werden Anfangswerte in die Variable K(I) für die veränderlichen Parameter der Schnittstelle eingegeben. Die Datazeilen 150 bis 240 enthalten Textblöcke für den Bildschirmdialog. Nach dem Einschalten der Repeat-Funktion für alle Tasten in Zeile 250 beginnt der Dialogabschnitt in Zeile 280 mit der Übernahme der Textblöcke in Stringvariable bis Zeile 300.

In den Zeilen 310 bis 340 werden die Menüs zur Parametereinstellung (Unterprogramm ab Zeile 520) angewählt und die errechneten Registerinhalte (UP 680) angezeigt. Nachdem die gewünschte Einstellung erfolgt ist, wird diese Schleife verlassen und die Testroutine ab Zeile 370 begonnen.

Darin wird zuerst der Bildschirm vorbereitet (UP 710), dann werden die aktuellen Werte von K(I) gerettet (UP 690) und gewartet, bis der Sendepuffer einer eventuell noch laufenden Übertragung ausgeschrieben ist (UP 660). Danach wird das File geschlossen. Dabei wird der RAM-Bereich der beiden Puffer für Basic wieder freigegeben. Weil hierbei ein CLR-Befehl ausgeführt wird, müssen die vorweg geretteten Parameter zurückgeholt (UP 700) und die Registerinhalte berechnet werden (UP 680). Darauf wird das File mit den neuen Parametern eröffnet, der Bereich wieder für Basic gesperrt und die dabei erneut gelöschten Parameter zurückgeholt (UP 700).

In Zeile 390 wird der Puffer initialisiert. Darauf (410 bis 420) wird ein Zeichensatz übertragen und gleichzeitig invertiert auf den Bildschirm geschrieben. In Zeile 430 wird ein weiterer Testsatz gesendet. Zur Vorbereitung des weiteren Tests mit Zeichen von der Tastatur her wird der Cursor auf Blinken geschaltet (440).

In den Zeilen 450 bis 490 liegt die Sende- und Empfangsschleife. Sind alle Zeichen aus dem Empfangspuffer verarbeitet, dann erfolgt gleich der Sprung zur Tastaturabfrage (nach 480). Ein dort eingegebener Rückpfeil beendet den Test und läßt zum Einstellungsmenü verzweigen. Andere Zeichen gehen in den Sendepuffer. Wurde ein Zeichen in Zeile 450 empfangen, dann wird, falls es ein Steuerzeichen ist, gewartet, bis der blinkende Cursor wegschaltet (470), sonst wird das Blinken auch bei aktivem Cursor ausgeschaltet, das Zeichen geschrieben und das Blinken wieder eingeschaltet.

Im Unterprogramm ab Zeile 520 werden sowohl die einzelnen Gruppen als auch die veränderlichen Parameter dieser Gruppen angezeigt, durch Cursor-up- und Cursor-down-Tasten verändert und durch »RETURN« übernommen.

In diesem Testprogramm konnte auf die Statusabfrage der RS232-Schnittstelle verzichtet werden, bei einerAnwendung in einem regulären Treiberprogramm sollte sie aber benutzt werden.

(Hans-Jürgen Kellermann/ev)
100 rem rs 232 schnittstelle
110 rem 13.02.84
120 rem (c) h.-j. kellermann
130 rem anfangswerte festlegen
140 k(0)=0:k(1)=6:k(2)=0:k(3)=0:k(4)=0:k(5)=0:k(6)=0
150 data6,"","test-routine","baud-rate","datenwort-laenge","stop-bits"
160 data"handshake","uebertragungsart","paritaetspruefung"
170 data10,"baud"," anw. ","  50  ","  75  "," 110  "," 134.5"," 150  "
180 data" 300  "," 600  ","1200  ","1800  ","2400  "
190 data3," bits",8,7,6,5
200 data1," stop-bits",1,2
210 data1,-draht,3,x
220 data1,duplex,voll,halb
230 data7,,ohne par.pruef.,unger.parit.,ohne par.pruef
240 datagerad.parit.,ohne par.pruef,8.bit auf 1,ohne par.pruef,8.bit auf 0
250 poke650,128:rem alle tasten repeat
260 rem
270 rem menue zur parameteraenderung
280 restore:forj=0to6:readk%(j)
290 readk$:fori=0tok%(j):readk$(i,j):k$(i,j)=k$(i,j)+k$
300 nexti:nextj
310 j=0:k(j)=k(j)+1:ifk(j)=7thenk(j)=0
320 gosub680:k$="registerinhalte{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{down}---------------"
330 k$=k$+"{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{up}{up}{up}{rvon}kr="+str$(kr)+"{rvof}  {rvon}br="+str$(br)+"{down}{down}"
340 gosub520:j=k(j):ifj>0thenk$=k$(j,0):gosub520:goto310
350 rem
360 rem testroutine abarbeiten
370 gosub710:gosub690:gosub660:close1:gosub700
380 gosub680:open1,2,0,chr$(kr)+chr$(br):gosub700
390 get#1,i$:rem puffer initialisieren
400 print"{rvon}";:rem optische kennung fuer senden
410 fori=32to95:printchr$(i);:print#1,chr$(i);:next:rem zeichensatz
420 print#1:print:print#1:print
430 print#1,"the quick brown fox jumps over the lazy dog 0123456789"
440 print#1:poke204,0:rem cursor blinken ein
450 get#1,i$:ifi$=""then480
460 if(asc(i$)and127)<32thenwait207,1,1:rem steuerzeichen
470 poke207,0:printi$;:poke204,0:rem blinken steuern
480 geti$:ifi$="_"thenpoke204,1:print"{clr}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}moment bitte":goto280
490 print#1,i$;:goto450:rem abfrageschleife
500 rem
510 rem unterprogramme
520 gosub710:print"  "k$"{down}"
530 fori=0tok%(j):ifj<>1thenprint"{down}";
540 print"  "k$(i,j):next
550 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rvon}> cursor oder return {rvof}";
560 print"{home}{down}{down}{down}{down}{down}{down}";:ifj<>1thenprint
570 ifk(j)=0then600
580 fori=1tok(j):print"{down}";:ifj<>1thenprint
590 next
600 print"  {rvon}"k$(k(j),j)
610 getk$:ifk$=""then610
620 ifk$="{up}"thenifk(j)>0thenprint"{up}  "k$(k(j),j):k(j)=k(j)-1:goto560
630 ifk$="{down}"thenifk(j)<k%(j)thenprint"{up}  "k$(k(j),j):k(j)=k(j)+1:goto560
640 ifk$<>chr$(13)then610
650 return
660 if(64andpeek(37150))then660:rem puffer leeren
670 return
680 kr=128*k(3)+32*k(2)+k(1):br=32*k(6)+16*k(5)+k(4):return
690 fori=0to7:poke828+i,k(i):next:return
700 fori=0to7:k(i)=peek(828+i):next:return
710 print"{clr}{rvon}  rs-232 ein/ausgabe  {down}{down}":return
Testprogramm zum Initialisieren einer seriellen Schnittstelle
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →