Avatar billede asgerm Nybegynder
09. marts 2005 - 11:32 Der er 8 kommentarer og
1 løsning

Problem med "p" ang. COM2

Hej, jeg har et problem med den følgende kode

-----------------------------------------------------------------
#include <stdio.h>
#include <windows.h>
#include <conio.h>

void SetTimeOut(HANDLE Port, int sec)
{
  COMMTIMEOUTS commtimeouts;
  GetCommTimeouts(Port, &commtimeouts);
  commtimeouts.ReadIntervalTimeout = MAXDWORD;
  commtimeouts.ReadTotalTimeoutMultiplier = 0;
  commtimeouts.ReadTotalTimeoutConstant = 0;
  SetCommTimeouts(Port, &commtimeouts);
}

int main()
{
  char Buffer[128];
  int i,t = 30;
  DWORD Length;
 
  DCB dcb;
  HANDLE ComPortc = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

  if(ComPortc == INVALID_HANDLE_VALUE)
  {
      printf("Failed to open port\n");
  }

  GetCommState(ComPortc, &dcb);
  dcb.BaudRate = 4800;
  dcb.ByteSize = 8;
  dcb.Parity = 0;
  dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
  dcb.fOutxCtsFlow = 1;
  SetCommState(ComPortc, &dcb);
  SetTimeOut(ComPortc, 1);
 
  for(i = 0;i < t; i++)
  {
  ReadFile(ComPortc, Buffer, 128, &Length, 0);
  printf("%c" , Buffer);
  }
 
  CloseHandle(ComPortc);
}
-----------------------------------------------------------------

Programmet udskriver kun p'er og ikke det data som bliver skrevet til COM port 2 og det skulle gerne udskrive det data som den har modtaget på COM Port 2.

Med Venlig Hilsen
Fossy
Avatar billede arne_v Ekspert
09. marts 2005 - 11:42 #1
prøv med:

printf("%s" , Buffer);
Avatar billede asgerm Nybegynder
09. marts 2005 - 12:28 #2
Hmmm nu får jeg en masse ulæselige tegn :S
Avatar billede arne_v Ekspert
09. marts 2005 - 12:56 #3
Skulle der komme nogen læselige tegn ?
Avatar billede asgerm Nybegynder
09. marts 2005 - 13:01 #4
Jo der bliver sendt "123 \r\n"

(Hvor \r = carriage return og \n = new line)

Det skulle gerne blive udskrevet! Det skrev jeg så ikke noget om... min fejl!
Avatar billede arne_v Ekspert
09. marts 2005 - 13:07 #5
Hvad giver:

ReadFile(ComPortc, Buffer, 128, &Length, 0);
Buffer[Length] = '\0';
printf("%d %s" , Length, Buffer);
Avatar billede asgerm Nybegynder
09. marts 2005 - 13:15 #6
Nu kommer der 0'er
Avatar billede arne_v Ekspert
09. marts 2005 - 13:27 #7
Hvis Length er 0 så læser den 0 bytes.
Avatar billede asgerm Nybegynder
09. marts 2005 - 13:49 #8
Hvis jeg skriver følgende.

ReadFile(ComPortc, Buffer, 128, &Length, 0);
for(i = 0;i < Length; i++)
    {
    printf("%c", Buffer[i]);
    }
Får jeg vist "123" og "\r\n" som ikke er visbare tegn (altså linjeskift)
Så det virker nu! Tak for hjælpen, smid et svar hvis du vil have points! :D
Avatar billede arne_v Ekspert
09. marts 2005 - 13:51 #9
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester