3427|5

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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;
        }
}

最新回复

恩,调程序的特别细心  详情 回复 发表于 2010-4-24 15:14
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
小弟邮箱:honglin18x@163.com
万分感谢!
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
什么现象? 编译通不过?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢 xmjulytiger
已经搞定了!
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
while -->whlie  太粗心了,还有一些细节问题没注意
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
恩,调程序的特别细心
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表