ZigBee 点对点无线通信
2011-07-21 11:31
295 查看
先从主函数开始
void main(void)
{
SET_MAIN_CLOCK_SOURCE(CRYSTAL); //选择32M晶振
//RFPWR.RREG_RADIO_PD位清零,
//打开模拟稳压器对无线电供电
//同时电源延迟250us
RFPWR = 0x04;
while(RFPWR & 0x10);//等待稳压器的稳定
initUART(); //初始化串口
IO_DIR_PORT_PIN(0,5,IO_OUT);//以下三条
IO_DIR_PORT_PIN(1,3,IO_OUT);//设置IO口
IO_DIR_PORT_PIN(1,2,IO_IN);
P0_5 = 1;
P1_3 = 0;
rf_test_main(); //进入无线程序
}
串口初始化
void initUART(void)
{
// Setup for UART0
IO_PER_LOC_UART0_AT_PORT0_PIN2345(); //设置UART0的I/O口位置,选择位置1
SET_MAIN_CLOCK_SOURCE(CRYSTAL); //设置时钟晶振资源
//设置UART参数,使用UART0,19200bps,U0UCR设为0x02,快速传输,奇偶校验位禁止
UART_SETUP(0, 19200, HIGH_STOP);
U0CSR = 0xc0; //选择UART模式,允许接收
U0UCR = 0x02; //低起始位,高结束位
UTX0IF = 1; //UART0等待中断
IEN0|=0x04;//开中断
}
初始化RF
void initRfTest(void)
radioInit(frequency, myAddr); //频率,地址
发送函数
void contionuousMode(void) //和没用串口的时候基本相同
接收函数
void receiveMode(void)
{
BYTE* receiveBuffer;
BYTE length;
BYTE res;
BYTE sender;
while(1)
{
// YLED = LED_ON;
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);
// YLED = LED_OFF;
if(res == TRUE)
{
GLED = LED_ON;
UART0_SEND_PC(receiveBuffer); //用串口0发送接收到的数据
// IEN0&=0XFB;
halWait(200);
}
else
{
GLED = LED_OFF;
halWait(200);
}
GLED = LED_OFF;
}
}
总体相对于点对点,只是加了个串口发送程序
void UART0_SEND_PC(BYTE* receive_data)
{
BYTE i;
for(i=0;i<50;i++)
{
U0DBUF =* receive_data;
receive_data ++;
// while(~ (U0CSR & 0x02));
halWait(1);
}
}
点对多点建立在点对点__UART的基础上,将两个节点的频率设置为不同的两个,
通过一个while程序来依次读取。
while(1)
{
//交替读取两个节点的数据
Receivesel = (Receivesel+1)%3;//自动切换信道
if(Receivesel ==0) Receivesel = 1;
TryToReceive = TRY_TO_RECEIVE;
if(Receivesel==1) frequency = NO_1_FREQUENCY;
if(Receivesel==2) frequency = NO_2_FREQUENCY;
initRfTest(frequency);
receiveMode();
}
void contionuousMode(void)
发送程序与点对点程序基本相同
while(TryToReceive--)
{
RLED = LED_OFF;
YLED = LED_OFF;
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);
if(res == TRUE)
{
//UartTX_Send_String((char*)receiveBuffer,21);
if(frequency == NO_1_FREQUENCY)
{
Print(2,2,receiveBuffer,1);
YLED = LED_ON;//接收成功的标志
}
if(frequency == NO_2_FREQUENCY)
{
Print(5,2,receiveBuffer,1);
RLED = LED_ON;//接收成功的标志
}
halWait(200);
return;
}
else
{
YLED = LED_OFF;
halWait(200);
}
YLED = LED_OFF;
}
return;
}
接收程序通过频率的不同来区分是来自哪一个节点发送来的数据。
然后通过液晶显示。
此程序中运用液晶显示。
引自:
http://hi.baidu.com/sendoc/blog/item/ac923500ccc8ed1f728b65a2.html
void main(void)
{
SET_MAIN_CLOCK_SOURCE(CRYSTAL); //选择32M晶振
//RFPWR.RREG_RADIO_PD位清零,
//打开模拟稳压器对无线电供电
//同时电源延迟250us
RFPWR = 0x04;
while(RFPWR & 0x10);//等待稳压器的稳定
initUART(); //初始化串口
IO_DIR_PORT_PIN(0,5,IO_OUT);//以下三条
IO_DIR_PORT_PIN(1,3,IO_OUT);//设置IO口
IO_DIR_PORT_PIN(1,2,IO_IN);
P0_5 = 1;
P1_3 = 0;
rf_test_main(); //进入无线程序
}
串口初始化
void initUART(void)
{
// Setup for UART0
IO_PER_LOC_UART0_AT_PORT0_PIN2345(); //设置UART0的I/O口位置,选择位置1
SET_MAIN_CLOCK_SOURCE(CRYSTAL); //设置时钟晶振资源
//设置UART参数,使用UART0,19200bps,U0UCR设为0x02,快速传输,奇偶校验位禁止
UART_SETUP(0, 19200, HIGH_STOP);
U0CSR = 0xc0; //选择UART模式,允许接收
U0UCR = 0x02; //低起始位,高结束位
UTX0IF = 1; //UART0等待中断
IEN0|=0x04;//开中断
}
初始化RF
void initRfTest(void)
radioInit(frequency, myAddr); //频率,地址
发送函数
void contionuousMode(void) //和没用串口的时候基本相同
接收函数
void receiveMode(void)
{
BYTE* receiveBuffer;
BYTE length;
BYTE res;
BYTE sender;
while(1)
{
// YLED = LED_ON;
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);
// YLED = LED_OFF;
if(res == TRUE)
{
GLED = LED_ON;
UART0_SEND_PC(receiveBuffer); //用串口0发送接收到的数据
// IEN0&=0XFB;
halWait(200);
}
else
{
GLED = LED_OFF;
halWait(200);
}
GLED = LED_OFF;
}
}
总体相对于点对点,只是加了个串口发送程序
void UART0_SEND_PC(BYTE* receive_data)
{
BYTE i;
for(i=0;i<50;i++)
{
U0DBUF =* receive_data;
receive_data ++;
// while(~ (U0CSR & 0x02));
halWait(1);
}
}
点对多点建立在点对点__UART的基础上,将两个节点的频率设置为不同的两个,
通过一个while程序来依次读取。
while(1)
{
//交替读取两个节点的数据
Receivesel = (Receivesel+1)%3;//自动切换信道
if(Receivesel ==0) Receivesel = 1;
TryToReceive = TRY_TO_RECEIVE;
if(Receivesel==1) frequency = NO_1_FREQUENCY;
if(Receivesel==2) frequency = NO_2_FREQUENCY;
initRfTest(frequency);
receiveMode();
}
void contionuousMode(void)
发送程序与点对点程序基本相同
while(TryToReceive--)
{
RLED = LED_OFF;
YLED = LED_OFF;
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);
if(res == TRUE)
{
//UartTX_Send_String((char*)receiveBuffer,21);
if(frequency == NO_1_FREQUENCY)
{
Print(2,2,receiveBuffer,1);
YLED = LED_ON;//接收成功的标志
}
if(frequency == NO_2_FREQUENCY)
{
Print(5,2,receiveBuffer,1);
RLED = LED_ON;//接收成功的标志
}
halWait(200);
return;
}
else
{
YLED = LED_OFF;
halWait(200);
}
YLED = LED_OFF;
}
return;
}
接收程序通过频率的不同来区分是来自哪一个节点发送来的数据。
然后通过液晶显示。
此程序中运用液晶显示。
引自:
http://hi.baidu.com/sendoc/blog/item/ac923500ccc8ed1f728b65a2.html
相关文章推荐
- [ZigBee] 14、Zigbee无线通信前奏——BasicRF 简单无线点对点传输协议
- 无线通信知识————Zigbee技术
- ZStack间接panid通信设置(将zigbee改装成点对点通信的方法)
- 嵌入式linux和iphone实现无线网卡点对点通信
- 大三下------无线通信实习-----基于zigbee的无线光强检测系统
- ZigBee-短距离无线通信技术
- 大三下------无线通信实习-----基于zigbee的无线电阻检测系统
- 基于ZigBee的短距离无线通信网络技术
- 无线通信原理及协议栈(ZigBee、蓝牙等)解析
- ZStack间接panid通信设置(将zigbee改装成点对点通信的方法)
- 常用无线通信协议Zigbee、bluetooth、wifi比较
- 无线通信原理及协议栈(ZigBee、蓝牙等)解析
- 一种新的无线网络通信技术Zigbee
- ZigBee_CC2530_01H_关于无线通信的结构体介绍
- 无线通信之zigbee芯片和模块的选择
- ZigBee_CC2530_01H_关于无线通信的结构体介绍
- 一种新的无线网络通信技术Zigbee
- ZigBee无线通信,定位算法研究
- ZigBee无线通信--BasicRF无线点对点通信
- 点对点语音通信(转)