CC1110程序.docx

上传人:b****6 文档编号:5011610 上传时间:2022-12-12 格式:DOCX 页数:12 大小:20.70KB
下载 相关 举报
CC1110程序.docx_第1页
第1页 / 共12页
CC1110程序.docx_第2页
第2页 / 共12页
CC1110程序.docx_第3页
第3页 / 共12页
CC1110程序.docx_第4页
第4页 / 共12页
CC1110程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

CC1110程序.docx

《CC1110程序.docx》由会员分享,可在线阅读,更多相关《CC1110程序.docx(12页珍藏版)》请在冰豆网上搜索。

CC1110程序.docx

CC1110程序

CC1110最简单的收发程序

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

*文件:

wxl_radio.c

*功能:

RF发送和接收(非DMA),初版,还可能有BUG

*作者:

emot

*版本:

v1.0

*说明:

宏来源于TI的hal.h

*修订记录

----------------------------------------------------------------------

|时间          原因                  修订人

|2009年4月05日  初写                  emot

|

|

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

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

*头文件

*/

#include"includes.h"

#define

//----------------------------------------------------------------------

//发送函数

//----------------------------------------------------------------------

BYTETransmit(BYTE__xdata*buff,BYTEbytes)        //发送

{

    BYTEi,BytesToSend;                      //

    RFIF=0;

    RFTXRXIF=0;

    BytesToSend=bytes;//        数据包长度就是byte,为方便实际应用中增加其他字节,定义了bytestosend变量

    if(BytesToSend<=64)

    {

        

        SIDLE();            //ExitRX/TX,turnofffrequencysynthesizerandexit

        STX();            //SwitchradiotoTX

        while(RFTXRXIF==0);          //等待发送结束

        RFTXRXIF=0;                  //清除发送标志

        RFD=BytesToSend;

        while(RFTXRXIF==0);          //等待发送结束

        RFTXRXIF=0;                  //清除发送标志

        

        for(i=0;i<(BytesToSend-1);i++)

        {

            RFD=*buff++;        //发送数据

            while(RFTXRXIF==0);      //等待发送结束

            RFTXRXIF=0;              //清除发送标志

        }

        RFD=*buff;                //发送最后一BYTE

        

        while(RFIF&IRQ_DONE==0);  //等待发送结束

        RFIF&=~IRQ_DONE;          //清结束标志

        

        RFIF&=~IRQ_DONE;        //Tx/Rxcompleted,clearinterruptflag

        S1CON&=~0x03;          //ClearthegeneralRFIFinterruptregisters

        returnTRUE;

    }

    else

    {

        returnFALSE;

    }

}

//----------------------------------------------------------------------

//接收函数,不使用DMA的接收

//----------------------------------------------------------------------

#define WAIT_TIME 80 //unit ms

BYTEReceive(BYTE__xdata*buff,BYTE*bytes)        //接收

{

BYTEBytesToReceive=0;

        BYTEaddress;

        BYTEi;

    RFIF=0;

    RFTXRXIF=0;

    SIDLE();

    SRX();

    resetTimer(APP_TIMER0);

    while(RFTXRXIF==0){if(readTimer(APP_TIMER0)>WAIT_TIME)returnFALSE;};                //等待接收结束,如超时则强退

    BytesToReceive=RFD;              //读取数据包总长度

    RFTXRXIF=0;                    //清除发送标志  

    while(RFTXRXIF==0){if(readTimer(APP_TIMER0)>WAIT_TIME)returnFALSE;};                //等待接收结束

    address=RFD;                    //读取匹配地址

    RFTXRXIF=0;                      //清除发送标志

    if((BytesToReceive>=64)||(BytesToReceive<=0))

    {

        returnFALSE;

    }

    

    if(address)address=address;  //没用的语句,只是用来消除warning

    for(i=0;i<(BytesToReceive-1);i++)

    {

        while(RFTXRXIF==0){if(readTimer(APP_TIMER0)>WAIT_TIME)returnFALSE;};                //等待接收结束

        buff=RFD;                  //读取数据包长度

        RFTXRXIF=0;                  //清除发送标志

    }

    

    

    *bytes=(BytesToReceive);

    SIDLE();

    returnTRUE;

}

CC1110SPI程序

CC1110SPI口程序

电路连接如下图:

SSN:

P04    SCK:

P05

MOSI:

P03    MISO:

PO2

和硬件SPI口有关的配置为P口的功能,

SPI口所在位置,SPI口的波特率,时钟

极性SPOL,时钟相伴CPHA,中断,当然还

有主从设备等设置.如果是和别的设备

传数的话,还应该注意高/低位先传的

问题。

文字上就说这么多,再贴一段

程序:

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

//将芯片初始化到主/从模式

voidINIT_SPI(void)

{

 IO_FUNC_PORT_PIN(0,2,IO_FUNC_PERIPH);

 IO_FUNC_PORT_PIN(0,3,IO_FUNC_PERIPH);

 //IO_FUNC_PORT_PIN(0,4,IO_FUNC_PERIPH);

 IO_FUNC_PORT_PIN(0,5,IO_FUNC_PERIPH);

 IO_PER_LOC_SPI0_AT_PORT0_PIN2345();    //串口0,位置1

#ifdefSPI_MASTER_MODE

 SPI_SETUP(0,57600,MY_SPI_M_OPTIONS);   //SPI0,57600,

 IO_FUNC_PORT_PIN(0,4,IO_FUNC_GIO);

 IO_DIR_PORT_PIN(0,4,IO_OUT);

 P0_4=0;

#else

 SPI_SETUP(0,57600,MY_SPI_S_OPTIONS);

 IO_FUNC_PORT_PIN(0,4,IO_FUNC_PERIPH);

#endif

 INT_ENABLE(INUM_URX0,INT_ON);

 INT_ENABLE(INUM_UTX0,INT_ON);

 INT_GLOBAL_ENABLE(INT_ON);

}

 

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

//主模式发一字节

voidSPI0_M_SEND_BYTE(BYTEdata)

{

 while(USART0_BUSY());

 U0DBUF=data;

 while(!

USART0_BYTE_TRANSMITTED());

 U0CSR&=~0x02;

}

voidSPI0_S_SEND_BYTE(BYTEdata)

{

 while(USART0_BUSY());

 U0DBUF=data;

}

本例基于无线龙的PS个人学习开发系统,仅供初学者参考!

功能是按下电池扩展板上的K1键,CC1110模块相应小灯的闪烁频率加快,实现5级调频,K2按键用于控制小灯的切换,即按一下,第一个灯亮,再按一下第二个灯亮,依次切换。

全部程序如下

#include

typedefunsignedintuint;

typedefunsignedcharuchar;

//定义控制灯的端口

#defineled1P1_1//定义LED1为P10口控制

#defineled2P1_0//定义LED2为P11口控制

#defineK1P1_2

#defineK2P1_3

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

//延时

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

voidDelay(uintn)

{

uinttt;

for(tt=0;ttfor(tt=0;ttfor(tt=0;ttfor(tt=0;ttfor(tt=0;tt}

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

//按键及IO口初始化

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

voidInitKey_IO(void)

{

P1DIR&=~0X0C;/*按键在P12P13*/

P1INP&=~0x0c;/*上、下拉*/

//P2INP|=0x40;//P2.6是控制P1的上下拉作用//这里的两项都可以不设置

P1DIR|=0x03;//P10、P11定义为输出

}

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

//读键值

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

ucharKeyScan(void)//无形参、带返回值

{

if(K1==0)

{

Delay(100);

if(K1==0)

{

//while(!

K1);

return

(1);

}

}

if(K2==0)

{

Delay(100);

if(K2==0)

{

//while(!

K2);

return

(2);

}

}

return(0);

}

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

///任务模块

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

voidLED1(void)

{

led1=~led1;

}

voidLED2(void)

{

led2=~led2;

}

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

//主函数

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

voidmain(void)

{

unsignedinttime=50000;

void(*task)(void);//声明指针

task=LED2;//初始化指针

InitKey_IO();//初始化IO口

while

(1)

{

ucharKeyvalue=KeyScan();//获取键值、注意声明ucharKeyvalue

task();//调用任务

Delay(time);

if(Keyvalue==1)

{

if(task==LED2)//切换任务(切换闪灯)

{

task=LED1;

led2=1;

}

elseif(task==LED1)

{

task=LED2;

led1=1;

}

}

elseif(Keyvalue==2)//调节闪灯频率、实现五级调频

{

time=time-10000;

if(time<10000)

time=50000;

}

}

}

死鱼还没死

[复制][收藏]

死鱼还没死干嘛不去死

首页留言板加友情博客天涯博客博客家园免费注册帮助

博客信息

博主:

ajq1987栏目分类

全部博文

(1)

CC1110

(1)

博客登录

用户:

密码:

最新文章

CC1110最简单收发程序已改(2009-12-16)

更多>>

最新评论留言友情博客标签列表博客搜索

博客音乐日志存档

2009-12

(1)

友情链接统计信息

访问:

108次

今日访问:

1次

日志:

1篇

评论:

0个

留言:

0个

建站时间:

2009-12-16

博客成员

ajq1987管理员

最近访客

本站域名:

<<>>

CC1110最简单收发程序已改作者:

ajq1987提交日期:

2009-12-1620:

31:

00|分类:

CC1110|访问量:

44

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

  *文件:

RF_radio.c

  *功能:

RF发送和接收(非DMA也没AES加密),

  *作者:

死鱼

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

  #include"mydefined.h"

  #include"hal.h.h"

  //----------------------------------------------------------------------

  //发送函数

  //----------------------------------------------------------------------

  BYTETransmit(BYTE__xdata*buff,BYTElength,BYTEaddressto)//发送

  {

  BYTEi;//

  RFIF=0;

  RFTXRXIF=0;

  if(length<=64)

  {

  

  SIDLE();//使空闲

  STX();//转入发送

  while(RFTXRXIF==0);//等待发送结束

  RFTXRXIF=0;//清除发送标志

  RFD=length;//发送数据包长度

  while(RFTXRXIF==0);//等待发送结束

  RFTXRXIF=0;//清除发送标志

  RFD=addressto;//发送目标地址

  for(i=0;i<(length-1);i++)

  {

  RFD=buff++;//发送数据

  while(RFTXRXIF==0);//等待发送结束

  RFTXRXIF=0;//清除发送标志

  }

  RFD=buff;//发送最后一BYTE

  

  while(RFIF&IRQ_DONE==0);//等待发送结束

  RFIF&=~IRQ_DONE;//清结束标志

  

  RFIF&=~IRQ_DONE;//发送完毕,清除中断标志

  S1CON&=~0x03;//ClearthegeneralRFIFinterruptregisters

  

  returnTRUE;

  }

  else

  {

  returnFALSE;

  }

  }

  //----------------------------------------------------------------------

  //接收函数,不使用DMA的接收

  //----------------------------------------------------------------------

  #defineWAIT_TIME80//unitms

  BYTEReceive(BYTE__xdata*buff,BYTE*length,BYTEaddress2)//接收

  {

  BYTElengthToReceive=0;

  BYTEaddress;

  BYTEi;

  

  RFIF=0;

  RFTXRXIF=0;

  SIDLE();

  SRX();

  resetTimer(APP_TIMER0);

  while(RFTXRXIF==0){if(readTimer(APP_TIMER0)>WAIT_TIME)returnFALSE;};//等待接收结束,如超时则强退

  lengthToReceive=RFD;//读取数据包总长度

  RFTXRXIF=0;//清除发送标志

  

  while(RFTXRXIF==0){if(readTimer(APP_TIMER0)>WAIT_TIME)returnFALSE;};//等待接收结束

  address=RFD;//读取匹配地址

  RFTXRXIF=0;//清除发送标志

  if(address!

=address2)returnFALSE;//检查看是否是要接收的地址

  if((lengthToReceive>=64)||(lengthToReceive<=0))

  {

  returnFALSE;//检查数据包长度

  }

  for(i=0;i<(lengthToReceive-1);i++)

  {

  while(RFTXRXIF==0){if(readTimer(APP_TIMER0)>WAIT_TIME)returnFALSE;};//等待接收结束

  buff++=RFD;//读取数据包长度

  RFTXRXIF=0;//清除发送标志

  }

  

  

  *length=lengthToReceive;

  SIDLE();

  RFIF&=~IRQ_DONE;//发送完毕,清除中断标志

  S1CON&=~0x03;//ClearthegeneralRFIFinterruptregisters

  returnTRUE;

  }

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1