打印

求助:请高手帮忙看一下这个双机通信的程序

[复制链接]
1626|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guo9322|  楼主 | 2007-8-25 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
照课本上的例子写的,看了感觉没问题,编译也能通过,下载到单片机上就是不好用.找了很长时间也找不出毛病。
B机(接收)程序:
#include <reg51.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar idata buf[1];
uint pf;
void init1(void)           //串口初始化//
{ TMOD=0x20;
  TH1=0xe8;
  TL1=0xe8;
  PCON=0x00;
  TR1=1;
  SCON=0x50;
}
void receive(uchar idata *d)
{  uchar i;
   do
   {  while(RI==0);
      RI=0;
   }while((SBUF^0xaa)!=0);           //判断A机发送请求//
   SBUF=0xbb;                        //发应答信号//
   while(TI==0); 
   TI=0;       
   while(1)
   {  pf=0;
      for(i=0;i<16;i++)
       { while(RI==0);
         RI=0;
         d=SBUF;          //接收数据//
         pf+=d;           //求校验和//
        }
      while(RI==0);
      RI=0;
      if((SBUF^pf)==0)        //比较校验和//
       { SBUF=0x00;           
          break;
       }
      else 
       { SBUF=0xff;          //出错发FF 重新接收//
         while(TI==0);
         TI=0;
       }
  }
}
void main()
{ init1();
  receive(buf);
   }
A机(发送)程序:
#include <reg51.h>
#include <absacc.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int 
uchar idata buf[1]={0x35};
uchar ab=0;
uint pf;
uchar a,m,p;
void init1(void)           //串口初始化//
{ TMOD=0x20;
  TH1=0xe8;
  TL1=0xe8;
  PCON=0x00;
  TR1=1;
  SCON=0x50;
}
void send(uchar idata *d)
{  uchar i;
   do
   { SBUF=0xaa;              //发送联络信号//
     while(TI==0);           //等待发送成功//
     TI=0;
     while(RI==0);           //等待B机//
     RI=0;
    }while((SBUF^0xbb)!=0);   //B机未准备好,继续联络//
    do
    { pf=0;
      for(i=0;i<16;i++)
       { SBUF=d;            //发送数据//
         pf+=d;
         while(TI==0);
         TI=0;
       }
      SBUF=pf;                 //发送校验和//
      while(TI==0);
      TI=0;
      while(RI==0);
      RI=0;
    }while(SBUF!=0);           //B机回答出错则重发//
}
void main(void)
{ init1();
   send(buf);
}

相关帖子

沙发
liuguobing| | 2007-8-25 17:11 | 只看该作者

re

好久没用51了,都忘了,多机通信你得注意下 TB8,RB8,SM2

使用特权

评论回复
板凳
jianghui88| | 2007-8-26 00:02 | 只看该作者

接收用中断好些

我也做过,当开始不知道用了查询的方式,效果不好,现在用中断的方式,效果好多了,你也可以去试试

使用特权

评论回复
地板
stycx| | 2007-8-26 06:50 | 只看该作者

先与pc机调通了再双机调

使用特权

评论回复
5
guo9322|  楼主 | 2007-8-26 19:58 | 只看该作者

怎么和PC调??

用max电平转换?我这个是近距离的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

33

帖子

0

粉丝