home *** CD-ROM | disk | FTP | other *** search
-
-
- 1) Wat is COMM ? (versie 2)
-
- COMM is een toolbox, voor Turbo Pascal vanaf versie 4.0, met
- elementaire functie's en procedure's voor seriële communicatie (RS232)
- op een IBM PC of compatible computer.
-
- 2) Hoe werkt COMM intern ?
-
- Als de seriële poort wordt geïnstalleerd mbv OpenPoort() doet COMM de
- volgende dingen :
-
- a Het initialiseert de UART (8250), de chip die het echte werkt doet,
- en de interrupthuishouding zodanig dat de UART tekens kan ontvangen
- en doorgeven aan de buffer van de toolbox.
- b Het initialiseren van de buffer voor de ontvangst van data.
-
- Als er een karakter bij de UART (via COM1 of COM2) binnenkomt genereert
- de UART een interrupt. De interruptroutine leest dan het karakter uit
- de UART en zet die in een ontvangstbuffer. Omdat dit een interrupt-
- mechanisme is, is het ontvangen van karakters vrijwel onmerkbaar voor
- het lopende programma.
-
- Als de buffer vol is en er komen toch karakters binnen bij de UART
- worden die niet in de buffer gezet, die zijn dus verloren.
- Als de buffer leeg is en er wordt toch uit gelezen (OntvangTeken) dan
- wordt die lees-actie genegeerd.
-
- De procedure SluitPoort laat de hardware en interrupts achter zoals het
- is aangetroffen. Het is dus noodzakelijk om SluitPoort te gebruiken na
- afloop van een programma (opnemen in een ExitProc is handig, zie ook
- hieronder).
-
- In de eerste versie van deze toolbox zat de mogelijkheid om de
- lijnstatus te controleren, die functie is nu verdwenen. Die functie
- bleek niet goed te werken.
- Ook is de procedure SluitPoort veranderd. In de oude versie leidde de
- functie OpenPoort() de ExitProc-pointer van Pascal om zodat SluitPoort
- automatisch werd aangeroepen bij het beëindigen van een programma, dat
- is nu een zaak van de programmeur (M/V).
-
- 3) Verantwoording
-
- Deze toolbox is geschreven door Joris Mulder en kan door iedereen
- worden gebruikt, ik kan echter geen verantwoording nemen voor de
- gevolgen van het gebruik van deze toolbox.
-
- Turbo Pascal is een trademark van Borland inc.
-
- Joris Mulder, herfstvakantie 1990
- versie 2, zomer 1991
-
- 4) De functie's en procedure's van COMM (alfabetisch)
-
-
- BufferLeeg function
-
- Doel Geeft aan of de ontvangstbuffer leeg (True) is of niet
- (False).
- Syntax BufferLeeg;
- Resultaat boolean
- Opmerking Gebruik deze functie altijd voor OntvangTeken.
- Zie ook OntvangTeken, NogInBuffer
- Voorbeeld if BufferLeeg then Writeln('Niets ontvangen.')
- else Teken := OntvangTeken;
-
-
- BufferOmvang function
-
- Doel Geeft de grootte van de ontvangstbuffer weer in karakters
- (byte's).
- Syntax BufferOmvang;
- Resultaat word
- Opmerking Dit is een contante waarde, die niet veranderd kan worden.
- Zie ook NogInBuffer
-
-
- BufferVol function
-
- Doel Geeft aan of de ontvangstbuffer vol (True) is of niet
- (False).
- Syntax BufferVol;
- Resultaat boolean
- Opmerking Als de ontvangstbuffer vol is gaan de hierna ontvangen
- karakters verloren.
- Zie ook NogInBuffer, BufferLeeg, WisBuffer
- Voorbeeld if BufferVol then WisBuffer.
-
-
- Carrier function
-
- Doel Geeft de status van de CD (Carrier Detect) lijn op de
- connector.
- Syntax Carrier;
- Resultaat boolean
- Opmerking Als het resultaat True is, is de ingang op de connector
- hoog. Deze lijn wordt meestal bij modems gebruikt.
- Zie ook DTR, RTS, Ring, CTS, DSR.
- Voorbeeld if Carrier then Writeln('Contact met ander modem !');
-
- CTS function
-
- Doel Geeft de status van de CTS (Clear To Send) lijn op de
- connector.
- Syntax CTS;
- Resultaat boolean
- Opmerking Als het resultaat True is, is de ingang op de connector
- hoog. Ondanks de RS232 standaard is er geen eenduidig
- gebruik van de CTS lijn.
- Zie ook DTR, RTS, Ring, Carrier, DSR.
- Voorbeeld repeat until CTS; { wacht op CTS hoog }
- RTS(False); { maak RTS laag }
- ZendTeken('*'); { verstuur het teken }
-
-
- DSR function
-
- Doel Geeft de status van de DSR (Data Set Ready) lijn op de
- connector.
- Syntax DSR;
- Resultaat boolean
- Opmerking Als het resultaat True is, is de ingang op de connector
- hoog. Ondanks de RS232 standaard is er geen eenduidig
- gebruik van de DSR lijn.
- Zie ook DTR, RTS, Ring, Carrier, CTS.
- Voorbeeld repeat until DSR; { wacht op DSR hoog }
- RTS(True); { maak RTS hoog }
- repeat until CTS; { wacht op CTS hoog }
- RTS(False); { maak RTS laag }
- ZendTeken('*'); { verstuur het teken }
-
-
- DTR procedure
-
- Doel Stuurt de DTR (Data Terminal Ready) lijn op de connector.
- Syntax DTR(Waarde : boolean);
- Opmerking Als de Waarde True is, is de uitgang op de connector hoog
- en vice versa. Ondanks de RS232 standaard is er geen
- eenduidig gebruik van de DTR lijn.
- Zie ook RTS, Ring, Carrier, CTS, DSR.
- Voorbeeld DTR(True);
- repeat until DSR; { wacht op hoog worden van DSR lijn }
-
- MaxCommPoort function
-
- Doel Geeft het totaal aantal COM-poorten in de computer.
- Syntax MaxCommPoort;
- Opmerking COMM ondersteunt alleen COM1 en COM2.
- Resultaat word
-
-
- NogInBuffer function
-
- Doel Geeft het aantal karakters (byte's) dat nog beschikbaar is
- in de ontvangstbuffer.
- Syntax NogInBuffer;
- Resultaat word
- Zie ook BufferVol, BufferLeeg, WisBuffer
-
- OntvangTeken function
-
- Doel Met de functie OntvangTeken kun je een teken uit de buffer
- lezen. Als die buffer leeg is, is het teken het nulkarakter
- (#0).
- Syntax OntvangTeken;
- Resultaat char
- Opmerking Het is handig om eerst BufferLeeg te checken en aan de
- hand daarvan OntvangTeken te gebruiken of niet.
- Zie ook BufferLeeg
- Voorbeeld Var Teken : char;
- if not BufferLeeg then Teken := OntvangTeken;
-
-
- OpenPoort function
-
- Doel Initialiseert de seriële poort zodat die gebruikt kan
- worden voor communicatie.
- Syntax OpenPoort(COMnummer,BaudRate,DataBits,StopBits,Pariteit);
- Resultaat byte
- Opmerking COMnummer is het nummer van de COMpoort, alleen 1 en 2 zijn
- geldig. COMM kan slechts één poort tegelijk open hebben.
- BaudRate is een waarde tussen 1 en 8, zie de tabel :
- 1 = 300 Baud 2 = 600 Baud
- 3 = 1200 4 = 2400
- 5 = 4800 6 = 9600
- 7 = 19200 8 = 38400
- DataBits is 7 of 8.
- StopBits is 1 of 2.
- Pariteit is een waarde van 0 t/m 2 :
- 0 = geen pariteit
- 1 = even pariteit
- 2 = oneven pariteit
- Het resultaat geeft aan of de actie geslaagd is :
- 0 = geen fout, de poort is geopend.
- 1 = fout in het COMnummer
- 2 = fout in de BaudRate
- 3 = fout in de DataBits
- 4 = fout in de StopBits
- 5 = fout in de Pariteit
- 6 = Er was als een poort geopend.
- 7 = Er is geen hardware aanwezig voor het
- gespecificeerde COMnummer
- Voorbeeld Var Res : byte;
- Res := OpenPoort(1,3,8,1,0); {COM1, 1200, 8, 1, N }
- if Res <> 0 then begin
- Writeln('Fout bij openen van COMpoort.');
- Halt(Res);
- end;
-
-
- PoortOpen function
-
- Doel Geeft aan of eerder in een programma de poort al is geopend
- mbv OpenPoort().
- Syntax PoortOpen;
- Resultaat boolean
-
- Ring function
-
- Doel Geeft de status van de RI (Ring Indicator) lijn op de
- connector.
- Syntax Ring;
- Resultaat boolean
- Opmerking Als het resultaat True is, is de ingang op de connector
- hoog. Deze lijn wordt meestal bij modems gebruikt.
- Zie ook DTR, RTS, Carrier, CTS, DSR.
- Voorbeeld if Ring then Writeln('De telefoon gaat !');
-
-
- RTS procedure
-
- Doel Stuurt de RTS (Request To Send) lijn op de connector.
- Syntax RTS(Waarde : boolean);
- Opmerking Als de Waarde True is, is de uitgang op de connector hoog
- en vice versa. Ondanks de RS232 standaard is er geen
- eenduidig gebruik van de RTS lijn.
- Zie ook DTR, Ring, Carrier, CTS, DSR.
- Voorbeeld RTS(True);
- repeat until CTS; { wacht op hoog worden van CTS lijn }
-
-
- SluitPoort procedure
-
- Doel Zet de hardware en interrupt-vector weer in de oude
- situatie. Ontvangst is dan niet meer mogelijk.
- Syntax SluitPoort;
- Opmerking Gebruik SluitPoort altijd aan het einde van een programma.
- Zie ook OpenPoort
- Voorbeeld if BufferLeeg then SluitPoort;
-
-
- WisBuffer procedure
-
- Doel Wist de huidige inhoud van de buffer.
- Syntax WisBuffer;
- Opmerking De waarde van NogInBuffer wordt dus nul, BufferLeeg wordt
- True.
- Zie ook BufferLeeg, NogInBuffer
-
-
- ZendBlok procedure
-
- Doel Zendt een blok met data naar de seriële poort als die
- geopend is mbv OpenPoort().
- Syntax ZendBlok(DataBlokPtr : pointer; Grootte : word);
- Opmerking Als de poort niet eerst was geopend mbv OpenPoort() dan
- wordt de procedure genegeerd.
- Zie ook ZendTeken.
- Voorbeeld Var DataBlok : array[1..20] of String[50];
- { doe hier iets met de inhoud van DataBlok }
- ZendBlok(@DataBlok, SizeOf(DataBlok));
- { het @-teken maakt een pointer naar DataBlok }
- { SizeOf bepaalt de fysieke omvang van DataBlok }
-
- ZendString procedure
-
- Doel Zendt een string naar de seriële poort als die geopend is
- mbv OpenPoort().
- Syntax ZendString(Tekst : string);
- Opmerking Als de poort niet eerst was geopend mbv OpenPoort() dan
- wordt de procedure genegeerd.
- Zie ook ZendTeken.
- VoorBeeld ZendString('Dit is een regel tekst.' + #13 + #10);
-
-
- ZendTeken procedure
-
- Doel Zendt één karakter naar de seriële poort als die geopend is
- mbv OpenPoort().
- Syntax ZendTeken(Karakter : char);
- Opmerking Als de poort niet eerst was geopend mbv OpenPoort() dan
- wordt de procedure genegeerd.
- Voorbeeld Const CR = #13; { Carriage Return }
- LF = #10; { Line Feed }
- ZendTeken(CR);
- Zendteken(LF);
-
-