• 大小: 29KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: 其他
  • 标签: 多机通信  

资源简介

包含源程序及proteus仿真;通过主机扫描键盘,捕获要发送的数据,再有按键选下目的从机,然后两机握手,收发数据

资源截图

代码片段和文件信息

//接收数据头文件定义:

//#ifndef _receive_data_h     //防止_receive_data_h被重复引用
//#define _receive_data_h //包含头文件
#include
#include               
#define uchar unsigned char
#define uint  unsigned int
uchar buf;
uchar addrtmp;
sbit P23=P2^3;   //引脚控制二极管
//#endif


//接收数据程序:

//#include
/******************延时t毫秒***********************/
 
 void delayXms(uint t)    //延时X毫秒子程序
 {
   uint ij;
   for(i=0;i     for(j=0;j<125;j++)  ;
 }

/*******************接收数据函数************************/

uchar recvdata()
{
  while(!RI);
  if(RB8==1)
  return  0xee; //若接收到的为地址指针,则返回0xee
  buf=SBUF;
  RI=0;
  return 0; //返回0
}

/*********************串口初始化*********************/

void init()
{
  TMOD=0x20;
  TH1=250;
  TL1=250; //波特率9600kb/s
  TR1=1;
  PCON=0x80; //SMOD=1
  SCON=0xd0; //工作方式,9位数据,允许接受数据
}

/*********************主程序*********************/

void main()
{
  uchar tmp=0xff;
  P1=0xff;
  addr=P1&0x0f;    //获取本机地址
  P23=1;    //发光二极管不亮
  init();    //串口初始化
  EA=0;    //关闭中断
  while(1)    //进入设备应答
  {
   SM2=1;   //只接收地址帧
while(tmp!=addr)   //如果接收到的地址帧不是本机的,则继续等待
{   
  RI=0;   
  while(!RI)
  tmp=SBUF;
  RI=0;
}
SM2=0; //允许数据接收
tmp=recvdata(); //数据接收
if(tmp==0x00)
{
  P0=buf;
  P23=0; //绿灯亮,持续500ms,表示数据接收成功
  delayXms(30);
  P23=1;
}    //如果接收数据时发现地址帧,则重新开始整个过程
  }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     159063  2010-08-03 23:42  多机通信电路.DSN

     文件       1641  2010-08-02 20:47  多机通信电路(从机1).c

     文件        472  2010-08-02 20:47  多机通信电路(从机1).hex

     文件       3539  2010-08-03 23:38  多机通信电路(主机).c

     文件       1590  2010-08-02 22:17  多机通信电路(主机).hex

     文件       5065  2010-08-02 21:11  多机通信电路.txt

----------- ---------  ---------- -----  ----

               171370                    6


评论

共有 条评论