微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于CC1101与STC89C52无线收发程序(接收程序)

基于CC1101与STC89C52无线收发程序(接收程序)

时间:11-27 来源:互联网 点击:
CC1101STC89C52无线通讯接收程序:

#include
#include

#define IOCFG2 0x00
#define IOCFG10x01
#define IOCFG00x02
#define FIFOTHR0x03//rx和tx FIFO门限
#define SYNC10x04//同步词汇,高字节
#define SYNC00x05//同步词汇,低字节
#define PKTLEN0x06//数据包长度
#define PKTCTRL10x07//数据包自动控制
#define PKTCTRL00x08//数据包自动控制
#define ADDR0x09//设备地址
#define CHANNR0x0a//信道数
#define FSCTRL10x0b//频率合成控制器
#define FSCTRL00x0c//频率控制词汇,高字节
#define FREQ20x0d//频率控制词汇,中间字节
#define FREQ10x0e//频率控制词汇,低字节
#define FREQ00x0f//调置器配置
#define MDMCFG40x10//调置器配置
#define MDMCFG30x11//调置器配置
#define MDMCFG20x12//调置器配置
#define MDMCFG10x13//调置器配置
#define MDMCFG00x14//调置器配置
#define DEVIATN0x15//主通信控制状态机配置
#define MCSM20x16//主通信控制状态机配置
#define MCSM10x17//主通信控制状态机配置
#define MCSM00x18//频率偏移补偿配置
#define FOCCFG0x19//位同步配置
#define BSCFG0x1a//AGC控制
#define AGCCTRL20x1b//AGC控制
#define AGCCTRL10x1c//AGC控制
#define AGCCTRL00x1d//高字节时间0暂停
#define WOREVT10x1e//低字节时间0暂停
#define WOREVT00x1f//电磁波激活控制
#define WORCTRL0x20//前末端RX配置
#define FREND10x21//前末端TX配置
#define FREND00x22//频率合成器校准
#define FSCAL30x23//频率合成器校准
#define FSCAL20x24//频率合成器校准
#define FSCAL10x25//频率合成器校准
#define FSCAL00x26//RC振荡器配置
#define RCCTRL10x27//RC振荡器配置
#define RCCTRL00x28//频率合成器校准控制
#define FSTEST0x29//产品测试
#define PTEST0x2a//AGC测试
#define AGCTEST0x2b//不同的测试设置
#define TEST20x2c//不同的测试设置
#define TEST10x2d//不同的测试设置
#define TEST00x2e//

#define SRES0x30//重启芯片
#defineSFSTXON0x31//开启和校准频率合成器
#define SXOFF0x32//关闭晶体振荡器
#define SCAL0x33//校准频率合成器并判断
#define SRX0x34//启用SRX
#define STX0x35//空闲状态:启用STX
#define SIDLE0x36//离开RX/TX,关断频率合成器
#define SAFC0x37//频率合成器AFC调节
#define SWOR0x38//自动RX选举序列(电磁波激活)
#define SPWD0x39//当CSN为高时进入功率降低模式
#define SFRX0x3a//冲洗RX FIFO缓存
#define SFTX0x3b//冲洗TX FIFO缓存
#define SWORRST0x3c//重新设置真实时间时钟
#define SNOP0x3d//无操作

#define PARTNUM0x30//CC2550组成部分数目
#define VERSION0x31//当前版本数
#define FREQEST0x32//频率偏移估计
#define LQI0x33//连接质量的解调器估计
#define RSSI0x34//接收信号强度指示
#define MARCSTATE0x35//控制状态机状态
#define WORTIME10x36//WOR计时器高字节
#define WORTIME00x37//WOR计时器低字节
#define PKTSTATUS0x38//当前GDOx状态和数据包状态
#define VCO_VC_DAC0x39//PLL校准模块的当前设定
#define TXBYTES0x3a//TX FIFO中的下溢和比特数
#define RXBYTES0x3b//RX FIFO中的下溢和比特数
#define PATABLE0x3e
#define TX_FIFO0x3f
#define RX_FIFO0x3f
#define data_len8

typedef unsigned intuint;
typedef unsigned charuchar;

uchar rx_buffer[data_len]={0,0,0,0,0,0,0,0};//rx data
//uchar const code TX_Buffer[data_len]={0x02,0x55};//tx data
uchar data_length=0;
uchar code P_Config[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};//功率配置

sbit CSN=P2^1;
sbit SCLK=P2^7;
sbit SI=P2^2;
sbit SO=P2^0;
sbit GDO0=P2^6;

sbit LED=P0^0;
sbit LED1=P0^6;

void CC1101_Init(void);
void CC1101_RESET(void);
void POWER_UP_RESET(void);
uchar SPI_WR_Byte(uchar value);
void SPI_Write_Byte(uchar addr,uchar value);
uchar SPI_Read_Byte(uchar addr);
void SPI_Write_Strobe(uchar strobe);
void SPI_Write_Burst(uchar addr,uchar *buffer,uchar count);
void SPI_Read_Burst(uchar addr,uchar *buffer,uchar count);
void SPI_Write_Packet(uchar *TX_Buffer,uchar size);
uchar SPI_Read_Packet(uchar *RX_Buffer,uchar length);
void CC1101_Set_TX(void);
void CC1101_Set_RX(void);
void Write_Config(void);

void delay_ms(uint x)
{
uint i;
while(x--)for(i=0;i<120;i++);
}

void delay_us(uint x)
{
do {
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
} while (--x);
}
//------------------------------------------------/
//函数功能:通过SPI写读一字节/
//输入参数:value/
//输出参数:B_value/
//------------------------------------------------/
uchar SPI_WR_Byte(uchar value)
{
uchar i,status=0;
SCLK=0;
for(i=0;i<8;i++)
{
if(value&0x80)
SI=1;
else
SI=0;
value<=1;
SCLK=1;
status<=1;
_nop_();_nop_();

if(SO)
status|=0x01;
SCLK=0;
_nop_();_nop_();
}
return status;
}
//--------------------------------------------------/
//函数功能:重置CC1101/
//输入参数:无/
//输出参数:无/
//--------------------------------------------/
void CC1101_RESET(void)
{
SPI_Write_Strobe(SIDLE);
CSN=0;
while(SO);
SPI_WR_Byte(SRES);
while(SO);
CSN=1;
}
//-----------------------------------------------/
//函数功能:CC1101上电重置/
//输入参数:无/
//输出参数:无/
//--------------------------------------------/
void POWER_UP_RESET(void)
{

CSN=1;
delay_us(1);
CSN=0;
delay_us(1);
CSN=1;
delay_us(41);
CC1101_RESET();
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top