两片单片机的无线传输用NRF905 接收端 发送端 程序分别怎么写 好困惑
软件开发是一项包括计划、分析、设计、编码和测试、维护系统工程。
一、计划
对所要解决的问题进行总体定义,包括了解用户的要求及现实环境,从技术、经济和社会因素等3个方面研究并论证本软件项目的可行性,编写可行性研究报告,探讨解决问题的方案,并对可供使用的资源(如计算机硬件、系统软件、人力等)成本,可取得的效益和开发进度作出估计,制订完成开发任务的实施计划。
二、分析
软件需求分析就是对开发什么样的软件的一个系统的分析与设想。它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。
三、设计
软件设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。可以是一个函数、过程、子程序、一段带有程序说明的独立的程序和数据,也可以是可组合、可分解和可更换的功能单元。
四、编码
软件编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的“源程序清单”。充分了解软件开发语言、工具的特性和编程风格,有助于开发工具的选择以及保证软件产品的开发质量。
五、测试
软件测试的目的是以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例(测试数据与功能和预期的输出结果组成了测试用例)。
六、维护
维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。
扩展资料:软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。
软件分为系统软件和应用软件,并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。
参考资料来源:百度百科-软件开发
中国现在软件领域主流主要是这几大领域的开发
1系统应用和硬件应用
2WEB网站
3行业应用,包括C/S模式,也包括B/S模式
我为什么把系统应用和硬件应用放在了一起,这是因为这两者都是比较在深层次上开发。
系统应用,如防火墙、杀毒、杀木马、BT下载等等,我的机器上有一大半都是这种软件。
其实游戏也算一类系统应用,为什么?因为游戏开发,是网络技术、集群技术、安全技术、图形计算技术、人工智能技术有深度综合考验的软件,对CPU、内存、显卡、网络性能有严重考验的应用。
硬件应用:在工业控制、交通、汽车、医疗、
数码相机、数码摄像机、摄像头、MP3、DVD、数字电视、洗衣机、冰箱、空调、微波炉、电饭煲、U盘、手机底层
这些都是属于硬件应用范畴
而开发这类应用,C是主流。为什么C是主流?因为各种底层驱动、内核都是用C编写的,而且与硬件应用编程,往往是用对应该硬件的汇编,C是最接近汇编并且和汇编有良好交互的开发语言,当然非C莫属
看看,C的应用领域有多广。
再说,现在的视频播放、IPTV、3G应用,几乎也都是C大显身手的领域。假如你想投身这些行业,C是必选。
接下来,咱们看看WEB网站领域。
现在以及未来,WEB一定会越来越大行其道。这是毫无疑问的。现在主流WEB网站开发,主要是JSP、ASP、ASPX、PHP、Ruby、Python、 Perl这几类,Python、Perl这两类会少一些。所以说,假如你想投身于WEB网站的开发,JSP、ASP、ASPX、PHP这几类必须都学会。为什么要学习这么多,因为现在开发网站,用这几类技术公司都差不多一样多,假如你想找工作或跳槽,不抵会碰到哪个开发语言。其实,这几类服务器端语言都挺好学。一个WEB应用,不外乎是服务器端语言 数据库访问 HTML CSS JS,数据库访问是考验你对SQL的学习,WEB网站,主流是MYSQL、 ORACLE、SQLSERVER这三类,HTML CSS JS,无论你用什么服务器端语言都是这些公用的。很多同学问怎么能快速学习呢?我给他们的建议是:下载一个完整网站的源代码,看看里面用到了什么函数。很多网站的功能都是很雷同的,你会很快提高你的自信,对WEB网站开发不会感到茫然无措。其实技术没什么难的。假如你一上来就学习设计模式、OO、某个框架,反射技术,你会越来越陷入到技术深渊而惧怕。其实在实际商业开发中也用不到
行业领域,现在既有B/S的,也有C/S的。
现在B/S的行业应用,主流开发是JAVA和ASPX,上面咱们都讲了
C/S的,就又分了两个分支来说。有的公司跟风,用了.net C#或VB.net。大部分则现在还停留在win32的时代,用PB、DELPHI的公司最多。中国大部分公司都是开发行业应用软件,所以这类程序员最多。
我曾经给同学们回信,也曾这么写过。但是又有不少同学回信,说你说了这么多技术,怎么学啊。我现在也不知道能进入什么公司,不至于我,C、PB、DELPHI、PHP、JAVA、MYSQL、ORACLE、SQLSERVER都学吧?
这样吧,经过我个人的一些从业经历,笔者给出的拙见是:
C、JAVA你肯定是必学的,而且现在大学也几乎开了这两门课
数据库方面嘛,ORACLE难一些,你可以学习SQLSERVER,因为MYSQL的使用和SQLSERVER很相似
WEB开发吗,你学会了JAVA,PHP很好学。PHP比JAVA轻易多了。
在行业应用开发上,你可以学习DELPHI,PB现在用的人少了些。
当然,现在有一个痛苦,就是ASPX和C#学不学?因为用这两种的公司也非常多。学吧,上面那些学习项目已经够多,不学吧,这类公司也挺多。假如你觉得你进入网站公司的综合能力不足,那么就不要学习JAVA和PHP,找工作你就去做行业应用的公司,那么你就需要学习ASPX和C#。
最后总结:
基础学习:C、JAVA、SQLSERVER
走系统应用和硬件应用:C
走网站开发:PHP
走行业应用:DELPHI、ASPX、C#
从中国未来来看,赚钱多的还是会集中在系统应用和硬件应用上,网站开发最近的薪资不错,但未来会下降,行业应用则薪资上不到哪里去。假如各位同学不怕艰难,不怕一条道走到黑,专心学习C就OK,只要你学精,很好找工作的。假如你怕专心学后找不到工作,然后又什么都涉猎,那么你找不到工作的可能性更大
网友回复:支持一个
网友回复:一楼说得很具体了
网友回复: 一楼说的确实很具体了,谢谢啊!要是能推荐几本书就更好了啊
网友回复:看看《代码大全》吧
网友回复:强烈建议楼主一定学好C基础,有了好的基础学JAVA,.NET都很轻易
我是一开始接触JAVA,现在因为一些工作原因回过头来学C,个人的真实感觉是其实学好了C学别的语言都应该很轻易了,所以基础一定要打好!
NRF905的程序中只有nRF905Init();Config905();RX(); 前两个初始化,后个传输函数,执行后在TRXBUF数组中会有相应的值。以下是接收的主函数,这是控制电机左右转动的程序。(小车部分)
void main(void)
{
nRF905Init();
Config905();
while(1)
{
RX();
if(TxRxBuf[0]==0x11){in1=1;in2=0;in5=1;in6=0;}//从左往右
if(TxRxBuf[1]==0x11){in3=1;in4=0;in7=1;in8=0;}//从右往左
if(TxRxBuf[0]==0x22){in1=1;in2=1;in5=1;in6=1;}//从左往右
if(TxRxBuf[1]==0x22){in3=1;in4=1;in7=1;in8=1;}//从右往左
in1=1;in2=0;
}
}
遥控部分:就俩按键 一个做转一个右转 这是无线遥控小车的遥控部分。
void main(void)
{
nRF905Init();
Config905();
while(1)
{
if(KEY0 ==0){TxRxBuf[0]=0x11;}
if(KEY0 ==1){TxRxBuf[0]=0x22;}
if(KEY1 ==0){TxRxBuf[1]=0x11;}
if(KEY1 ==1){TxRxBuf[1]=0x22;}
SetTxMode();// Set nRF905 in Tx mode
TxPacket(TxRxBuf);// Send data by nRF905
}
}
那么在设置上:就按以下设置:
#include <reg52.h>
#include <ABSACC.h>
#include <intrins.h>
#include <stdio.h>
//----------------------------------------------------------------------------------------------------------------
#define uint unsigned int
#define uchar unsigned char
//----------------------------------------------------------------------------------------------------------------
#define BYTE_BIT0 0x01
#define BYTE_BIT1 0x02
#define BYTE_BIT2 0x04
#define BYTE_BIT3 0x08
#define BYTE_BIT4 0x10
#define BYTE_BIT5 0x20
#define BYTE_BIT6 0x40
#define BYTE_BIT7 0x80
//----------------------------------------------------------------------------------------------------------------
bdata unsigned char DATA_BUF;
#define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
#define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)
sbit flag =DATA_BUF^7;
sbit flag1 =DATA_BUF^0;
//---------------------------------------------------发送数据缓冲区-------------------------------------------------
#define TxRxBuf_Len 4
unsigned char TxRxBuf[TxRxBuf_Len]=
{
0x29,0x30,0x31,0x32,
};
//----------------------------------------------NRF905控制IO------------------------------------------------------
sbit TXEN=P1^0;
sbit TRX_CE=P3^2;
sbit PWR=P1^1;
//----------------------------------------------NRF905 SPI接口---------------------------------------------------
sbit MISO=P1^6;
sbit MOSI=P1^5;
sbit SCK=P1^7;
sbit CSN=P1^3;
//----------------------------------------nrf905状态标志---------------------------------------------------------
sbit AM=P1^4;
sbit DR=P3^3;
sbit CD=P1^2;
//---------------------------------------------------------------------------------------------------------------
sbit led3=P2^0;
sbit led2=P2^1;
sbit led1=P2^2;
sbit led0=P2^3;
//--------------------------------------------------------------------------------------------------------------
sbit KEY0=P3^6;
sbit KEY1=P3^7;
//--------------------------------------------------------------------------------
sbit BELL=P3^4;
//-----------------------------------------------------------------------------------------------------------------
uchar seg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0~~9段码
//-------------------------------------------------------nrf905控制指令-------------------------------------------
#define WC 0x00
#define RC 0x10
#define WTP 0x20
#define RTP 0x21
#define WTA 0x22
#define RTA 0x23
#define RRP 0x24
//------------------------------------------------NRF905寄存器配置------------------------------------------------
unsigned char idata RFConf[11]=
{
0x00, //配置命令//
0x4c, //CH_NO,配置频段在430MHZ
0x0c, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x04,0x04, //接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
char tf;
//------------------------------------------------延时------------------------------------------------------------
static void Delay(uchar n)
{
uint i;
while(n--)
for(i=0;i<80;i++);
}
//---------------------------------------------------SPI读函数-----------------------------------------------------
unsigned char SpiRead(void)
{
unsigned char j;
for (j=0;j<8;j++)
{
DATA_BUF=DATA_BUF<<1;
SCK=1;
if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BYTE_BIT0;
}
else
{
DATA_BUF&=~BYTE_BIT0;
}
SCK=0;
}
return DATA_BUF;
}
//-------------------------------------------------SPI写函数----------------------------------------------------------
void SpiWrite(unsigned char send)
{
unsigned char i;
DATA_BUF=send;
for (i=0;i<8;i++)
{
if (DATA7) //总是发送最高位
{
MOSI=1;
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
//------------------------------------------------------初始化nRF905---------------------------------------------
void nRF905Init(void)
{
CSN=1; // Spi disable
SCK=0; // Spi clock line init low
DR=0; // Init DR for input
AM=0; // Init AM for input
CD=0; // Init CD for input
PWR=1; // nRF905 power on
TRX_CE=0; // Set nRF905 in standby mode
TXEN=0; // set radio in Rx mode
}
//-----------------------------------------------------初始化寄存器-----------------------------------------------
void Config905(void)
{
uchar i;
CSN=0; // Spi enable for write a spi command
//SpiWrite(WC); // Write config command写放配置命令
for (i=0;i<11;i++) // Write configration words 写放配置字
{
SpiWrite(RFConf[i]);
}
CSN=1; // Disable Spi
}
//-----------------------------------------------------发送数据打包---------------------------------------------------
void TxPacket(uchar *TxRxBuf)
{
uchar i;
//Config905();
CSN=0;
SpiWrite(WTP); // Write payload command
for (i=0;i<4;i++)
{
SpiWrite(TxRxBuf[i]); // Write 32 bytes Tx data
}// Spi enable for write a spi command
CSN=1;
Delay(1); // Spi disable
CSN=0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(TxAddress[i]);
}
CSN=1; // Spi disable
TRX_CE=1; // Set TRX_CE high,start Tx data transmission
Delay(1); // while (DR!=1);
TRX_CE=0; // Set TRX_CE low
}
//----------------------------------------------------------设置发送状态---------------------------------------------
void SetTxMode(void)
{
TRX_CE=0;
TXEN=1;
Delay(1); // delay for mode change(>=650us)
}
//-----------------------------------------------设置发送状态---------------------------------------------------
void SetRxMode(void)
{
TXEN=0;
TRX_CE=1;
Delay(1); // delay for mode change(>=650us)
}
//-------------------------------------------------判断数据接收状态-----------------------------------------------------
unsigned char CheckDR(void) //检查是否有新数据传入 Data Ready
{
if (DR=1&&TRX_CE==1 && TXEN==0)
{
// Delay(50) ;
return 1;
}
else
{
return 0;
}
}
//----------------------------------------------------读NRF905接收数据------------------------------------------------------------
void RxPacket(void)
{
uchar i;
Delay(1);
// TRX_CE=0; // Set nRF905 in standby mode
Delay(100);
TRX_CE=0;
CSN=0; // Spi enable for write a spi command
Delay(1);
SpiWrite(RRP);
for (i = 0 ;i < 4 ;i++)
{
TxRxBuf[i]=SpiRead(); // Read data and save to buffer
}
CSN=1;
Delay(10);
TRX_CE=1;
}
//--------------------------------------------------------数据接收------------------------------------------------
void RX(void)
{
SetRxMode(); // Set nRF905 in Rx mode
while (CheckDR()==0);
Delay(10);
RxPacket();
}
这些是子函数。只要把一些关于电机的sbit定义去掉,剩下的就是真正的子函数了。
那么,需注意的就只有nRF905Init();Config905();RX(); SetTxMode();和一个TXbuf数组,把这几个用好了,程序就跳出来了。nRF905Init();Config905();收发都需要,SetTxMode();发送要,RX(); 接收要。就是这样了,最起码我看是这样。
这种无线收发模块用起来就是跟串口通信一样的,因为你需要处理的仅仅是单片记得UART端口而已。网上随便找个你用的单片及UART驱动代码看看改改就好。关键的是通信协议的编写,这个你从没做过的话可能不好处理,有时间的话建议你看看简单的modbus协议代码,好理解通信究竟是怎么个过程
双方都处于接收状态,
一方发起通讯,这个时候要发个自己设定的字符串作为数据包头
另一方收到就知道后面大小、让谁收(因为假设可以多机通讯)等信息
当发送方发完要有个设定的结束字符串,让接收方知道传送完了,同时转为接收状态
接收方收完数据,进行一下校验,没问题该干嘛干嘛去,有问题向发送方要求重传
以上是一个简单的通讯流程。
两个单片机之间的无线传输
选择通讯模块完成传输 1:用rf905进行数据传输,两块单片机都通过串口将数据发送给905,然后通过905发送出去。2:用PT2262发也可以,如果你不考虑成本的话,你可以用51的一个端口控制一个继电器当按键用 建议nrf24l01这个模块,spi协议,程序不是很难写 ...
向实现单片机之间的远距离无线通讯,该如何选择
建议:如果只是做单纯的无线数据传输,距离又不要多远,可以选择zigbee、lora、或相关sub-1G频段做数据透传;如果需要接入手机做单点数据传输,可以选择2G\/3G\/4G\/NB-IoT做无线通讯,不过会涉及到费用和产品应用的地方是否有运营商的基站;如果做多点数据互动式传输,还得接入手机端,又考虑费用问题,可以本...
我有一个单片机是USB的数据,怎么实现无线传输,传到电脑上的数据与有...
无线传输;首先你必须要了解单片机通过USB传输的数据的协议,数据是怎样发到电脑的USB,然后根据协议在自己设计无线传输方式。可以是红外,这个比较简单,传输距离大概就几米的样子。还可以使用一些无线芯片,24L01等,传输距离几十米到百米的样子,当然,最复杂的还是协议要必须吃透。还要考虑到数据的时效性等...
单片机如何将数据或指令远距离传输
1.用单片机采样温度,再传给一台电脑A,连接inter网;另一台电脑B在万公里以外通过inter网也能准确无误地收到A电脑的数据.2.可以用无线传输,架一个无线台,把温度信号传给单片机A;自己做一个传输协议,通过单片机A传给无线发射装置;另外一边做一台无线接收的装置,把接收到的信号用单片机B根据协议解码出来...
短距离无线通信详解:基于单片机控制内容简介
本文主要聚焦于短距离无线通信的实际应用,特别强调了基于单片机的控制方式。文章从基础出发,详细讲解了无线芯片的初始化过程,包括如何简单地进行无线数据的收发,以及如何通过双向传输实现无线绑定。特别关注的是无线通信的可靠性和模块设计的关键点。作者深入浅出地探讨了无线通信在实际操作和开发中的实用技巧...
关于单片机无线传输的问题
是不是电平不匹配?一般单片机和串口连接要用个转换电路如MAX232,再说了315模块的话你要用2组啊?如果一组只是个发射,PC端估计没有接受回应的信号了~但两组的话你就要考虑编码的问题了,否则很容易就会造成两个信号干扰
单片机如何跟电脑实现无线传输数据
这与电脑和单片机有线通信是同一个原理,只是增加了无线调制发送和接收。传输协议和波特率没有改变。市面应该有这类发射和接收模块。如果买不到,也可以自己做,但这就需要较高的电路水平才可以做到,涉及到调制解调,无线电的发射和接收电路,发射频率的选择,再加上单片机和电脑的通信程序编写,一个人...
简述下 单片机+射频芯片实现无线通信
单片机控制射频芯片的运行,即单片机设定射频芯片的工作方式之后,就可以使用射频芯片收发数据了。无线数据的收发由射频芯片完成,不需要单片机干预。如果只有两个设备进行点对点的数据交换,那可以不需要任何协议;但是有多个设备要同时交换数据,那就必须要要协议来处理交换的过程,否则就会出错。以上的内容是我...
想实现电脑与单片机之间的无线数据传输,请教各位大虾,应该采用什么方法...
蓝牙,红外,在就是自己弄一套,就是你写一个上位机然后在通过232和无限传输到单片机 上位机---232---ecu---无线传输模块---无限模块---单片机
简述下 单片机+射频芯片实现无线通信
现在高级的射频芯片就是一片收,发合一的 RF无线电收发机,例如 cc2420 ,它符合IEEE802.15.4标准规定的调制解调协议.使用时:可以通过4线SPI总线(SI、SO、SCLK、CSn)设置芯片的工作模式 并实现读\/写缓存数据 读\/写状态寄存器等。通过控制FIFO和FIFOP管脚接口的状态可设置发射\/接收缓存器 要发送和接收...
殷虹山庄: 选择通讯模块完成传输1:用rf905进行数据传输,两块单片机都通过串口将数据发送给905,然后通过905发送出去.2:用PT2262发也可以,如果你不考虑成本的话,你可以用51的一个端口控制一个继电器当按键用 建议nrf24l01这个模块,spi协议,程序不是很难写
杏花岭区17651809656: 请问,两块nrf905芯片怎样实现通信的,要是用nrf905驱动单片机工作,具体过程又是怎样的呢 - ?
殷虹山庄: 首先,你需要两个nrf905芯片,一个用来发送消息一个用来接收.需要用单片机控制.具体过程就是与单片机连好后,在单片机中写代码,发射端跟接收端的代码当然不一样.具体要实现什么功能那就看你的代码了.
杏花岭区17651809656: 两个单片机之间的无线传输?
殷虹山庄: 用rf905进行数据传输,两块单片机都通过串口将数据发送给905,然后通过905发送出去.
杏花岭区17651809656: 有无线的方式在两个51单片机之间传输数据 - ?
殷虹山庄: 我的毕业设计就是单片机无线传输的 用的是nrf905,PTR8000,无线模块 除了无线模块之外,还设计12864液晶显示,键盘扫描模块,还有串口模块等.发送模块:http://www.shenzhenwangzhanyouhua.com/seo/nrf905.html 接收模块:http://www.shenzhenwangzhanyouhua.com/seo/nrf905-receivecode.html 欢迎访问我的单片机与嵌入式博客:
杏花岭区17651809656: 关于51单片机与单片机通过315M无线模块实现双机通信问题 - ?
殷虹山庄: 2262和2272是单向通信的,不能双向传输数据,因此,也无法实现反馈.如果要实现反馈,有三个建议:一、在发送和接收端各安装一片2262和2272,也就是说,一共要有2片2262、2片2272,用2272来收数据,再用2262发出一组编码来做反馈.二、用单片机程序来模拟2262和2272,这样可以省掉两个芯片.模拟2262和2272的程序在网上能够找到.三、使用nRF905这样的数传模块,可以很容易实现双向通信.以上建议仅供参考.如果要详细的,可以发站内信加QQ详谈.
杏花岭区17651809656: 51单片机如何通过315M超再生模块实现无线传输. - ?
殷虹山庄: 1、关于315M无线模块,一般是一个串行的DATA口,超再生接收模块也是这样一个DATA数据口,不过两者对通信数据(理解为通信波形)不是一致的,像你直接使用串行口的话很难或者说基本不可能做到,数据的一致.也就是你串口设置不...
杏花岭区17651809656: 单片机与无线信号如何接口 - ?
殷虹山庄: 直接与射频信号交换数据的话,单片机肯定没那个本事了,需要借助成型的模块,把数字信号经过编码调制之后发射出去,另外一边接收过来无线信号,经过解码变成数字信号后送给单片机.成型的模块很多,数据率、功率、工作频段都不一样,价格几十到几千,你可以找一些相关文章看看.
杏花岭区17651809656: NRF905怎么与51单片机连接 - ?
殷虹山庄: 在发送端时,数据打包发送完毕(打包也就是加入前导和校验码),CD置位;在接收端,监测到载波CD置位,(同学CD就是carry 波,英语学的不大好,波的英语忘记了),当检测到地址时,还是正确的接受地址,那么AM(AM就是adress什么什么的)置位,至于DR不是被单片机读出才置位的,而是发送的数据被打包,就是加了好多像前导、校验码之类的东东,所以接收时还要nrf905来解包,905解包成功就可以被单片机读取了,那么这时DR置位.3.3v的电压用LM117-3.3就可以.
杏花岭区17651809656: 如果要做基于51单片机和nRF905的无线传输系统的实物,都需要什么器件,具体点,谢谢! - ?
殷虹山庄: 那要看你具体要控制什么了,只需要一对51单片机和一对905的模块就可以编写程序正常工作.你可以根据收到的信号不同选择控制你的外设
杏花岭区17651809656: 单片机通过nrf905实现无线多点传送.这个要怎么弄. - ?
殷虹山庄: 所谓主机就是他是司令只有他才能主动发号施令,所谓从机就是只能根据指令执行任务!所以你主机和从机的概念都没有搞明白,如果一个网络中有一个是主机的话,那么只有主机询问到从机的时候从机才能应答,否则从机不能主动发送数据,否则岂不是乱套了!所以,道理很简单,主机一个一个的问,从机一个一个的回!