找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3152|回復(fù): 0
收起左側(cè)

CC2500-stm8的驅(qū)動(dòng)代碼

[復(fù)制鏈接]
ID:315951 發(fā)表于 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寄存器設(shè)置方向 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 設(shè)置 成輸入,右邊P5到P8設(shè)置成輸出       
}
volatile unsigned char a=0;

/************************************************************************************
PC5中斷函數(shù),無(wú)線接收中斷
*************************************************************************************/
@far @interrupt void YB30INT (void)
{
        unsigned char dd,rsi;
        int i=0;
        PC_CR2=0x00;    //關(guān)PC中斷
        if (bSend==1)
        P5=1; //發(fā)送有中斷,點(diǎn)LED
        //CC_Idle();//新加測(cè)試 PA模塊 老的和新的。           
        dd=CC_RdStatus(0x35);   //讀狀態(tài)寄存器
        if (dd==17) CC_ClrRx(); //清除接收緩沖區(qū)和接收錯(cuò)誤相關(guān)標(biāo)志
        if (dd==22) CC_ClrTx(); //清除發(fā)送緩沖區(qū)和發(fā)送錯(cuò)誤相關(guān)標(biāo)志
        dd=CC_RdStatus(0x3B)&0x7f;//CCxxx0_RXBYTES 讀數(shù)據(jù)長(zhǎng)度
        if (dd==0)//V1.1 ?-ê?if (bSendOk==0) 長(zhǎng)度 0
        {
       
                CC_RxOn();//        進(jìn)入接收狀態(tài)  
    TX=0;RX=1;               
        }
        else  //長(zhǎng)度不為0
        {
          SerData[0]=0;
                CC_RdPacket(); //讀數(shù)據(jù)包
                CC_RxOn();
                if ((bRcvOk==1)&&(SerData[0]<62))
                {
                        //復(fù)制數(shù)據(jù),用于在主程序里顯示和修改,SerData 用來(lái)在RF中斷里判斷
                        //memcpy(RFData,SerData,SerData[0]);
                        //xieyi_panduan();//解析協(xié)議       
            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;    //開(kāi)PC5中斷
       
}
void TXtest(void)
{
          unsigned char n=0;
                        ///發(fā)射的
                P5=0;
                CC_Init();
                CC_Chan(227);
                Delay_ms(20);
                //如果是CC2500+PA+LNA 模塊,把開(kāi)關(guān)打到接收這邊
                 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);
          };
                //發(fā)成功了,開(kāi)關(guān)不接上
                RX=0;TX=0;
                //PC_CR2=0X20;
                P5=1;
}

void RXtest(void)
{
   //如果是2500+PA+LNA 模塊,把開(kāi)關(guān)打到接收這邊來(lái);
         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();         //初始化無(wú)線 模塊
                        P5=0;
                        //CC_Test();
            CC_Chan(227); //設(shè)置頻道  
                        Delay_ms(1);
            CC_RxOn();// Enable RX.
            PC_CR2=0x20;
               
            //EXTI_CR2=0x02;//下降沿觸發(fā)
            EXTI_CR1=0x20;
                        P5=0;
         }
}
void main()
{
        unsigned char i=0;
        _asm("sim"); // 關(guān)全局中斷
//  CLK_CKDIVR=0x00; //16M

//        WDTCON = 0X00;  // 看門(mén)狗設(shè)置
        //CLK_ICKR = 0X07;        // 使用內(nèi)部晶振, 8M crystal
       

         port_init();          // IO 口初始化

//P5=1;//點(diǎn)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();         //初始化無(wú)線 模塊
        CC_Test();
        CC_Chan(227); //設(shè)置頻道
        Delay_ms(10);
        CC_RxOn();// Enable RX.
        TX=0;RX=1;
        //while(1);  

        PC_CR2=0x20;

        EXTI_CR2=0x02;//下降沿觸發(fā)
//        EXTI_CR1=0x20;
        //PC_CR2=0x10;//PC5中斷懸浮輸入
        //EXTI_CR1=0x10;
        //EXTI_CR1=0xff;//下降沿觸發(fā) PC口
        //EXTI_CR2=0x02;//下降沿觸發(fā)
       
        P5=0;//關(guān)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, 下載次數(shù): 15, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表