新手入门
- 积分
- 3
- 金钱
- 3
- 注册时间
- 2016-3-28
- 在线时间
- 0 小时
|
6金钱
本帖最后由 程序不写注释 于 2016-3-28 15:48 编辑
目前在调一个智能家居方面的模块,主要就是从插座这里反馈环境数据 插座有没有通电 时间等等之类的数据给接收方,接收方使用串口与PC通信。
目前只需要用到两个zigbee,一个是协调器,也就是与PC通信的那个,用于接收插座发过来的数据以及从PC发送指令给插座;
另一个插座,设置为路由器,可以单片机采集各种数据然后通过串口zigbee发送给协调器。
目前是这样的情况,路由器通过PC监测可以发现PC串口与给zigbee串口的数据转发是正确的,可以发送多字节并且数据正确,协调器的PC串口与zigbee直接相接,PC给的数据直接给zigbee不用内部再转发。
以下是路由器的串口部分:
void Uart1_send(uchar temp)//串口1发送函数
{
SBUF=temp;
while(TI==0);
TI=0;
}
void Uart2_send(uchar temp)//串口2发送函数
{
S2BUF=temp;
while((S2CON & 0x02)==0);
S2CON&=0xfd;
}
void Isr_Uart1 (void) interrupt 4 //串口1中断程序
{
uchar temp;
if (RI == 1)//接收到PC发来的数据
{
RI = 0 ;
temp = SBUF ;
S2BUF = temp ;//转发至串口2路由ZigBee
}
if (TI == 1)//发送中断
{
TI = 0 ;
}
}
void Isr_Uart2 ( void ) interrupt 8
{
uchar temp;
if ( S2CON & 0x01 ) //S2RI==1
{
S2CON &= 0xfe;
temp = S2BUF ;
SBUF = temp ;//转发至串口1C用于监测
}
if ( S2CON & 0x02 ) //S2TI==1
{
S2CON &= 0xfd;
}
}
以下是协调器的串口部分:
void Uart1_send(uchar temp)//发送数据给PC,监测从PC接收到的数据是否与PC输入数据一致
{
SBUF=temp;
while(TI==0);
TI=0;
}
void Isr_Uart1 (void) interrupt 4 //串口1中断程序 该串口与zigbee和PC相连
{
uchar temp;
if (RI == 1) //数据接收 协调器zigbee通过串口1从PC接收到要发送的指令
{
RI = 0 ;
temp = SBUF ;
Uart1_send(temp); //调试用,监测数据
}
if (TI == 1)//数据传送 协调器zigbee接收到路由发送的数据并发送到PC显示
{
TI = 0 ;
}
}
以下是相互收发从PC上监测的数据:串口4连的是路由 发送为点对点传输模式 数据:0XFD(点对点传输模式指令) 0X01(发送的数据长度) 0X00 0X00(这两个字节为目的地址 即协调器地址) 0X00 (要传送的数据)
串口5连的是协调器 发送为点对点传输模式 数据:0XFD(点对点传输模式指令) 0X01(发送的数据长度) 0X00 0X01(这两个字节为目的地址 即路由器地址) 0X00 (要传送的数据)
不解的是在电脑上调试的时候从PC串口转发到zigbee串口数据是完全正确的 但是zigbee互发之后不仅没传输正确 PC监测到的数据也不正确了
求大神解答~不胜感激~
|
-
-
|