⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cc1100driver.txt

📁 CC1100驱动源代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
CC1100驱动源代码

#include <reg52.h>
#include <intrins.h>
#include "CC1100.h"


#define  INT8U    unsigned char
#define  INT16U    unsigned int

#define  time0h    (65535-1000)/256
#define  time0l    (65535-1000)%256   //定时1MS
#define  WRITE_BURST      0x40      //连续写入
#define  READ_SINGLE      0x80      //读
#define  READ_BURST       0xC0      //连续读
#define  BYTES_IN_RXFIFO     0x7F        //接收缓冲区的有效字节数
#define  CRC_OK              0x80       //CRC校验通过位标志

 

#define  INT8U  unsigned char 
#define  INT16U  unsigned int

#define  FOSC  11059200 
#define  BAUD  9600
#define  TIMER1  0XFD //256-(110592/(12*32*96))
#define  TIMER0H  (65535-3*FOSC/12/1000)/256
#define  TIMER0L  (65535-3*FOSC/12/1000)%256   //定时3MSVR

//----------------------------------------------------------------------------------------------------------
//内部寄存器定义
//----------------------------------------------------------------------------------------------------------
sfr  P4   = 0xc0; 
sfr  ADC_CONTR  =  0xC5;
sfr  AUXR   =  0x8E;
sfr  ADC_DATA  =  0xC6;
sfr  P1_ADC_EN  =  0x97;

sbit DAT1 = P3^5;
sbit DAT2 = P3^4;
sbit DAT3 = P3^3;
sbit DAT4 = P3^2;
sbit DAT5 = P4^3;
sbit DAT6 = P1^7;
sbit DAT7 = P1^6;
sbit DAT8 = P1^5;
sbit DAT9 = P1^4;
sbit DAT10 = P4^2;  

//定义CC1100模块接口
#define GDO1 DAT1
#define GDO2 DAT2
#define CSN  DAT4
#define MOSI DAT5
#define MISO DAT6
#define SCK  DAT7

sbit LED1 = P4^1;
sbit LED2 = P4^0;

/****************************************************************************************
//全局变量定义
/****************************************************************************************/
INT16U TimeOutCount[2]={0,0};       //超时计数器
INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};
INT8U uartrx;
INT8U timer[2]={0,0};
INT8U TimerCount;
//*****************************************************************************************
//函数名:delay(unsigned int s)
//输入:时间
//输出:无
//功能描述:普通廷时
//*****************************************************************************************  
delay(unsigned int s)
{
 unsigned int i;
 for(i=0; i<s; i++);
 for(i=0; i<s; i++);
 for(i=0; i<s; i++);
}


void halWait(INT16U timeout) {
    do {
        _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_(); 
    } while (--timeout);
}

/*****************************************************************************************
//函数名:UartInit()
//输入:无
//输出:无
//功能描述:串口初始化程序
/*****************************************************************************************/
void UartInit(void)
{
 SCON = 0x50;  //串口方式1,允许接收
 TMOD = 0x21;  //定时器1工作方式2,定时器0工作方式1
 TH1 = TIMER1; 
 TL1 = TIMER1; 
 TR1 = 1;  //启动定时器1
 EA=1;
 ES=1;
}


/*****************************************************************************************
//函数名:void TimerInit(void)
//输入:无
//输出:无
//功能描述:定时器0初始化程序
/*****************************************************************************************/
void TimerInit(void)
{
 TH0 = TIMER0H;
 TL0 = TIMER0L;
 ET0 = 1;   //定时器0中断允许
 TF0 = 0;
 TR0 = 1;   //启动定时器0
 EA = 1;    //开全局中断
}

void SpiInit(void)
{
 CSN=0;
 SCK=0;
 CSN=1;
}

/*****************************************************************************************
//函数名:CpuInit()
//输入:无
//输出:无
//功能描述:SPI初始化程序
/*****************************************************************************************/
CpuInit(void)
{
  UartInit();
  TimerInit();
  SpiInit();
  delay(5000);
}
 

//*****************************************************************************************
//函数名:ResetTimer(INT8U n)
//输入:要复位的计时器
//输出:无
//功能描述:复位计时器
//*****************************************************************************************
void ResetTimer(INT8U n)
{
 ET0 = 0;                                    // Disable Timer0 interrupt
 timer[n & 0x01] = 0;                        // Clear timer[n]
 ET0 = 1;                                    // Enable Timer0 interrupt
}


//*****************************************************************************************
//函数名:INT16U ReadTimer(INT8U n)
//输入:要读的计时器
//输出:读出值
//功能描述:读计时器
//*****************************************************************************************
INT16U ReadTimer(INT8U n)
{
 INT16U tmp;
 ET0 = 0;                                    // Disable Timer0 interrupt
 tmp = timer[n];                             // Clear timer[n]
 ET0 = 1;                                    // Enable Timer0 interrupt
 return tmp;
}

/*****************************************************************************************
//函数名:SendCh(ch)
//输入:无
//输出:无
//功能描述:串口发送一个字符
/*****************************************************************************************/
void SendCh(INT8U ch)
{
 TI = 0;
 ES=0;
 SBUF = ch;
 while(!TI);
 TI = 0;
 ES=1;
}
void SendMch(INT8U *arrch,INT8U len)
{
  INT8U i;
 for(i=0;i<len;i++)
  SendCh(*(arrch+i));
}
/*****************************************************************************************
//函数名:void SendStr(INT8U *arr)
//输入:发送的字符串
//输出:无
//功能描述:发送一个字符串
/*****************************************************************************************/
void SendStr(INT8U *arr)
{
 INT8U i;
 
 i = 0;
 while(arr[i] != '\0')
 {
  SendCh(arr[i]);
  i++;
 }
}

//*****************************************************************************************
//函数名:SpisendByte(INT8U dat)
//输入:发送的数据
//输出:无
//功能描述:SPI发送一个字节
//*****************************************************************************************
INT8U SpiTxRxByte(INT8U dat)
{
 INT8U i,temp;
 temp = 0;
 
 SCK = 0;
 for(i=0; i<8; i++)
 {
  if(dat & 0x80)
  {
   MOSI = 1;
  }
  else MOSI = 0;
  dat <<= 1;

  SCK = 1; 
  _nop_();
  _nop_();

  temp <<= 1;
  if(MISO)temp++; 
  SCK = 0;
  _nop_();
  _nop_(); 
 }
 return temp;
}

//*****************************************************************************************
//函数名:void RESET_CC1100(void)
//输入:无
//输出:无
//功能描述:复位CC1100
//*****************************************************************************************
void RESET_CC1100(void) 
{
 CSN = 0; 
 while (GDO1); 
 SpiTxRxByte(CCxxx0_SRES);   //写入复位命令
 while (GDO1); 
 CSN = 1; 
}

//*****************************************************************************************
//函数名:void POWER_UP_RESET_CC1100(void) 
//输入:无
//输出:无
//功能描述:上电复位CC1100
//*****************************************************************************************
void POWER_UP_RESET_CC1100(void) 
{
 CSN = 1; 
 halWait(1); 
 CSN = 0; 
 halWait(1); 
 CSN = 1; 
 halWait(41); 
 RESET_CC1100();     //复位CC1100
}

//*****************************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -