1、CC1110程序CC1110最简单的收发程序/*文件: wxl_radio.c*功能: RF发送和接收(非DMA),初版,还可能有BUG*作者: emot*版本: v1.0*说明:宏来源于TI的hal.h*修订记录-|时间 原因修订人|2009年4月05日初写emot|*/*头文件*/#include includes.h#define /-/发送函数/-BYTE Transmit(BYTE _xdata *buff,BYTE bytes)/发送BYTE i,BytesToSend; /RFIF = 0;RFTXRXIF = 0;BytesToSend = bytes ;/数据包长度就是byt
2、e,为方便实际应用中增加其他字节,定义了bytestosend变量if(BytesToSend = 64)SIDLE();/ Exit RX / TX, turn off frequency synthesizer and exitSTX(); / Switch radio to TXwhile(RFTXRXIF = 0); / 等待发送结束RFTXRXIF = 0; / 清除发送标志RFD = BytesToSend;while(RFTXRXIF = 0); / 等待发送结束RFTXRXIF = 0; / 清除发送标志for(i=0;iWAIT_TIME)return FALSE;/ 等待接
3、收结束,如超时则强退BytesToReceive = RFD; / 读取数据包总长度RFTXRXIF = 0; / 清除发送标志while(RFTXRXIF = 0)if(readTimer(APP_TIMER0)WAIT_TIME)return FALSE;/ 等待接收结束address = RFD;/ 读取匹配地址RFTXRXIF = 0; / 清除发送标志if(BytesToReceive = 64)|(BytesToReceive = 0)return FALSE;if(address)address = address; /没用的语句,只是用来消除warningfor(i=0;iWA
4、IT_TIME)return FALSE;/ 等待接收结束buff = RFD;/ 读取数据包长度RFTXRXIF = 0; / 清除发送标志*bytes = (BytesToReceive);SIDLE();return TRUE;CC1110 SPI 程序CC1110 SPI 口程序电路连接如下图:SSN:P04SCK:P05MOSI:P03MISO:PO2和硬件SPI口有关的配置为P口的功能,SPI口所在位置,SPI口的波特率,时钟极性SPOL,时钟相伴CPHA,中断,当然还有主从设备等设置.如果是和别的设备传数的话,还应该注意高/低位先传的问题。文字上就说这么多,再贴一段程序:/*/将
5、芯片初始化到主/从模式void INIT_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#ifdef SPI_MASTER_MODE SPI_SETUP(0,57600,MY_SPI_M_OPTIONS); /SPI0,57600,
6、 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);/*/主模式发一字节void SPI0_M_SEND_BYTE(BYTE data) while(USAR
7、T0_BUSY(); U0DBUF = data; while(!USART0_BYTE_TRANSMITTED(); U0CSR &= 0x02;void SPI0_S_SEND_BYTE(BYTE data) while(USART0_BUSY(); U0DBUF = data;本例基于无线龙的PS个人学习开发系统,仅供初学者参考! 功能是按下电池扩展板上的K1键,CC1110模块相应小灯的闪烁频率加快,实现5级调频,K2按键用于控制小灯的切换,即按一下,第一个灯亮,再按一下第二个灯亮,依次切换。 全部程序如下#include typedef unsigned int uint; type
8、def unsigned char uchar; /定义控制灯的端口 #define led1 P1_1 /定义LED1为P10口控制 #define led2 P1_0 /定义LED2为P11口控制 #define K1 P1_2 #define K2 P1_3 /* /延时 */ void Delay(uint n) uint tt; for(tt = 0;tt for(tt = 0;tt for(tt = 0;tt for(tt = 0;tt for(tt = 0;tt /* /按键及IO口初始化 */ void InitKey_IO(void) P1DIR &= 0X0C; /*按键在
9、P12 P13*/ P1INP &= 0x0c; /*上、下拉*/ / P2INP |= 0x40; /P2.6是控制P1的上下拉作用 /这里的两项都可以不设置 P1DIR |= 0x03; /P10、P11定义为输出 /* /读键值 */ uchar KeyScan(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); /* /任务模块 */ void LED1
10、(void) led1=led1; void LED2(void) led2=led2; /* /主函数 */ void main(void) unsigned int time=50000; void (*task)(void); /声明指针 task=LED2; /初始化指针 InitKey_IO(); /初始化IO口 while(1) uchar Keyvalue = KeyScan(); /获取键值、注意声明uchar Keyvalue task(); /调用任务 Delay(time); if(Keyvalue=1) if(task=LED2) /切换任务(切换闪灯) task=LE
11、D1; led2=1; else if(task=LED1) task=LED2; led1=1; else if(Keyvalue=2) /调节闪灯频率、实现五级调频 time=time-10000; if(time 最新评论留言友情博客标签列表博客搜索 博客音乐日志存档2009-12 ( 1 ) 友情链接统计信息访问:108 次今日访问:1次日志: 1篇评论: 0 个留言: 0 个建站时间: 2009-12-16博客成员ajq1987 管 理 员最近访客本站域名: CC1110 最简单收发程序已改作者:ajq1987 提交日期:2009-12-16 20:31:00 | 分类:CC1110
12、 | 访问量:44 /*文件: RF_radio.c*功能: RF发送和接收(非DMA也没AES加密),*作者: 死鱼/*#include mydefined.h#include hal.h.h/-/发送函数/-BYTE Transmit(BYTE _xdata *buff,BYTE length,BYTE addressto) /发送 BYTE i; / RFIF = 0; RFTXRXIF = 0; if(length = 64) SIDLE(); / 使空闲 STX(); / 转入发送 while(RFTXRXIF = 0); / 等待发送结束 RFTXRXIF = 0; / 清除发送标
13、志 RFD = length; /发送数据包长度 while(RFTXRXIF = 0); / 等待发送结束 RFTXRXIF = 0; / 清除发送标志 RFD = addressto; /发送目标地址 for(i=0;iWAIT_TIME)return FALSE; / 等待接收结束,如超时则强退 lengthToReceive = RFD; / 读取数据包总长度 RFTXRXIF = 0; / 清除发送标志 while(RFTXRXIF = 0)if(readTimer(APP_TIMER0)WAIT_TIME)return FALSE; / 等待接收结束 address = RFD;
14、/ 读取匹配地址 RFTXRXIF = 0; / 清除发送标志 if(address!=address2) return FALSE; /检查看是否是要接收的地址 if(lengthToReceive = 64)|(lengthToReceive = 0) return FALSE; /检查数据包长度 for(i=0;iWAIT_TIME)return FALSE; / 等待接收结束 buff+ = RFD; / 读取数据包长度 RFTXRXIF = 0; / 清除发送标志 *length = lengthToReceive; SIDLE(); RFIF &= IRQ_DONE; / 发送完毕,清除中断标志 S1CON &= 0x03; / Clear the general RFIF interrupt registers return TRUE;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1