基于BasicRF无线点对点通信
使用IAR打开TI提供的BasicRF资源项目
资源链接:百度网盘 提取码: 6aeu
资源项目列表如下:
rf_set.c
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL 22 // 频道 11~26
#define PAN_ID 0x8888 //网络id
//#define A 0; //显隐此宏定义以实现模块切换
#ifdef A
#define MY_ADDR 0xAC3A //本机模块地址
#define SEND_ADDR 0x1050 //发送地址
#else
#define MY_ADDR 0x1050 //本机模块地址
#define SEND_ADDR 0xAC3A //发送地址
#endif
#define SW2 P0_1
#define D6 P1_4
/**************************************************/
static basicRfCfg_t basicRfConfig;
unsigned char data_send = 0x02;
unsigned char data_receive;
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID;
basicRfConfig.channel = RF_CHANNEL;
basicRfConfig.myAddr = MY_ADDR;
basicRfConfig.ackRequest = TRUE;
while(basicRfInit(&basicRfConfig) == FAILED);
basicRfReceiveOn();
}
void Init_Port()
{
P1DIR |= 0x10;
}
void DelayMs(uint16 time){
for(uint16 i = 0; i < time; i++)
for(uint16 j = 0; j < 535; j++);
}
/********************MAIN************************/
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
Init_Port();
while(1)
{
/* user code start */
if(SW2 == 0)
{
DelayMs(10);
if(SW2 == 0)
{
while(SW2 == 0); //如果一直按着SW2按钮会一直停留在此
basicRfSendPacket(SEND_ADDR, &data_send, 1);
}
}
//接收新数据
if(basicRfPacketIsReady())
{
basicRfReceive(&data_receive, 1, NULL);
if(data_receive == 0x02) D6 = ~D6;
}
/* user code end */
}
}
测试方式
1.准备两块开发板(Zigbee协调器),仿真器,10pin排线,USB线
2.把排线插在一块板子相应位置,下载调试
3.把排线拔除,插在另一块板子相应位置,隐此以下宏定义
//#define A 0; //显隐此宏定义以实现玩家切换
下载调试
运行结果
当按下并松开板子SW2键,另一个板子D6点亮