Avatar billede henth25 Nybegynder
05. oktober 2004 - 12:19 Der er 1 kommentar

Seriel kommunikation (COMporten)

Hej folkens

Jeg er i gang med at lave et program i C der kan overføre en fil fra en pc til en anden via
seriel porten(COM1), men jeg er kommet i problemer da min kode kun kan sende en tekst streng
rigtig en gang og det er hvis strengen ikke er for lang. Næste gang den serder strengen er der fejl i den.
Ind til dette problem er løst bruger jeg kun en pc så jeg bruger et RS-232 Loopback stik
(kan findes her: http://www.sealevel.com/knowledgebase/loopbacks.asp). Hvordan løser jeg det problem?

PS: programmet skal kunne køre i DOS.



#include <stdio.h>
#include <bios.h>
#include <dos.h>

#define COM1 0 //select com1(0x3f8)port
#define DATA_READY 0x100
#define ARRAY_SIZE 28
#define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00)
//baud 1200, 7 data bits, no parity, 1 stop bit

void init_seriel_comm();

void init_seriel_comm() {
bioscom(_COM_INIT, SETTINGS, COM1); //init. port
}

int main() {
int status, out, count_in, count, i;
int send=1;
char msg[] = "HvorforVirkerDetHerKodeIkke!";
char msg_in[ARRAY_SIZE];

clrscr();
for(i=0; i < ARRAY_SIZE; i++) msg_in=0;

init_seriel_comm();

printf("Send strengen: '");

for(i=0; i < ARRAY_SIZE; i++) printf("%c", msg);

printf("'\n\n");

while(1) {
status = bioscom(_COM_STATUS, 9, COM1);

if(status & DATA_READY) {
if((out = bioscom(_COM_RECEIVE, 0, COM1) & 0x7F) != 0) msg_in[count_in++]=out;

if(out == '!') {
for(i=0; i < strlen(msg); i++) printf("%c", msg_in);
printf("\n");
for(i=0; i < ARRAY_SIZE; i++) msg_in=0;
count_in=0;
send=1;
}
}

if(send) {
for(i=0; i < strlen(msg); i++) bioscom(_COM_SEND, msg, COM1);
send=0;
}

if(kbhit()) break;
}
getch();
return 0;
}
Avatar billede bertelbrander Novice
05. oktober 2004 - 20:31 #1
Jeg har (forsøgt på) besvaret dit spørgsmål i et andet forum.
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