找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2728|回复: 0
收起左侧

CC2500-stm8的驱动代码

[复制链接]
ID:315951 发表于 2018-4-25 10:22 | 显示全部楼层 |阅读模式
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include <STM8S103F.h>
//#include <STM8S903K.h>
#include "COMM.h"
unsigned char FreqID =7;     
unsigned char  bSend=0;
unsigned char timeout=0;
/*初始化IO*/
void port_init()
{
        //DDR寄存器设置方向 0输入  1输出
        //PC3 PC4  PC6 PC7 PD2输出PC5 PD3输入
        PC_DDR =0xD8;
        PC_CR1 =0xD8;//推挽输出,PC5悬空输入
        PC_CR2=0x00;
        //PC_ODR=0XD8;
  PA_DDR=0XFF;
        PA_CR1=0XFF;
        PA_CR2=0;
        //PB4 PB5输出,PB4控制LED
        PB_DDR =0xFF;
        PB_CR1= 0xFF;
        PB_CR2=0;
        //PB_ODR=0XFF;
       
        //PD2 YB30 SDI PD3        YB30 SDO PD4接外部P1蜂鸣器
        PD_DDR = 0x14;
        PD_CR1=0x14;
        PD_CR2=0;
       

        //其他IO 左边 P1 到P4 设置 成输入,右边P5到P8设置成输出       
}
volatile unsigned char a=0;

/************************************************************************************
PC5中断函数,无线接收中断
*************************************************************************************/
@far @interrupt void YB30INT (void)
{
        unsigned char dd,rsi;
        int i=0;
        PC_CR2=0x00;    //关PC中断
        if (bSend==1)
        P5=1; //发送有中断,点LED
        //CC_Idle();//新加测试 PA模块 老的和新的。           
        dd=CC_RdStatus(0x35);   //读状态寄存器
        if (dd==17) CC_ClrRx(); //清除接收缓冲区和接收错误相关标志
        if (dd==22) CC_ClrTx(); //清除发送缓冲区和发送错误相关标志
        dd=CC_RdStatus(0x3B)&0x7f;//CCxxx0_RXBYTES 读数据长度
        if (dd==0)//V1.1 ?-ê?if (bSendOk==0) 长度 0
        {
       
                CC_RxOn();//        进入接收状态  
    TX=0;RX=1;               
        }
        else  //长度不为0
        {
          SerData[0]=0;
                CC_RdPacket(); //读数据包
                CC_RxOn();
                if ((bRcvOk==1)&&(SerData[0]<62))
                {
                        //复制数据,用于在主程序里显示和修改,SerData 用来在RF中断里判断
                        //memcpy(RFData,SerData,SerData[0]);
                        //xieyi_panduan();//解析协议       
            bRcvOk=0;
                                                rsi = CC_RssiCh(Rssi);
                                                //if ((bSend==0)&&(rsi<58)) //26 CC2500+PA  67
                                                if (SerData[0]==10)
                                                P5=1;
                                                timeout=0;
                                               
                }
        }

//PC_CR2=0x20;    //开PC5中断
       
}
void TXtest(void)
{
          unsigned char n=0;
                        ///发射的
                P5=0;
                CC_Init();
                CC_Chan(227);
                Delay_ms(20);
                //如果是CC2500+PA+LNA 模块,把开关打到接收这边
                 RX=0;TX=1;
                 Delay_ms(5);
                bSend =1;
                PC_CR2=0X0;
                CC_SendPacket(SerData,10);
                while(!nIRQ)
                {
                        if (n++>10)
                                break;
                        Delay_ms(2);
          };
                while(nIRQ)
                {
                        if (n++>10)
                                break;
                        Delay_ms(2);
          };
                //发成功了,开关不接上
                RX=0;TX=0;
                //PC_CR2=0X20;
                P5=1;
}

void RXtest(void)
{
   //如果是2500+PA+LNA 模块,把开关打到接收这边来;
         TX=0;RX=1;
   //接收的
                PC_CR2=0X20;
                CC_RxOn();
                Delay_ms(10);
                //while(!nIRQ);
                //while(nIRQ);
                //CC_RdPacket();
        //        if (SerData[0]==5)
        //        P5=1;
                //PC_CR2=0X20;
                if (timeout++>3)
         {
                  P5=0;
                         CC_Init();         //初始化无线 模块
                        P5=0;
                        //CC_Test();
            CC_Chan(227); //设置频道  
                        Delay_ms(1);
            CC_RxOn();// Enable RX.
            PC_CR2=0x20;
               
            //EXTI_CR2=0x02;//下降沿触发
            EXTI_CR1=0x20;
                        P5=0;
         }
}
void main()
{
        unsigned char i=0;
        _asm("sim"); // 关全局中断
//  CLK_CKDIVR=0x00; //16M

//        WDTCON = 0X00;  // 看门狗设置
        //CLK_ICKR = 0X07;        // 使用内部晶振, 8M crystal
       

         port_init();          // IO 口初始化

//P5=1;//点LED
TX=0;
RX=1;
RX=0;
TX=1;
//Delay_ms(255);
//P5=0;
nSEL=0;
nSEL=1;
nSEL=0;
RF433_CS_UP;
RF433_CS_DN;
RF433_SPCK_UP;
RF433_SPCK_DN;

//#define RF433_MISO ((AT91F_PIO_GetInput(AT91C_BASE_PIOA)& (AT91C_PIO_PA27))==(AT91C_PIO_PA27))//0x00010000


RF433_MOSI_UP;
RF433_MOSI_DN;

        //TestSI4432();
        CC_Init();         //初始化无线 模块
        CC_Test();
        CC_Chan(227); //设置频道
        Delay_ms(10);
        CC_RxOn();// Enable RX.
        TX=0;RX=1;
        //while(1);  

        PC_CR2=0x20;

        EXTI_CR2=0x02;//下降沿触发
//        EXTI_CR1=0x20;
        //PC_CR2=0x10;//PC5中断悬浮输入
        //EXTI_CR1=0x10;
        //EXTI_CR1=0xff;//下降沿触发 PC口
        //EXTI_CR2=0x02;//下降沿触发
       
        P5=0;//关LED
   _asm("rim");
        // TXtest();
  //CC_Idle();
        while(1)
        {               
         TXtest();
                //CC_Cmd(0x33);
                //CC_Idle();
                //RXtest();
                 Delay_ms(50);
                P5=0;
                bSend =0;
               
        }       
}

void Delay_us(int t)
{
  while(t--)
  {
   _asm("nop");
         _asm("nop");
         _asm("nop");
         _asm("nop");
         _asm("nop");
         _asm("nop");
         _asm("nop");
         _asm("nop");
         _asm("nop");
         _asm("nop");
  }
}
void Delay_ms(unsigned char time)
{
        unsigned char i,k;
        for(k = 0; k< time; k++)
        {
                for(i = 0; i<130; i++)
                {
                        _asm("nop");
                        _asm("nop");
                }
        }               
       
}

CC2500-stm8.rar

126.24 KB, 下载次数: 15, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表