CC1110程序.docx
《CC1110程序.docx》由会员分享,可在线阅读,更多相关《CC1110程序.docx(12页珍藏版)》请在冰豆网上搜索。
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;
}