首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

PC机与单片机通过RS232串口通信,请各位哥哥姐姐帮忙修改下异常,小弟确实不知道从哪修改

2012-02-02 
PC机与单片机通过RS232串口通信,请各位哥哥姐姐帮忙修改下错误,小弟确实不知道从哪修改下面是一个PC机与单

PC机与单片机通过RS232串口通信,请各位哥哥姐姐帮忙修改下错误,小弟确实不知道从哪修改
下面是一个PC机与单片机通过RS232串口通信,PC机上C程序(对8250的初始化,PC机发送接受程序)
请各位哥哥姐姐帮忙修改下错误,小弟确实不知道从哪修改


////////////////////////////////////////////////////////////////////
//函数名:RS232.c //
//函数功能:PC机与单片机通过RS232串口通信 //
//创建日期:2010.04.19 //
//作者:holy //
////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////
//函数功能:PC机发送接受主程序 //
// //
////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<dos.h>
#include<dir.h>
#include<string.h>
#include<conio.h>
#include<alloc.h>
#include<time.h>
#include<ctype.h>

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[i]=fgetc(p);
sum=sum+data1[i];
send(data1[i]);
}
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[i]=rcv();
sum=sum+data2[i];
fprintf(p,"%d",data2[i]);
}
sumi=rcv();
if(sumi=sum)
{
send(0x00H);
printf("OK!");
fclose(p);
}
else
{
send(0xFFH);
fseek(p,-10L,SEEK_CUR);
goto rereceive;
}
}


[解决办法]
什么现象? 编译通不过?
[解决办法]
恩,调程序的特别细心

热点排行