DECLARE SUB BaudR (PortNr%, Baud&) '-- baudrate.bas ----------------------------------------------- >>fst'01<< - ' - Demo, wie man die Baudrate der seriellen Schnittstelle durch direkte ' Programmierung der Steuerregister einstellen kann. ' - Damit sind Baudraten einstellbar, die BASIC sonst nicht zulaesst. ' - Fuer Baudraten ab ca. 28800 muss die Schnittstelle hardwaremaessig ' geruestet sein (FIFO-Speicher). ' - PUBLIC DOMAIN '-- V 20011215 ------------------------------ http://home.arcor.de/steini63 - 'Serielle Schnittstelle wie gewohnt oeffnen (Baudrate beliebig): OPEN "COM1:9600,N,8,1,CS,DS" FOR INPUT AS #1 Baud& = 27777 'Neue Baudrate waehlen CALL BaudR(1, Baud&) 'Baudrate fuer COM1 aendern CLS 'Unmoegliche Baudraten werden auf den naechsthoeheren Wert eingestellt: PRINT "Eingestellte Baudrate: "; Baud& 'Wenn Zeichen eingehen, diese anzeigen: DO IF LOC(1) THEN PRINT INPUT$(1, #1); LOOP WHILE INKEY$ = "" CLOSE #1 SUB BaudR (PortNr%, Baud&) 'aendert die Baudrate nach dem Oeffnen einer seriellen Schnittstelle 'mit OPEN COM ... durch direkte Registerprogrammierung. Baudraten bis '115200 Baud und exotische Baudraten koennen eingestellt werden. IF PortNr% = 2 THEN BA% = &H2F8 'Basisadresse von COM2 ist &H2F8 ELSE BA% = &H3F8 'Basisadresse von COM1 ist &H3F8 END IF Teiler& = 115200 \ Baud& 'Teiler fuer gewuenschte Baudrate bestimmen TeilerL% = Teiler& MOD 256 'niederwertiges Byte des Teilers bestimmen TeilerH% = Teiler& \ 256 'hoeherwertiges Byte des Teilers bestimmen Baud& = 115200 \ Teiler& 'tatsaechliche Baudrate bestimmen Si% = INP(BA% + 3) 'Inhalt LeitungsSteuerRegister LSR (Offset 3) sichern OUT BA% + 3, Si% OR 128 'Bit7 (Wert 128) im LSR aktiviert Baudrateneingabe OUT BA%, TeilerL% 'LowByte des Baudraten-Teilers ausgeben (Offset 0) OUT BA% + 1, TeilerH% 'HighByte des Baudraten-Teilers ausgeben (Offset 1) OUT BA% + 3, Si% 'alten Inhalt LSR wiederherstellen END SUB