OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5414|回复: 1

求助两个单片机之间用zigbee收发的乱码问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-3-28
在线时间
0 小时
发表于 2016-3-28 15:46:11 | 显示全部楼层 |阅读模式
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监测到的数据也不正确了
求大神解答~不胜感激~


搜狗截图16年03月28日1537_1.png
搜狗截图16年03月28日1538_2.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-3-29 21:47:14 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 10:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表