/ Forside/ Teknologi / Udvikling / C/C++ / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Lytte på comport ??
Fra : PeterPirat
Vist : 528 gange
100 point
Dato : 11-09-01 11:21

Jeg skal hente data fra en vægt..
Der kommer masser af data fra vægten så det er ikke der problemer ligger...
Men...
Hvordan får jeg det ind i c++?
Dette har jeg at arbejde med :

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#define PADR 0x3f8 //Base adresse for COM1 serielport.

void ser_init()
{
_outp(PADR+3, 0x80); //Sæt DLA-Bit (=> 3f8 & 3f9: Divisor)
_outp(PADR, 0x18); //Divisor=0018H ==>
_outp(PADR+1, 0x00); // 4800 b/s.
_outp(PADR+3, 0x03); //Reset DLAB og sæt N 8 1.
}

int recv_ch()
{ //Læs LinieStatusRegister og
while (!(_inp(PADR+5) & 0x01)); // vent til tegn er parat (bit 0).
return(_inp(PADR)); //Hent det så og returner det.
}

void skrivud(int tegn)
{
putch(tegn); //Skriv tegn på skærm.
}

void main()
{
int tegn;
ser_init();
do
{
tegn = recv_ch(); //Læs et tegn fra seriel-porten
skrivud(tegn); // og skriv det.
}
while(tegn != 0x1b);
}

Jeg kender desværre ikke :
_outp(PADR+3, 0x80); //Sæt DLA-Bit (=> 3f8 & 3f9: Divisor)
_outp(PADR, 0x18); //Divisor=0018H ==>
_outp(PADR+1, 0x00); // 4800 b/s.
_outp(PADR+3, 0x03); //Reset DLAB og sæt N 8 1.

Hvor finder jeg dokumentation om dette ???
Jeg har ledt på msdn.microsoft.com, men det er ret uoverskueligt(eller jeg kan ikke finde det)

Nogen der kan hjælpe ???

/Erik


 
 
Kommentar
Fra : Nyhedsbruger


Dato : 11-09-01 11:07

"PeterPirat" <PeterPirat.news@kandu.dk> wrote in message
news:mEkn7.9937$sk1.362981@news010.worldonline.dk...
> Jeg skal hente data fra en vægt..
> Der kommer masser af data fra vægten så det er ikke der problemer
> ligger...
> Men...
> Hvordan får jeg det ind i c++?
> Dette har jeg at arbejde med :
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <dos.h>
> #include <conio.h>
> #define PADR 0x3f8 //Base adresse for COM1
> serielport.
>
> void ser_init()
> {
> _outp(PADR+3, 0x80); //Sæt DLA-Bit (=> 3f8 & 3f9:
> Divisor)
> _outp(PADR, 0x18); //Divisor=0018H ==>
> _outp(PADR+1, 0x00); // 4800 b/s.
> _outp(PADR+3, 0x03); //Reset DLAB og sæt N 8 1.
> }
>
> int recv_ch()
> { //Læs LinieStatusRegister og
> while (!(_inp(PADR+5) & 0x01)); // vent til tegn er parat (bit
> 0).
> return(_inp(PADR)); //Hent det så og returner det.
> }
>
> void skrivud(int tegn)
> {
> putch(tegn); //Skriv tegn på skærm.
> }
>
> void main()
> {
> int tegn;
> ser_init();
> do
> {
> tegn = recv_ch(); //Læs et tegn fra seriel-porten
> skrivud(tegn); // og skriv det.
> }
> while(tegn != 0x1b);
> }
>
> Jeg kender desværre ikke :
> _outp(PADR+3, 0x80); //Sæt DLA-Bit (=> 3f8 & 3f9:
> Divisor)
> _outp(PADR, 0x18); //Divisor=0018H ==>
> _outp(PADR+1, 0x00); // 4800 b/s.
> _outp(PADR+3, 0x03); //Reset DLAB og sæt N 8 1.
>
> Hvor finder jeg dokumentation om dette ???
> Jeg har ledt på msdn.microsoft.com, men det er ret uoverskueligt(eller
> jeg kan ikke finde det)
>
> Nogen der kan hjælpe ???
>
> /Erik
>
>
> --
> Leveret af:
> http://www.kandu.dk/
> "Vejen til en hurtig løsning"
>

Ralph Brown har en masse informationer om div. porte osv.:
http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html

venlig hilsen
Michael Rasmussen



Kommentar
Fra : peal


Dato : 23-09-01 01:25

Jeg vil foreslå at du bruger CreateFile () fra winapi, da den vil understøtte både win9x og NT/2000/XP
Kik i følgende eksempel på hvordan du bruger den. Nu ved jeg ikke hvilken compiler du bruger, men hjælpen kan findes iden almindelige win32.hlp

//---------------------------------------------------------------------------

#include <stdio.h>

//---------------------------------------------------------------------------
void TestComm (void)
{

HANDLE comhandle;
DCB dcb;
COMMTIMEOUTS timeouts;
unsigned char sendstr[255];
unsigned char recvstr[255];
DWORD dwRead;
DWORD dwWrite;


comhandle = CreateFile ("COM1", // port name
          GENERIC_READ|GENERIC_WRITE, // read/write permission
0,          // share mode (must be 0)
NULL,          // pointer to security attibutes
OPEN_EXISTING,       // how to create
FILE_FLAG_WRITE_THROUGH, // file attributes
0);          // handle to file with attributes to copy


// ---- Building device control string
BuildCommDCB("baud=38400 parity=N data=8 stop=1", &dcb);

// ---- Setting communcation state defined in BuildCommDCB
   SetCommState(comhandle, &dcb);

// ---- Read current port parameters
GetCommTimeouts (comhandle, &timeouts);
// ---- This is only if specific port timeouts is required
timeouts.ReadIntervalTimeout       = 20;
timeouts.ReadTotalTimeoutMultiplier    = 10;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier    = 10;
timeouts.WriteTotalTimeoutConstant = 50;
// ---- Setting the parameters
SetCommTimeouts (comhandle, &timeouts);

// ---- How to read 10 characters, remember to check for return codes
ReadFile (comhandle, &recvstr, 10, &dwRead, NULL);

// ---- How to write 10 characters
WriteFile(comhandle, &sendstr, 10, &dwWrite, NULL);


CloseHandle(comhandle); // ---- Closing Handle To Communication
}

Kommentar
Fra : Eske


Dato : 15-05-02 19:16

På det nedenstående link kan du hente en plugin som kan håndtere din comport, det er en trial version, uden begrænsninger men der kommer en pop-up hver gang programmet startes. Jeg ved at den virker til Borland Builder C++ 4 og 5, og jeg mener også at den virker til MS Visual C++ og Delphi.

http://www.winsoft.sk/download/comport.zip

MVH Eske

Du har følgende muligheder
Dette spørgsmål er blevet annulleret, det er derfor ikke muligt for at tilføje flere kommentarer.
Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407936
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste