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 25
#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[] = "HenrikLundorffThorsgaard!";
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;
}