|
PC机与单片机通过RS232串口通信,请各位哥哥姐姐帮忙修改下错误,小弟确实不知道从哪修改
[复制链接]
下面是一个PC机与单片机通过RS232串口通信,PC机上C程序(对8250的初始化,PC机发送接受程序)
请各位哥哥姐姐帮忙修改下错误,小弟确实不知道从哪修改
////////////////////////////////////////////////////////////////////
//函数名:RS232.c //
//函数功能:PC机与单片机通过RS232串口通信 //
//创建日期:2010.04.19 //
//作者:holy //
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//函数功能:PC机发送接受主程序 //
// //
////////////////////////////////////////////////////////////////////
#include
#include
#include
#include
#include
#include
#include
#include
FILE *p;
void unsigned send();
void char rcv();
void unsigned sendgroup();
void unsigned rcvgroup();
time_t T1,T2;
int i,data1[10],data2[10];
unsigned char st,st1,sum,sumi,addr_send,addr_rcv,Head;
main()
{
outportb(0x2FBH,0x80H);
outportb(0x2F8H,0x60H);
outportb(0x2F9H,0x00H);
outportb(0x2FCH,0x00H);
whlie(1)
{
if(kbhit()) exit(0);
sendgroup();
rcvgroup();
}
}
////////////////////////////////////////////////////////////////////
//函数名:send() //
//函数功能:PC机发送一帧数据子程序 //
////////////////////////////////////////////////////////////////////
void unsigned send(char data)
{
T1=time(NULL);
whlie(1)
{
T2=time(NULL);
if(difftime(T2,T1)>=2.00)
{
printf("overtime\n");
exit(0);
}
st=inportb(0x2FDH);
if((st&0x20H)!=0)
{
outportb(0x2F8H,data);
break;
}
else continue;
}
}
////////////////////////////////////////////////////////////////////
//函数名:rcv() //
//函数功能:PC机接受一帧数据子程序 //
////////////////////////////////////////////////////////////////////
void unsigned rcv()
{
T1=time(NULL);
while(1)
{
T2=time(NULL);
if(difftime(T2,T1)>=2.00)
{
printf("overtime\n");
exit(0);
}
st1=inportb(0x2FDH);
if((st1&0x01)!=0)
{
Head=inportb(0x2F8H);
break;
}
}
return(Head);
}
////////////////////////////////////////////////////////////////////
//函数名:sendgroup() //
//函数功能:PC机发送一组数据子程序 //
////////////////////////////////////////////////////////////////////
void unsigned sendgroup()
{
FILE *p;
outportb(0x2FBH,0x2BH);
addr_send=0xF1H;
while(1)
{
if(kbhit()) exit(0);
send(addr_send);
addr_rcv=rcv();
if(addr_rcv=addr_send) break;
}
outportb(0x2FBH,0x3BH);
if((p=fopen("t.txt","r"))==NULL)
{
printf("\n cannot open the file \n");
exit(0);
}
retransmit:
sum=0;
for(i=0;i<=10;i++)
{
data1=fgetc(p);
sum=sum+data1;
send(data1);
}
send(sum);
sumi=rcv();
if(sumi=0)
{
printf("OK!");
fclose(p);
}
else
{
fseek(p,-10L,SEEK_CUR);
goto retransmit;
}
}
////////////////////////////////////////////////////////////////////
//函数名:rcvgroup() //
//函数功能:PC机接受一组数据子程序 //
////////////////////////////////////////////////////////////////////
void unsigned rcvgroup()
{
FILE *p;
outportb(0x2FBH,0x2BH);
addr_send=0xF1H;
while(1)
{
if(kbhit()) exit(0);
send(addr_send);
addr_rcv=rcv();
if(addr_rcv=addr_send) break;
}
outportb(0x2FBH,0x3BH);
if((p=fopen("r.txt","r"))==NULL)
{
printf("\n cannot open the file \n");
exit(0);
}
rereceive:
sum=0;
for(i=0;i<=10;i++)
{
data1p=rcv();
sum=sum+data2;
fprintf(p,"%d",data2);
}
sumi=rcv();
if(sumi=sum)
{
send(0x00H);
printf("OK!");
fclose(p);
}
else
{
send(0xFFH);
fseek(p,-10L,SEEK_CUR);
goto rereceive;
}
}
|
|