CC1101与STC单片机通信

这是我第一次发表这种技术类文章,不当之处,多多批评指正。谢谢!有次偶然的机会我在网上淘到了一块CC1101与STC单片机通信的电路板,原理图如下:我也是第一次接触CC1101这种通信模块,在网上找了很多CC1101的通信代码进行移植都不能成功通信,很苦恼,只能自己细细研究,最后发现网上的CC1101与单片机通信的绝大多数代码都是基于51单片机普通IO与CC1101进行通信,而我手上的这块板是...
摘要由CSDN通过智能技术生成

这是我第一次发表这种技术类文章,不当之处,多多批评指正。谢谢!
有次偶然的机会我在网上淘到了一块CC1101与STC单片机通信的电路板,原理图如下:

在这里插入图片描述
我也是第一次接触CC1101这种通信模块,在网上找了很多CC1101的通信代码进行移植都不能成功通信,很苦恼,只能自己细细研究,最后发现网上的CC1101与单片机通信的绝大多数代码都是基于51单片机普通IO与CC1101进行通信,而我手上的这块板是STC15W408AS是通过SPI与CC1101进行通信,所以必须对单片机的SPI进行设置初始化才能与CC1101通信,下面我贴出我的代码供大家参考,不当之处请谅解。
这条代码是核心,初始化单片机SPI功能,SPCTL = (1<<SPEN)|(1<<MSTR)|(0<<CPOL); // 主机模式,fck/16, SPI方式0
以下是发射部分的代码:
//ICC-AVR application builder : 2007-8-11 20:37:32
// Target : M16
// Crystal: 8.0000Mhz
#include <reg52.h>
#include <INTRINS.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define SSIG 0x80 //SPCTL.7
#define SPEN 0x40 //SPCTL.6
#define DORD 0x20 //SPCTL.5
#define MSTR 0x10 //SPCTL.4
#define CPOL 0x08 //SPCTL.3
#define CPHA 0x04 //SPCTL.2
#define SPDHH 0x00 //CPU_CLK/4
#define SPDH 0x01 //CPU_CLK/16
#define SPDL 0x02 //CPU_CLK/64
#define SPDLL 0x03 //CPU_CLK/128

//------------------------------------------------------------------------------
//--------------------------------CC1100接口定义--------------------------------
sbit GDO0 =P3^6;
sbit GDO2 =P3^2;
sbit MISO =P1^4;
sbit MOSI =P1^3;
sbit SCK =P1^5;
sbit CSN =P1^2;
sbit LED=P1^1;
//------------------------------------------------------------------------------
//--------------------------------CC1100-SPI口接口定义--------------------------
//#define CC1100_MISO P1^4 //输入0

//#define Read_CC1100_MISO MISO & (1 << P1^4)
//#define CC1100_MOSI P1^3 //输出1

//#define Read_CC1100_MOSI ((MISO >> P1^3)&0x01)
//#define CC1100_SCK P1^5 //输出1

//#define CC1100_CSN P1^2 //输出1

//-------------------------------CC1100状态端口定义-----------------------------
//#define CC1100_GD0 P1^6 //输入0

//#define Read_CC1100_GD0 ((PIND>> P1^6)&0x01)
//#define CC1100_GD2 P3^2 //输入0

//#define Read_CC1100_GD2 ((MISO >> P3^2)&0x01)
//------------------------------数码管位选--------------------------------------
//#define Display1 PC7 //输出1
//#define Hign_Display1 PORTC |= (1 << PC7);
//#define Low_Display1 PORTC &= ~(1 << PC7);
//#define Display2 PC6 //输出1
//#define Hign_Display2 PORTC |= (1 << PC6);
//#define Low_Display2 PORTC &= ~(1 << PC6);
//#define Display3 PC4 //输出1
//#define Hign_Display3 PORTC |= (1 << PC4);
//#define Low_Display3 PORTC &= ~(1 << PC4);
//#define Display4 PC5 //输出1
//#define Hign_Display4 PORTC |= (1 << PC5);
//#define Low_Display4 PORTC &= ~(1 << PC5);
//-------------------------------BELL蜂明器-------------------------------------
//#define Hign_BELL PORTC |= (1 << P1^1)
//#define Low_BELL PORTC &= ~(1 << P1^1)
//-------------------------------LED显示码--------------------------------------
//#define LED0 0x14
//#define LED1 0x77
//#define LED2 0x4C
//#define LED3 0x45
//#define LED4 0x27
//#define LED5 0x85
//#define LED6 0x84
//#define LED7 0x57
//#define LED8 0x04
//#define LED9 0x05
//#define LEDOFF 0xFF

//------------------------------------------------------------------------------
#define WRITE_BURST 0x40 //连续写入
#define READ_SINGLE 0x80 //读
#define READ_BURST 0xC0 //连续读
#define BYTES_IN_RXFIFO 0x7F //接收缓冲区的有效字节数
#define CRC_OK 0x80 //CRC校验通过位标志
//*****************************************************************************************
//更多功率参数设置可详细参考DATACC1100英文文档中第48-49页的参数表***
//INT8U PaTabel[8] = {0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04}; //-30dBm 功率最小
//INT8U PaTabel[8] = {0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60}; //0dBm
INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0}; //10dBm 功率最大
char a,b;
//*****************************************************************************************
//*****************************************************************************************
// CC1100 STROBE, CONTROL AND STATUS REGSITER
#define CCxxx0_IOCFG2 0x00 // GDO2 output pin configuration
#define CCxxx0_IOCFG1 0x01 // GDO1 output pin configuration
#define CCxxx0_IOCFG0 0x02 // GDO0 output pin configuration
#define CCxxx0_FIFOTHR 0x03 // RX FIFO and TX FIFO thresholds
#define CCxxx0_SYNC1 0x04 // Sync word, high INT8U
#define CCxxx0_SYNC0 0x05 // Sync word, low INT8U
#define CCxxx0_PKTLEN 0x06 // Packet length
#define CCxxx0_PKTCTRL1 0x07 // Packet automation control
#define CCxxx0_PKTCTRL0 0x08 // Packet automation control
#define CCxxx0_ADDR 0x09 // Device address
#define CCxxx0_CHANNR 0x0A // Channel number
#define CCxxx0_FSCTRL1 0x0B // Frequency synthesizer control
#define CCxxx0_FSCTRL0 0x0C // Frequency synthesizer control
#define CCxxx0_FREQ2 0x0D // Frequency control word, high INT8U

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值