Seriële poort van de computer. Anatomie van een COM-poort

Soms moet je het communicatieprobleem oplossen elektronisch apparaat met een computer, of het nu gaat om alleen gegevensuitwisseling of afstandsbediening. In dit artikel wordt beschreven hoe u dit kunt doen met een seriële poort. Het belangrijkste voordeel is dat de standaardsoftware Windows-interface(API) maakt directe controle over uitvoerlijnen mogelijk, waardoor directe controle over hen wordt verkregen, en heeft een functie om te wachten op een gebeurtenis die is gekoppeld aan een COM-poort. Ook maakt de RS-232-standaard, volgens welke de COM-poorten zijn gemaakt, het mogelijk om kabels aan en los te koppelen tijdens de werking van apparaten (hot plug).

Beschrijving

COM-poort (seriële poort)- een bidirectionele interface die gegevens in seriële vorm (bit voor bit) verzendt met behulp van het RS-232-protocol. Dit is een vrij algemeen protocol dat wordt gebruikt om het ene apparaat (bijvoorbeeld een computer) met andere apparaten te verbinden via kabels tot 30 meter lang. De niveaus van logische signalen verschillen hier van de standaard: het niveau van de logische eenheid is van +5 tot + 15V, het niveau logische nul- van -5 tot -15V, waarvoor extra circuittransformaties nodig zijn, maar die een goede ruisimmuniteit bieden.

Overweeg een 9-pins connector (DB-9M). Hieronder is de pinout:

Pincode Naam Signaal natuur Signaal
1 DCD Invoer Gegevensdrager detecteren
2 RxD Vrije dag Gegevens verzenden
3 TxD Invoer Ontvang data
4 DTR Vrije dag Dataterminal gereed
5 GND - Grond
6 DSR Invoer Dataset klaar
7 RTS Vrije dag Verzoek om te verzenden
8 CTS Invoer Wissen om te verzenden
9 RI Invoer Belsignaal

We zullen vooral geïnteresseerd zijn in pinnen 2 (gegevensoverdracht), 3 (gegevensontvangst) en 5 (aarde). Dit is de minimale set voor de tweerichtingscommunicatie van apparaten.

Ik zal niet in detail stilstaan ​​​​bij de beschrijving van het protocol. Hiervoor zijn er GOST's etc. Daarom zullen we doorgaan en praten over hoe we dit beest kunnen beheersen.

Sollicitatie

Zoals gezegd zijn de RS-232 LAN-niveaus anders dan de standaard TTL-niveaus. Daarom moeten we de spanningswaarden op de een of andere manier transformeren. Die. maak 5V van + 15V en 0V van -15V (en vice versa). Een van de manieren (en waarschijnlijk de gemakkelijkste) is om een ​​speciale MAX232-microschakeling te gebruiken. Het is gemakkelijk te begrijpen en kan tegelijkertijd twee logische signalen omzetten.

Hieronder is een diagram van de opname ervan:


Ik denk dat er geen problemen mogen zijn. Dit is een van de mogelijkheden om deze microschakeling te gebruiken: gegevens overzetten van een microcontroller naar een computer en omgekeerd. Signaal verzonden: komt in de benen T x IN aan de ene kant en aan R x IN anderzijds. Ingangssignalen zijn afkomstig van T x UIT en R x UIT respectievelijk.

Programmeren

Laten we het eerst hebben over poortprogrammering op laag niveau. Dit zal correcter zijn. Ik heb veel zenuwen besteed aan het omgaan met deze interface totdat ik me begon te verdiepen in het principe van de werking ervan op een lager niveau dan eenvoudige overdracht karakters. Als dit duidelijk is, dan betekent dat ook met talen. hoog niveau er zullen geen problemen zijn.

Hieronder staan ​​de adressen van de COM-poorten waarmee we aan de slag moeten:

Poortnaam Adres IRQ
COM 1 3F8h 4
COM2 2F8h 3
COM 3 3E8h 4
COM4 2E8h 3

Ze kunnen variëren. U kunt de waarden instellen in de BIOS-instellingen. het basisadressen... De adressen van de registers die verantwoordelijk zijn voor de exploitatie van de havens hangen ervan af:

Adres DLAB Lezen schrijven Afkorting Naam registreren
+ 0 =0 Schrijven Zender Holding Buffer
=0 Lezen Ontvanger Buffer
=1 Lezen schrijven Deler Vergrendeling Lage Byte
+ 1 =0 Lezen schrijven IER Interrupt Inschakelen Registreren
=1 Lezen schrijven Deler Vergrendeling Hoge Byte
+ 2 - Lezen IIR Identificatieregister onderbreken
- Schrijven FCR FIFO-controleregister
+ 3 - Lezen schrijven LCR Lijncontroleregister
+ 4 - Lezen schrijven MCR Modem controle register
+ 5 - Lezen LSR Regelstatusregister
+ 6 - Lezen MSR Modemstatusregister
+ 7 - Lezen schrijven Krasregister

De eerste kolom is het registeradres ten opzichte van het basisadres. Voor COM1 bijvoorbeeld: het LCR-registeradres is 3F8h + 3 = 3FB. De tweede kolom is de DLAB-bit (Divisor Latch Access Bit) die een andere toewijzing voor hetzelfde register definieert. het stelt u in staat om op 12 registers te werken met slechts 8 adressen. Als bijvoorbeeld DLAB = 1, dan zullen we, verwijzend naar het adres 3F8h, de waarde van de onderste byte van de frequentiedeler instellen klok generator... Als DLAB = 0, dan wordt, verwijzend naar hetzelfde adres, de verzonden of ontvangen byte naar dit register geschreven.

Nul register

Het komt overeen met de registers voor het ontvangen / verzenden van gegevens en het instellen van de generatorfrequentiedelercoëfficiënt. Zoals hierboven vermeld, als DLAB = 0, wordt het register gebruikt om ontvangen / verzonden gegevens te schrijven, als het gelijk is aan 1, dan wordt de waarde van de lage byte van de frequentiedeler van de klokgenerator ingesteld. De gegevensoverdrachtsnelheid is afhankelijk van de waarde van deze frequentie. De hoge byte van de deler wordt naar de volgende geheugenlocatie geschreven (d.w.z. voor de COM1-poort is dit 3F9h). Hieronder staat de afhankelijkheid van de baudrate van de delerfactor:

Interrupt Activeren Register (IER)

Als DLAB = 0, dan wordt het gebruikt als een asynchrone adapter interrupt control register, als DLAB = 1, dan wordt de hoge byte van de klokgenerator frequentiedeler daarin ingesteld.

Interrupt Identificatie Register (IIR)

Een interrupt is een gebeurtenis waarbij de uitvoering van het hoofdprogramma stopt en de uitvoering van de interruptroutine begint. Dit register bepaalt het type interrupt dat heeft plaatsgevonden.

Lijncontroleregister (LCR)

Dit is het controleregister.

Bit 7 1 Deler Latch Access Bit - de gegevensuitwisselingssnelheid instellen
0 Normale modus (onderbrekingscontrole, gegevensontvangst / verzending)
Bit 6 Regeleinde simuleren (stuurt een reeks van meerdere nullen)
Bits 3 - 5 Bit 5 Bit 4 Bit 3 Pariteit selectie
x x 0 geen pariteit
0 0 1 oneven pariteit
0 1 1 Even pariteit
1 0 1 Hoge pariteit (plakkerig)
1 1 1 Lage pariteit (kleverig)
Bit 2 Aantal stopbits
0 1 stopbit
1 2 stopbits voor 6,7 of 8 databits of 1,5 stopbits voor 5 databits.
Bits 0 en 1 Bit 1 Bit 0 Aantal databits
0 0 5 bits
0 1 6 bits
1 0 7 bits
1 1 8 bits

Pariteitscontrole impliceert de verzending van nog een bit - de pariteitsbit. De waarde is zo ingesteld dat het totale aantal enen (of nullen) in de bitburst even of oneven is, afhankelijk van de instelling van de poortregisters. Deze bit wordt gebruikt om fouten te detecteren die kunnen optreden tijdens gegevensoverdracht als gevolg van lijnruis. Ontvangend apparaat berekent de pariteit van de gegevens opnieuw en vergelijkt het resultaat met de ontvangen pariteitsbit. Als de pariteit niet overeenkomt, worden de gegevens als foutief verzonden beschouwd.

De stopbit betekent het einde van de gegevensoverdracht.

Modem Controle Register (MCR)

Modem controle register.

Beetje Betekenis
0 DTR-lijn
1 RTS-lijn.
2 OUT1 lijn (reserve)
3 OUT2-lijn (reserve)
4 Voer een diagnose uit wanneer een asynchrone adapter-ingang is kortgesloten naar de uitgang.
5-7 gelijk aan 0

Lijnstatusregister (LSR)

Een register dat de toestand van de lijn bepaalt.

Beetje Betekenis
0 Gegevens ontvangen en klaar om te lezen, automatisch gewist wanneer gegevens worden gelezen.
1 Overloopfout. Er is een nieuwe databyte ontvangen en de vorige is nog niet gelezen door het programma. De vorige byte gaat verloren.
2 Pariteitsfout, gewist na het lezen van de lijnstatus.
3 Synchronisatiefout.
4 Verzoek om verzending te onderbreken "BREAK" gedetecteerd - lange rij nullen.
5 Het zendergeheugenregister is leeg, er kan een nieuwe byte naar worden geschreven voor verzending.
6 Het zenderschuifregister is leeg. Dit register ontvangt gegevens van het holdingregister en rangschikt deze voor verzending.
7 Time-out (het apparaat is niet aangesloten op de computer).

Modemstatusregister (MSR)

Modemstatusregister.

Dus dat is alles. Door met deze registers te werken, kunt u direct communiceren met de COM-poort, de verzending en ontvangst van gegevens regelen. Als je niet met geheugen wilt rommelen, kun je kant-en-klare componenten gebruiken voor verschillende programmeeromgevingen: C++, VB, Delphi, Pascal, etc. Ze zijn intuïtief, dus ik denk dat je er hier niet op moet focussen.

Samen met de parallelle poort is de COM-poort, of seriële poort, een van de traditionele I/O-poorten van een computer, die in de eerste pc's werd gebruikt. hoewel in moderne computers De COM-poort is van beperkt nut, maar informatie hierover kan voor veel gebruikers nuttig zijn.

Seriële poort verscheen, net als parallel, lang voordat de persoonlijke computers architectuur van de IBM-pc. In de eerste personal computers werd de COM-poort gebruikt om verbinding te maken randapparatuur... Het toepassingsgebied ervan was echter enigszins anders dan het toepassingsgebied parallelle poort... Als de parallelle poort voornamelijk werd gebruikt voor het aansluiten van printers, dan werd de COM-poort (de COM-prefix is ​​trouwens gewoon een afkorting voor het woord communicatie) meestal gebruikt om met telecommunicatieapparatuur zoals modems te werken. Wel kun je op de poort bijvoorbeeld een muis aansluiten, maar ook andere randapparatuur.

COM-poort, belangrijkste toepassingsgebieden:

  1. Terminal verbinding
  2. ~ externe modems
  3. ~ printers en plotters
  4. ~ muizen
  5. Directe verbinding van twee computers

Momenteel is de omvang van de COM-poort aanzienlijk verkleind door de introductie van een snellere en compactere, en overigens ook consistente, USB-interface... Bijna buiten gebruik externe modems, ontworpen voor aansluiting op de poort, evenals "COM"-muizen. Het is zeldzaam dat iemand nu twee computers verbindt met een nulmodemkabel.

Een aantal gespecialiseerde apparaten gebruiken echter nog steeds de seriële poort. Je vindt het ook op veel moederborden. Feit is dat, in vergelijking met USB, de COM-poort er één heeft belangrijk voordeel- volgens de norm seriële verzending data RS-232, het kan werken met apparaten op een afstand van enkele tientallen meters, terwijl het bereik USB-kabel is over het algemeen beperkt tot 5 meter.

Hoe een seriële poort werkt en hoe deze verschilt van een parallelle poort

In tegenstelling tot de parallelle (LPT) poort, verzendt de seriële poort gegevens bit voor bit over een enkele lijn, in plaats van meerdere tegelijk. Bitreeksen zijn gegroepeerd in een reeks gegevens, beginnend met een startbit en eindigend met een stopbit, en pariteitsbits die worden gebruikt voor foutcontrole. Van hier komt er nog een Engelse naam die een seriële poort heeft - seriële poort.

De seriële poort heeft twee lijnen waardoor de eigenlijke gegevens worden verzonden - dit zijn de lijnen voor het overbrengen van gegevens van de terminal (pc) naar het communicatieapparaat en vice versa. Daarnaast zijn er nog een aantal bedieningslijnen. Seriële poort wordt bediend door een speciale UART-microschakeling, die relatief kan ondersteunen hoge snelheid datatransmissie tot 115.000 baud (bytes / s). Het is waar dat moet worden opgemerkt dat: echte snelheid de uitwisseling van informatie is afhankelijk van beide communicatiemiddelen. Bovendien is de functie van de UART-controller om parallelle naar seriële code om te zetten en vice versa.

Poort gebruikt elektrische signalen vergelijkende hoogspanning - tot +15 V en -15 V. Het logische nulniveau van de seriële poort is +12 V en het logische niveau is -12 V. Met een dergelijk groot spanningsverlies kunt u garanderen hoge graad ruisimmuniteit van de verzonden gegevens. Aan de andere kant, gebruikt in seriële poort hoge spanningen vereisen complexe circuitoplossingen. Deze omstandigheid droeg ook bij aan de daling van de populariteit van de haven.

Seriële interface RS-232

De werking van de seriële poort op een pc is gebaseerd op de RS-232-standaard voor seriële communicatie. Deze norm beschrijft het proces van gegevensuitwisseling tussen een telecommunicatieapparaat zoals een modem en computerterminal... De RS-232-standaard definieert: elektrische kenmerken: signalen, hun doel, duur, evenals de grootte van de connectoren en de pin-out ervoor. Tegelijkertijd beschrijft RS-232 alleen: fysieke laag het proces van gegevensoverdracht en is niet van toepassing op de transportprotocollen die kan variëren afhankelijk van de gebruikte communicatieapparatuur en software.

De RS-232-standaard werd in 1969 gecreëerd en is laatste versie, TIA 232, uitgebracht in 1997. RS-232 is nu achterhaald, maar de meeste besturingssystemen ondersteunt het nog steeds.

In moderne computers is de seriële poortconnector een 9-pins DB-9 mannelijke connector, hoewel de RS-232-standaard ook een 25-pins DB-25-connector beschrijft, die vaak werd gebruikt op oudere computers. De DB-9-connector bevindt zich meestal op moederbord PC, hoewel deze bij oudere computers op een speciale multikaart kan worden geplaatst die in de uitbreidingssleuf is gestoken.

9-pins DB-9 vrouwelijk op moederbord

DB-9-connector op de aangesloten apparaatkabel

In tegenstelling tot de parallelle poort zijn de connectoren aan beide zijden van de dubbelzijdige seriële kabel identiek. Naast de lijnen voor het verzenden van de gegevens zelf, bevat de poort verschillende servicelijnen waarmee tussen de terminal (computer) en het telecommunicatieapparaat (modem) kan worden verzonden controle informatie... Hoewel in theorie slechts drie kanalen voldoende zijn voor de werking van een seriële poort - data-ontvangst, datatransmissie en massa, heeft de praktijk geleerd dat de aanwezigheid van servicelijnen de communicatie efficiënter, betrouwbaarder en daardoor sneller maakt.

Doel van de lijnen van de seriële poort DB-9-connector volgens RS-232 en hun correspondentie met de contacten van de DB-25-connector:

DB-9-pin Engelse naam Russische naam Neem contact op met DB-25
1 Detectie van gegevensdragers Vervoerder gedetecteerd 8
2 Gegevens verzenden Verzonden gegevens 2
3 Ontvang data Ontvangen data 3
4 Gegevensterminal gereed Terminal gereedheid 20
5 Grond aarde 7
6 Dataset klaar Zender gereedheid 6
7 Verzoek om te verzenden Verzoek om gegevens te verzenden 4
8 Wissen om te verzenden Gegevensoverdracht toegestaan 5
9 Belsignaal Belsignaal 22

Configuratie en onderbrekingen

Aangezien een computer meerdere seriële poorten kan hebben (maximaal 4), wijst het systeem er twee hardware-interrupts voor toe: IRQ 3 (COM 2 en 4) en IRQ 4 (COM 1 en 3) en verschillende BIOS-interrupts. Veel communicatie programma's, evenals ingebouwde modems gebruiken interrupts en de adresruimte van COM-poorten voor hun werk. In dit geval worden meestal geen echte poorten gebruikt, maar de zogenaamde virtuele poorten die worden geëmuleerd door het besturingssysteem zelf.

Zoals met veel andere componenten moederbord, de parameters van de COM-poorten, in het bijzonder de BIOS-interruptwaarden die overeenkomen met de hardware-interrupts, kunnen via de interface worden geconfigureerd BIOS-instellingen... Hiervoor is zo'n BIOS-opties zoals COM-poort, ingebouwde seriële poort, seriële poortadres, enz.

Conclusie

De seriële poort van een pc is momenteel geen veelgebruikt middel voor I/O-informatie. Aangezien er echter een groot aantal van apparatuur, voornamelijk voor telecommunicatiedoeleinden, ontworpen om te werken met seriële poort en ook vanwege enkele van de voordelen van het RS-232 seriële dataprotocol, mag de seriële interface nog niet worden afgeschreven als een absoluut achterhaald rudiment van de personal computerarchitectuur.

De lezer van onze site Maxim vraagt:

Hallo! Kunt u mij helpen het probleem op te lossen? De essentie: er is een programma dat een signaal genereert en dit doorstuurt naar de COM-poort op pc # 1, u moet dit signaal ontvangen op pc # 2, de gegevens waarnaar wordt ontvangen via de COM-poort. Bovendien is er alleen een lokaal netwerk tussen deze pc's. Zal het resultaat zijn van het met elkaar verbinden van deze 2 COM-poorten?

Laten we dus eerst proberen te begrijpen of het mogelijk is om gegevens tussen computers over te dragen via

Een null-modem com-kabel monteren

Het gaat om de zogenaamde nulmodemkabel. Wanneer netwerkkaarten waren erg duur, en om met elkaar te communiceren lokaal netwerk Ik wilde, Com Lan Link was uitgevonden - een netwerk dat werkt via com-poorten. Het kostte bijna een cent, werd volledig met de hand gemaakt en kon werken op afstanden tot 1 km. De enige beperking, zoals u weet, was snelheid, omdat voor een com-poort mag deze niet hoger zijn dan 115,2 Kbps. Uiteraard wordt dit type verbinding gekenmerkt door alleen op applicatieniveau te werken, zonder tussenliggende netwerkbesturingssystemen en andere fijne kneepjes, d.w.z. Com Lan Link is de gemakkelijkste manier netwerkverbinding... Voor communicatie van computers in Com wordt Lan Link gebruikt speciale kabel die we vandaag gaan verzamelen. Laten we eerst eens kijken naar de com-poortbedrading (van het "moeder"-type):

Het idee van een null-modem kabel is heel eenvoudig: alle "gebalanceerde" signalen worden kruiselings gekruist, dat wil zeggen: TXD-RXD, DTR- (DSR, CD), CTS-RTS, GND-GND. Maar je kunt het nog makkelijker doen. De belangrijkste voor ons zijn TxD, RxD en Ground. De rest kan lokaal op de poort zelf worden kortgesloten en de draad redden. (In de dagen van Doom is dit precies wat ze deden. Zo'n draad werd in de volksmond een "snoer" genoemd.) Dit is natuurlijk niet erg goed, aangezien zal niet werken hardware controle stroom, maar in de meeste gevallen is dit niet vereist. Wat betreft de lengte van de draad, zonder een speciale replicator, kan deze oplopen tot 30 meter. De draden zelf kunnen van alles zijn - tot telefoonnoedels. Hier is een diagram van de eenvoudigste nulmodemkabel:

Voor de montage hebben we twee vrouwelijke com-connectoren, drie draden en een soldeerbout nodig. Het is beter om eerst de hoofddraden te solderen en vervolgens de benodigde poten kort te sluiten met extra. Nadat alles klaar is, schakelt u beide computers uit en steekt u de uiteinden van de kabel in de connectoren. Het is beter om de pc volledig los te koppelen van het netwerk of de connector op de behuizing aan te raken voordat u verbinding maakt. Voor dit type verbinding is een herstart vereist - het systeem moet de poorten initialiseren. Trouwens, als je te lui bent om te solderen, kun je een kant-en-klaar kopen nulmodem kabel... Ze zijn te vinden op radiopunten en in radiocomponenten. In Minsk zag ik op Zhdanovichi.

Ook goed materiaal over het onderwerp gegevensoverdracht via com is. Geheel laboratorium werk... En mensen delen hun praktijkervaring met het overzetten van data via zo'n verbinding door middel van OS Linux.

Dus uit de bovenstaande materialen wordt het duidelijk dat com-to-com de oudste en de eenvoudigste manier twee computers met elkaar verbinden. Daarom volgt een ondubbelzinnig antwoord op het probleem:

Ja, gegevensoverdracht tussen twee computers via een COM-poort is mogelijk. Dit wordt een nulmodem-verbinding genoemd en is de eenvoudigste versie van een lokaal netwerk.

Dus kwamen we bij de COM-poort. Maar bij hem is niet alles zo eenvoudig als bij LPT, en zijn volledig gebruik zal aanzienlijk vereisen grote inspanning... Het grootste probleem is het belangrijkste voordeel: seriële gegevensoverdracht. Als in LPT een byte aan gegevens wordt verzonden over 8 regels, één bit voor elk, en de status van elke regel gemakkelijk kan worden bekeken, dan in COM-poort databyte wordt bit voor bit langs één lijn verzonden (ten opzichte van de grond natuurlijk) en het zal niet mogelijk zijn om te zien wat daar wordt verzonden met alleen de LED's. Om dit te doen, hebt u een speciaal apparaat nodig - een seriële naar parallelle datastroomconverter, de zogenaamde. USART (Universele Synchrone/Asynchrone Ontvanger Zender). Het maakt bijvoorbeeld deel uit van het moederbord van een computer die is uitgerust met een COM-poort, in elke serieuzere microcontroller.


Ik hoop dat je nog steeds verdwaald bent in de ontwikkeling van de COM-poort. Het is allemaal niet zo somber. Sommige resultaten kunnen worden verkregen zonder de USART. Laten we de taak formuleren die we zullen implementeren in de beginfase van het werken met de COM-poort:


"Ik wil dat een LED via de COM-poort op de computer wordt aangesloten. Ik start het programma. Ik geef wat actie in dit programma, de LED licht op, ik doe iets anders - de LED gaat uit."


De taak is vrij specifiek (rekening houdend met het feit dat USART niet wordt gebruikt) en is puur "eigenwijs", maar het is goed realiseerbaar en werkbaar. Laten we het gaan implementeren.


1. COM-poort

We nemen opnieuw systeemonderdeel uw pc en kijk naar de achterkant. We merken daar de 9-pins connector op - dit is de COM-poort. In werkelijkheid kunnen er een paar zijn (maximaal 4). Er zijn twee COM-poorten geïnstalleerd op mijn pc (zie foto).


2. Uitbreiding COM-poort:


3. Hardware

We moeten ook "sleutelen" aan het hardwaregedeelte, in die zin dat het ingewikkelder zal zijn dan met het eerste apparaat voor LPT-poort... Het feit is dat het RS-232-protocol waarmee gegevens worden uitgewisseld in de COM-poort een iets andere logische status-spanningsverhouding heeft. Als het normaal gesproken 0 0 V is, logisch 1 +5 V, dan is deze relatie in RS-232 als volgt: logisch 0 +12 V, logisch 1 -12 V.

En als je bijvoorbeeld -12 V hebt ontvangen, is het niet meteen duidelijk wat je met deze spanning moet doen. Gewoonlijk wordt de conversie van RS-232-niveaus naar TTL (0,5 V) uitgevoerd. De eenvoudigste optie zijn zenerdiodes. Maar ik stel voor om deze converter op een speciale microschakeling te maken. Het heet MAX232.

Laten we nu eens kijken welke signalen van de COM-poort we op de LED's kunnen zien? In feite zijn er maar liefst 6 onafhankelijke lijnen in de COM-poort, die van belang zijn voor de ontwerper van het interface-apparaat. Twee ervan zijn nog niet voor ons beschikbaar - lijnen voor het overbrengen van seriële gegevens. Maar de overige 4 zijn ontworpen om het proces van gegevensoverdracht te controleren en aan te geven en we kunnen ze naar onze behoeften "overdragen". Twee ervan zijn bedoeld voor bediening vanaf de zijkant extern apparaat en we zullen ze voorlopig niet aanraken, maar we zullen nu de laatste twee resterende regels gebruiken. Ze heten:

  • RTS- Verzoek om overplaatsing. Interactielijn die aangeeft dat de computer klaar is om gegevens te ontvangen.
  • DTR- De computer is klaar. Interactielijn, die aangeeft dat de computer is ingeschakeld en klaar is om te communiceren.

Nu zullen we hun doel een beetje overdragen, en de LED's die erop zijn aangesloten, gaan uit of lichten op, afhankelijk van de acties in ons eigen programma.

Laten we dus een diagram samenstellen waarmee we de beoogde acties kunnen uitvoeren.

En hier is de praktische uitvoering ervan. Ik denk dat je me zult vergeven dat ik het in zo'n stomme prototypeversie heb gemaakt, omdat ik geen bord wil maken voor zo'n "zeer productief" circuit.


4. Software-onderdeel:

Alles is hier eenvoudiger. Laten we creëren Windows-toepassing v Microsoft visueel C++ 6.0 gebaseerd op MFC voor het beheer van twee lijnen COM-poortcommunicatie. Hiervoor creëren we nieuw project MFC en geef het een naam, bijvoorbeeld TestCOM... Vervolgens selecteren we de constructieoptie op basis van de dialoog.

Bijvoegen verschijning het dialoogvenster van ons programma, zoals in Fig. hieronder, namelijk vier knoppen toevoegen, twee op elk van de regels. Een ervan is respectievelijk nodig om de lijn te "doven", de andere om deze op een eenheid te "instellen".

Class CTestCOMDlg: public CDialog (// Construction public: CTestCOMDlg (CWnd * pParent = NULL); // standard constructor HANDLE hFile;

Om ervoor te zorgen dat ons programma de lijnen van de COM-poort kan besturen, moet het eerst worden geopend. Laten we de code schrijven die verantwoordelijk is voor het openen van de poort bij het laden van het programma.

HFile = CreateFile ("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) (MessageBox ("Kan poort niet openen!", "Fout", MB_ICONERROR);) else (MessageBox ("Poort succesvol geopend", "Ok", MB_OK);)

De standaardfunctie gebruiken Win-API Bestand aanmaken () open de COM-poort COM2... Vervolgens controleren we het succes van de opening met de opname informatie bericht... Hier is het nodig om te doen belangrijke notitie: COM2 zit in mijn computer, maar op jouw computer zou je hem op een andere COM-poort kunnen aansluiten. Dienovereenkomstig moet de naam worden gewijzigd in de poort die u gebruikt. U kunt als volgt zien welke poortnummers op uw computer aanwezig zijn: Start -> Instellingen -> Configuratiescherm -> Systeem -> Hardware -> Apparaatbeheer -> Poorten (COM en LPT).

Als gevolg hiervan is de functie CTestCOMDlg :: OnInitDialog () bevindt zich in het bestand TestCOMDlg.cpp, zou de klasse van onze dialoog de vorm moeten aannemen:

BOOL CTestCOMDlg :: OnInitDialog () (CDialog :: OnInitDialog (); // Voeg "Over ..." menu-item toe aan systeemmenu. // IDM_ABOUTBOX moet in het systeemopdrachtbereik zijn. ASSERT ((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT (IDM_ABOUTBOX AppendMenu (MF_SEPARATOR); pSysMenu-> AppendMenu (MF_STRING, IDM_ABOUTBOX, strAboutMenu);)) // Stel het pictogram voor dit dialoogvenster in. Het framework doet dit automatisch // wanneer het hoofdvenster van de applicatie geen dialoogvenster is SetIcon (m_hIcon, TRUE); // Stel groot pictogram in SetIcon (m_hIcon, FALSE); // Stel klein pictogram in // TODO: Voeg hier extra initialisatie toe hFile = CreateFile ("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) (MessageBox ("Kan poort niet openen!", "Fout", MB_ICONERROR);) else (MessageBox ("Poort succesvol geopend", "Ok", MB_OK);) return TRUE; // return TRUE tenzij u de focus op een besturingselement zet)

Laten we nu handlers toevoegen voor de regelknoppen. Ik heb ze de juiste namen gegeven: de functie die een op de DTR-regel instelt, is OnDTR1 (), 0 is OnDTR0 (). Voor de RTS-lijn, respectievelijk, op dezelfde manier. Laat me je eraan herinneren dat de handler wordt gemaakt wanneer Dubbelklik op de knop. Als gevolg hiervan zouden deze vier functies de vorm moeten aannemen:

Void CTestCOMDlg :: OnDTR1 () (// TODO: voeg hier uw handlercode voor controlemeldingen toe EscapeCommFunction (hFile, 6);) void CTestCOMDlg :: OnDTR0 () (// TODO: voeg hier uw handlercode voor controlemeldingen toe EscapeCommFunction (hFile, 5);) void CTestCOMDlg :: OnRTS1 () (// TODO: voeg hier uw handlercode voor controlemeldingen toe EscapeCommFunction (hFile, 4));) void CTestCOMDlg :: OnRTS0 () (// TODO: voeg hier uw handlercode voor controlemeldingen toe EscapeComm-functie (hFile, 3);)

Ik zal even uitleggen hoe ze werken. Zoals je kunt zien, bevatten ze van binnen een oproep naar dezelfde Win API-functies EscapeCommFunctie () met twee parameters. De eerste is de HANDGREEP op open poort, tweede - speciale code actie die overeenkomt met de vereiste lijnvoorwaarde.

Dat is het, laten we het compileren, starten. Als alles goed is, zou u een bericht moeten zien dat de poort met succes is geopend. Vervolgens, door op de corresponderende knoppen te drukken, laten we de LED's knipperen die op de COM-poort zijn aangesloten.

© Dmitry Ivanov
december 2006