📄 main.c
字号:
/*************************************************
** 版权 : 杭州利尔达科技有限公司
** 文件名 : 1100/2500测试用
** 版本 : v1.0
** 工作环境: IAR4.11b
** 作者 : panxiaojiang
** 生成日期: 2008.11
** 功能 : 基本通信功能测试
** 使用说明: 更改主程序中#if 后的值切换发送和接收,
当为“#if 0”为接收,否则为发送;
发送数据为变长数据包,发送60个字节,CRC校验+地址校验
接收方收到数据后显示发送的数据个数并切换亮灯状态
** 测试硬件: LSD-TEST430FG461X-20XX-U V1.0b
** 修改日志: 2008.11
**************************************************/
#include "include.h"
//变量声明
char paTable[8] = {0x17,0x1c,0x26,0x57,0x60,0x85,0xc8,0xc0};//cc1100对应功率值-20,-15,-10,-5,0,5,7,10
//char paTable[] = {0x97,0x6e,0x7f,0x97,0xa9,0xbb,0xfe,0xff,};//cc2500对应功率值-10,-8,-6,-4,-2,0,1
char paTableLen = 4; //对应功率值,默认4则为0dbm发送
char txBuffer[60]={59,1,3,4,5,6,7,8,9,4,5,5,6,2};
char rxBuffer[5];
char delay=1;
//char* LCD = LCDMEM;
/*#define SEG_a 0x01
#define SEG_b 0x02
#define SEG_d 0x04
#define SEG_g 0x08
#define SEG_c 0x10
#define SEG_f 0x20
#define SEG_h 0x40
#define SEG_e 0x80
#define CHAR_ALL (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g|SEG_h)
#define CHAR_SPACE 0
#define CHAR_MINUS (SEG_g)
#define CHAR_0 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f)
#define CHAR_1 (SEG_b|SEG_c)
#define CHAR_2 (SEG_a|SEG_b|SEG_d|SEG_e|SEG_g)
#define CHAR_3 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_g)
#define CHAR_4 (SEG_b|SEG_c|SEG_f|SEG_g)
#define CHAR_5 (SEG_a|SEG_c|SEG_d|SEG_f|SEG_g)
#define CHAR_6 (SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_7 (SEG_a|SEG_b|SEG_c)
#define CHAR_8 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_9 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g)
#define CHAR_A (SEG_a|SEG_b|SEG_c|SEG_e|SEG_f|SEG_g)
#define CHAR_B (SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_C (SEG_a|SEG_d|SEG_e|SEG_f)
#define CHAR_D (SEG_b|SEG_c|SEG_d|SEG_e|SEG_g)
#define CHAR_E (SEG_a|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_F (SEG_a|SEG_e|SEG_f|SEG_g)
#define CHAR_t (SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_L (SEG_d|SEG_e|SEG_f)
#define CHAR_X (SEG_g)
#define CHAR_SA (SEG_d)
#define CHAR_MA (SEG_g|SEG_a)
const char digit[15] =
{
CHAR_0, // "0"
CHAR_1, // "1"
CHAR_2, // "2"
CHAR_3, // "3"
CHAR_4, // "4"
CHAR_5, // "5"
CHAR_6, // "6"
CHAR_7, // "7"
CHAR_8, // "8"
CHAR_9, // "9"
CHAR_X, // "10"
CHAR_D, //"11"
CHAR_L, // "12"
CHAR_SA, //"13"
CHAR_MA //"14"
};*/
unsigned char send_num=0;
unsigned char iii;
//函数声明
void LCDinit(void);
void TimerSet(void);
void glit_light( unsigned int delay);
void delay1(unsigned int i);
void delay1(unsigned int i)
{
unsigned int j;
for(j=0;j<i;j++)
{
// _NOP();
//_NOP();
//_NOP();
}
}
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
P1OUT=0;
TI_CC_LED_PxDIR |=TI_CC_LED1; //LED灯设置
TI_CC_LED_PxOUT &=~(TI_CC_LED1);
// LCDinit(); //液晶初始化
TI_CC_SPISetup(); // spi设置初始化
TI_CC_PowerupResetCCxxxx(); // 复位RF
writeRFSettings(); // 写RF配置信息
//SPI验证用于测试无线模块是否连接(工作)正常
// txBuffer[63]= TI_CC_SPIReadReg(TI_CCxxx0_IOCFG2); //如果不等于0x06为错误
// txBuffer[63]= TI_CC_SPIReadReg(TI_CCxxx0_IOCFG0); //如果不等于0x06为错误
txBuffer[3]= TI_CC_SPIReadReg(0x08); //如果不等于0x00为错误
//输出功率设置
TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, &paTable[paTableLen], 1);
//配置发送功率
delay1(50000);
TI_CC_GDO0_PxIES |= 0X02; // Int on falling edge (end of pkt)
// TI_CC_GDO0_PxIES &= ~TI_CC_GDO0_PIN;
//address_bind=TI_CC_SPIReadReg(3);
P1OUT=0x02;//输入上拉
TI_CC_GDO0_PxIFG &= ~0X02; // Clear flag
TI_CC_GDO0_PxIE |= 0X02; // Enable int on end of packet
P1REN|=0X02;
_EINT();
_BIS_SR(GIE);
txBuffer[1] = 0x01;
while(1)
{
// WDTCTL=WDT_ARST_1000;
TI_CC_LED_PxOUT ^=TI_CC_LED1;
send_num++; //发送数据个数累加
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); //进入IDLE模式
txBuffer[0] =6; // Packet length
if(txBuffer[1] == 0x02)
txBuffer[1] = 0x01; // Packet address
else if(txBuffer[1] == 0x01)
txBuffer[1] = 0x02; // Packet address
txBuffer[3] = send_num; //写入当前发送数据个数
RFSendPacket(txBuffer, 7); // 发送数据
TimerSet(); //设置TimerA定时器--定时大约一秒
TI_CC_SPIStrobe(TI_CCxxx0_SPWD); //进入IDLE模式
// WDTCTL=WDT_ARST_1000;
// TI_CC_LED_PxOUT ^=TI_CC_LED1;
LPM3;
}
}
void TimerSet(void)
{
TACTL =TASSEL_1+TACLR;
TACCR0 =10000;
TACCTL0 =CCIE;
TACTL |= MC_1;
}
/*void LCDinit(void)
{
volatile unsigned int i;
BTCTL = BT_fCLK2_DIV128 | BT_fCLK2_ACLK_DIV256;
// 设置基本定时器
for (i = 0; i < 20; i++)
LCDMEM[i] = 0;
P5SEL |= (BIT4 | BIT3 | BIT2);
P5DIR |= (BIT4 | BIT3 | BIT2);
LCDACTL = LCDFREQ_128 | LCD4MUX | LCDSON | LCDON;
LCDAPCTL0 = LCDS0 | LCDS4 | LCDS8 | LCDS12 | LCDS16 | LCDS20 | LCDS24;
LCDAPCTL1 = 0;
LCDAVCTL0 = LCDCPEN;
LCDAVCTL1 = 1 << 1;
}*/
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)
{
LPM3_EXIT;
//iii++;
}
#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
/* char len=64; //读取最多数据个数
if (RFReceivePacket(rxBuffer,&len)) // 读数据并判断正确与否
{
if((rxBuffer[1]==3)&&(rxBuffer[58]==6)) //校验接收到数据
{
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_LED_PxOUT ^=TI_CC_LED1; //闪烁灯表示数据接收正常
}
}
TI_CC_SPIStrobe(TI_CCxxx0_SFRX); //清接收缓存
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); //进空闲模式
TI_CC_Wait(800); //延时
TI_CC_SPIStrobe(TI_CCxxx0_SRX); //进入接收状态
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // 清中断标示*/
LPM3_EXIT;
if(P1IFG&0X02) // If int comes from rx'ed packet
{
delay1(5000);
if((P1IN&0X02)==0)
{
TI_CC_LED_PxOUT ^=TI_CC_LED1;
send_num++; //发送数据个数累加
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); //进入IDLE模式
txBuffer[0] =6; // Packet length
if(txBuffer[1] == 0x02)
txBuffer[1] = 0x01; // Packet address
else if(txBuffer[1] == 0x01)
txBuffer[1] = 0x02; // Packet address
txBuffer[3] = send_num; //写入当前发送数据个数
RFSendPacket(txBuffer, 7); // 发送数据
// TimerSet(); //设置TimerA定时器--定时大约一秒
TI_CC_SPIStrobe(TI_CCxxx0_SPWD); //进入IDLE模式
}
}
P1IFG &= ~0X02; // Clr flags set by switch and GDO0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -