home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / COMM / COMM.TXT < prev    next >
Encoding:
Text File  |  1991-10-17  |  10.5 KB  |  299 lines

  1.  
  2.  
  3. 1) Wat is COMM ? (versie 2)
  4.  
  5. COMM is een toolbox, voor Turbo Pascal vanaf versie 4.0, met
  6. elementaire functie's en procedure's voor seriële communicatie (RS232)
  7. op een IBM PC of compatible computer.
  8.  
  9. 2) Hoe werkt COMM intern ?
  10.  
  11. Als de seriële poort wordt geïnstalleerd mbv OpenPoort() doet COMM de
  12. volgende dingen :
  13.  
  14.  a Het initialiseert de UART (8250), de chip die het echte werkt doet,
  15.    en de interrupthuishouding zodanig dat de UART tekens kan ontvangen
  16.    en doorgeven aan de buffer van de toolbox.
  17.  b Het initialiseren van de buffer voor de ontvangst van data.
  18.  
  19. Als er een karakter bij de UART (via COM1 of COM2) binnenkomt genereert
  20. de UART een interrupt. De interruptroutine leest dan het karakter uit
  21. de UART en zet die in een ontvangstbuffer. Omdat dit een interrupt-
  22. mechanisme is, is het ontvangen van karakters vrijwel onmerkbaar voor
  23. het lopende programma.
  24.  
  25. Als de buffer vol is en er komen toch karakters binnen bij de UART
  26. worden die niet in de buffer gezet, die zijn dus verloren.
  27. Als de buffer leeg is en er wordt toch uit gelezen (OntvangTeken) dan
  28. wordt die lees-actie genegeerd.
  29.  
  30. De procedure SluitPoort laat de hardware en interrupts achter zoals het
  31. is aangetroffen. Het is dus noodzakelijk om SluitPoort te gebruiken na
  32. afloop van een programma (opnemen in een ExitProc is handig, zie ook
  33. hieronder).
  34.  
  35. In de eerste versie van deze toolbox zat de mogelijkheid om de
  36. lijnstatus te controleren, die functie is nu verdwenen. Die functie
  37. bleek niet goed te werken.
  38. Ook is de procedure SluitPoort veranderd. In de oude versie leidde de
  39. functie OpenPoort() de ExitProc-pointer van Pascal om zodat SluitPoort
  40. automatisch werd aangeroepen bij het beëindigen van een programma, dat
  41. is nu een zaak van de programmeur (M/V).
  42.  
  43. 3) Verantwoording
  44.  
  45. Deze toolbox is geschreven door Joris Mulder en kan door iedereen
  46. worden gebruikt, ik kan echter geen verantwoording nemen voor de
  47. gevolgen van het gebruik van deze toolbox.
  48.  
  49. Turbo Pascal is een trademark van Borland inc.
  50.  
  51.                                    Joris Mulder, herfstvakantie 1990
  52.                                    versie 2,     zomer 1991
  53.  
  54. 4) De functie's en procedure's van COMM  (alfabetisch)
  55.  
  56.  
  57. BufferLeeg function
  58.  
  59. Doel        Geeft aan of de ontvangstbuffer leeg (True) is of niet
  60.             (False).
  61. Syntax      BufferLeeg;
  62. Resultaat   boolean
  63. Opmerking   Gebruik deze functie altijd voor OntvangTeken.
  64. Zie ook     OntvangTeken, NogInBuffer
  65. Voorbeeld   if BufferLeeg then Writeln('Niets ontvangen.')
  66.                           else Teken := OntvangTeken;       
  67.  
  68.  
  69. BufferOmvang function
  70.  
  71. Doel        Geeft de grootte van de ontvangstbuffer weer in karakters
  72.             (byte's).
  73. Syntax      BufferOmvang;
  74. Resultaat   word
  75. Opmerking   Dit is een contante waarde, die niet veranderd kan worden.
  76. Zie ook     NogInBuffer
  77.  
  78.  
  79. BufferVol function
  80.  
  81. Doel        Geeft aan of de ontvangstbuffer vol (True) is of niet
  82.             (False).
  83. Syntax      BufferVol;
  84. Resultaat   boolean
  85. Opmerking   Als de ontvangstbuffer vol is gaan de hierna ontvangen
  86.             karakters verloren.
  87. Zie ook     NogInBuffer, BufferLeeg, WisBuffer
  88. Voorbeeld   if BufferVol then WisBuffer.
  89.  
  90.  
  91. Carrier function
  92.  
  93. Doel        Geeft de status van de CD (Carrier Detect) lijn op de
  94.             connector.
  95. Syntax      Carrier;
  96. Resultaat   boolean
  97. Opmerking   Als het resultaat True is, is de ingang op de connector
  98.             hoog. Deze lijn wordt meestal bij modems gebruikt.
  99. Zie ook     DTR, RTS, Ring, CTS, DSR.
  100. Voorbeeld   if Carrier then Writeln('Contact met ander modem !');
  101.  
  102. CTS function
  103.  
  104. Doel        Geeft de status van de CTS (Clear To Send) lijn op de
  105.             connector.
  106. Syntax      CTS;
  107. Resultaat   boolean
  108. Opmerking   Als het resultaat True is, is de ingang op de connector
  109.             hoog. Ondanks de RS232 standaard is er geen eenduidig
  110.             gebruik van de CTS lijn.
  111. Zie ook     DTR, RTS, Ring, Carrier, DSR.
  112. Voorbeeld   repeat until CTS;           { wacht op CTS hoog  }   
  113.             RTS(False);                 { maak RTS laag      }
  114.             ZendTeken('*');             { verstuur het teken }
  115.  
  116.  
  117. DSR function
  118.  
  119. Doel        Geeft de status van de DSR (Data Set Ready) lijn op de
  120.             connector.
  121. Syntax      DSR;
  122. Resultaat   boolean
  123. Opmerking   Als het resultaat True is, is de ingang op de connector
  124.             hoog. Ondanks de RS232 standaard is er geen eenduidig
  125.             gebruik van de DSR lijn.
  126. Zie ook     DTR, RTS, Ring, Carrier, CTS.
  127. Voorbeeld   repeat until DSR;           { wacht op DSR hoog  }
  128.             RTS(True);                  { maak RTS hoog      }
  129.             repeat until CTS;           { wacht op CTS hoog  }
  130.             RTS(False);                 { maak RTS laag      }
  131.             ZendTeken('*');             { verstuur het teken }
  132.  
  133.  
  134. DTR procedure
  135.  
  136. Doel        Stuurt de DTR (Data Terminal Ready) lijn op de connector.
  137. Syntax      DTR(Waarde : boolean);
  138. Opmerking   Als de Waarde True is, is de uitgang op de connector hoog
  139.             en vice versa. Ondanks de RS232 standaard is er geen
  140.             eenduidig gebruik van de DTR lijn.
  141. Zie ook     RTS, Ring, Carrier, CTS, DSR.
  142. Voorbeeld   DTR(True);
  143.             repeat until DSR;   { wacht op hoog worden van DSR lijn }
  144.  
  145. MaxCommPoort function
  146.  
  147. Doel        Geeft het totaal aantal COM-poorten in de computer.
  148. Syntax      MaxCommPoort;
  149. Opmerking   COMM ondersteunt alleen COM1 en COM2.
  150. Resultaat   word
  151.  
  152.  
  153. NogInBuffer function
  154.  
  155. Doel        Geeft het aantal karakters (byte's) dat nog beschikbaar is
  156.             in de ontvangstbuffer.
  157. Syntax      NogInBuffer;
  158. Resultaat   word
  159. Zie ook     BufferVol, BufferLeeg, WisBuffer
  160.  
  161. OntvangTeken function
  162.  
  163. Doel        Met de functie OntvangTeken kun je een teken uit de buffer
  164.             lezen. Als die buffer leeg is, is het teken het nulkarakter
  165.             (#0).
  166. Syntax      OntvangTeken;
  167. Resultaat   char
  168. Opmerking   Het is handig om eerst BufferLeeg te checken en aan de
  169.             hand daarvan OntvangTeken te gebruiken of niet.
  170. Zie ook     BufferLeeg
  171. Voorbeeld   Var Teken : char;
  172.             if not BufferLeeg then Teken := OntvangTeken;
  173.  
  174.  
  175. OpenPoort function
  176.  
  177. Doel        Initialiseert de seriële poort zodat die gebruikt kan
  178.             worden voor communicatie.
  179. Syntax      OpenPoort(COMnummer,BaudRate,DataBits,StopBits,Pariteit);
  180. Resultaat   byte
  181. Opmerking   COMnummer is het nummer van de COMpoort, alleen 1 en 2 zijn
  182.             geldig. COMM kan slechts één poort tegelijk open hebben.
  183.             BaudRate is een waarde tussen 1 en 8, zie de tabel :
  184.                1 =   300 Baud      2 =   600 Baud
  185.                3 =  1200           4 =  2400
  186.                5 =  4800           6 =  9600
  187.                7 = 19200           8 = 38400
  188.             DataBits is 7 of 8.
  189.             StopBits is 1 of 2.
  190.             Pariteit is een waarde van 0 t/m 2 :
  191.                0 = geen pariteit
  192.                1 = even pariteit
  193.                2 = oneven pariteit
  194.             Het resultaat geeft aan of de actie geslaagd is :
  195.                0 = geen fout, de poort is geopend.
  196.                1 = fout in het COMnummer
  197.                2 = fout in de BaudRate
  198.                3 = fout in de DataBits
  199.                4 = fout in de StopBits
  200.                5 = fout in de Pariteit
  201.                6 = Er was als een poort geopend.
  202.                7 = Er is geen hardware aanwezig voor het
  203.                    gespecificeerde COMnummer
  204. Voorbeeld   Var Res : byte;
  205.             Res := OpenPoort(1,3,8,1,0); {COM1, 1200, 8, 1, N }
  206.             if Res <> 0 then begin
  207.               Writeln('Fout bij openen van COMpoort.');
  208.               Halt(Res);
  209.               end;
  210.  
  211.  
  212. PoortOpen function
  213.  
  214. Doel        Geeft aan of eerder in een programma de poort al is geopend
  215.             mbv OpenPoort().
  216. Syntax      PoortOpen;
  217. Resultaat   boolean
  218.  
  219. Ring function
  220.  
  221. Doel        Geeft de status van de RI (Ring Indicator) lijn op de
  222.             connector.
  223. Syntax      Ring;
  224. Resultaat   boolean
  225. Opmerking   Als het resultaat True is, is de ingang op de connector
  226.             hoog. Deze lijn wordt meestal bij modems gebruikt.
  227. Zie ook     DTR, RTS, Carrier, CTS, DSR.
  228. Voorbeeld   if Ring then Writeln('De telefoon gaat !');
  229.  
  230.  
  231. RTS procedure
  232.  
  233. Doel        Stuurt de RTS (Request To Send) lijn op de connector.
  234. Syntax      RTS(Waarde : boolean);
  235. Opmerking   Als de Waarde True is, is de uitgang op de connector hoog
  236.             en vice versa. Ondanks de RS232 standaard is er geen
  237.             eenduidig gebruik van de RTS lijn.
  238. Zie ook     DTR, Ring, Carrier, CTS, DSR.
  239. Voorbeeld   RTS(True);
  240.             repeat until CTS;   { wacht op hoog worden van CTS lijn }
  241.  
  242.  
  243. SluitPoort procedure
  244.  
  245. Doel        Zet de hardware en interrupt-vector weer in de oude
  246.             situatie. Ontvangst is dan niet meer mogelijk.
  247. Syntax      SluitPoort;
  248. Opmerking   Gebruik SluitPoort altijd aan het einde van een programma.
  249. Zie ook     OpenPoort
  250. Voorbeeld   if BufferLeeg then SluitPoort;
  251.  
  252.  
  253. WisBuffer procedure
  254.  
  255. Doel        Wist de huidige inhoud van de buffer.
  256. Syntax      WisBuffer;
  257. Opmerking   De waarde van NogInBuffer wordt dus nul, BufferLeeg wordt
  258.             True.
  259. Zie ook     BufferLeeg, NogInBuffer
  260.  
  261.  
  262. ZendBlok procedure
  263.  
  264. Doel        Zendt een blok met data naar de seriële poort als die
  265.             geopend is mbv OpenPoort().
  266. Syntax      ZendBlok(DataBlokPtr : pointer; Grootte : word);
  267. Opmerking   Als de poort niet eerst was geopend mbv OpenPoort() dan
  268.             wordt de procedure genegeerd.
  269. Zie ook     ZendTeken.
  270. Voorbeeld   Var DataBlok : array[1..20] of String[50];
  271.             { doe hier iets met de inhoud van DataBlok      }
  272.             ZendBlok(@DataBlok, SizeOf(DataBlok));
  273.             { het @-teken maakt een pointer naar DataBlok   }
  274.             { SizeOf bepaalt de fysieke omvang van DataBlok }
  275.  
  276. ZendString procedure
  277.  
  278. Doel        Zendt een string naar de seriële poort als die geopend is
  279.             mbv OpenPoort().
  280. Syntax      ZendString(Tekst : string);
  281. Opmerking   Als de poort niet eerst was geopend mbv OpenPoort() dan
  282.             wordt de procedure genegeerd.
  283. Zie ook     ZendTeken.
  284. VoorBeeld   ZendString('Dit is een regel tekst.' + #13 + #10);
  285.  
  286.  
  287. ZendTeken procedure
  288.  
  289. Doel        Zendt één karakter naar de seriële poort als die geopend is
  290.             mbv OpenPoort().
  291. Syntax      ZendTeken(Karakter : char);
  292. Opmerking   Als de poort niet eerst was geopend mbv OpenPoort() dan
  293.             wordt de procedure genegeerd.
  294. Voorbeeld   Const CR = #13;   { Carriage Return }
  295.                   LF = #10;   { Line Feed       } 
  296.             ZendTeken(CR);
  297.             Zendteken(LF);
  298.  
  299.