学习-cc2530基础实验_第1页
学习-cc2530基础实验_第2页
学习-cc2530基础实验_第3页
学习-cc2530基础实验_第4页
学习-cc2530基础实验_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ZigBeeSOC片上系统200908:此手册由无线龙结合在实际开发过程中对使用以及网络上各工程师对英文手册的翻译整理而成,文中难免有错误及误差,如果你有完善本手册,请通过邮CC2530基础实 输入输出I/O控制实 CC2530基础实验4:T1使 CC2530基础实验5:T2使 CC2530基础实验6:T3使 CC2530基础实验7:T4使 中断实 AD实 CC2530基础实验 CC2530基础实验 CC2530基础实验14:在PC用串口控制 CC2530基础实验15:PC串口收数并发 CC2530基础实验16:串口时钟PC显 看门 CC2530I/OCC25301CC2530I/0LEDCC2530I/OLED1台,电池板(或液晶板)1块,ZigBee1块,USB1根。P1(P1口寄存器P1P1DIR(P1方向寄存器70P1_70输入,160P1_60输入,150P1_50输入,140P1_40输入,130P1_30输入,120P1_20输入,110P1_10输入,100P1_00输入,1P1SEL(P1功能选择寄存器70P1_70I/O,160P1_60I/O,150P1_50I/O,140P1_40I/O,130P1_30I/O,120P1_20I/O,110P1_10I/O,100P1_00I/O,1{uintfor(tt={uintfor(tt= for(tt= for(tt= for(tt= for(tt= }50n5*n/32μs。voidInitial(void);函数原型是:void{P1DIR|0x03P10、P11定义为输{P1DIR|0x03P10、P11定义为输RLED=YLED1LED}CC2530211块,ZigBee1块,USB1LEDOK” 1.1.1。P1SEL参见1.1.1。P1DIR1.1.1。P1INP(P1输入模式寄存器70P2口上/0上拉,160P1口上/0上拉,150P0口上/0上拉,140P2_40上拉,130P2_30上拉,120P2_20上拉,110P2_10上拉,100P2_00上拉,1voidDelay(uintn)CC25301。voidInitial(void)CC25301。void{P0SEL&~0X18;//P04,P03输P0DIR&~0X18;//按键在P04P0INP| //上}ucharuchar{if(K1=={if(K1==//#defineK1{ }}if(K2=={if(K2=={}}}1,P0_42CC2530311块,ZigBee1块,USB12LED闪烁。按下“OK”键 voidDelay(uintn)1.1.1。voidInitial(void)1.1.1。voidInitKey(void);1.1.1。unsignedcharKeyScan(void);1.1.2CC25304:T11来改变小灯的状态,T1每溢出两次,两个小灯闪烁一次,并且在停止闪烁后成闪P11说明文档。P1DIR1说明文档。P1SEL1说明文档。7012601150104010001:810:3211:128100010x0000-0xffff11:方voidDelay(uintn)CC25301。voidInitial(void);函数原型:void{{//P1DIR0x03;//P10P11RLED=YLED ////T1T1CTL0x3d;//通道0,128分频;自动重载模式(0x0000}CC25305:T22来改变小灯的状态,T2每发生一次中断小灯改变状态一次。 参见CC2530实验1P1SELCC25301P1DIRCC25301-0读保留,读300T2MSEL.T2MSEL000T2M0,T2MOVF0,T2MOVF1T2MOVF2。1T2MSEL.T2MSEL000T2M0,20读0计数器空闲模式,1110:T200T2T2的状T(DLE,T2MOVF2(T22寄存器0T2M0(T2多路复用寄存器0 T2CTRL.LATCH_MODE=1时,计数值和溢出值-0读504030t2ovf_per20当计数器计数达到t2_cmp2的值10当计数器计数达到t2_cmp1的值00当计数器计数等于t2_per的值-0读504030TIMER2_OVF_PERM能20PARE2M10PARE1M00TIMER2_PERMvoid{LED_ENALBLE启用//T2来做实验void{LED_ENALBLE启用//T2来做实验}LEDLEDT2#define#define T2IRQM=0x04;EA=1;T2IE=1;T2MSEL|=0xf4;\\\\\#define#defineSET_TIMER2_CAP_COUNTER(val)val8T2CAPLPL8T2CAPHPH#define#defineTIMER2_RUN()#define#defineTIMER2_STOP()CC25306:T33来改变小灯的状态,T3200次中断小灯改变状态一次。 参见CC2530实验1P1SELCC25301P1DIRCC25301T3CTL(T3控制寄存器001:2010:4011:8100:16101:32110:6440T30暂停计数,1310关溢出中断,120清计数值,写1 T30001:DOWN(T3CC00x00计数一次10(0x00T3CC0计数T3CCTL0(T30捕获/比较控制寄存器7—0读6100关中断,10T3CC0时001较时,010输出翻转,0111(发生上比较时)0(0UP/DOWN模式下发生下比较时,11120T300捕获,1T300001T3CC0(T30捕获/比较值寄存器T30比较/T3CCTL1(T31捕获/比较控制寄存器7—0读6110关中断,101比较输出模式选择,指定计数值T3CC0时的发生事件0001(发生比较时0010(发生比较时010(0UP/DOWN模式下发生(0UP/DOWN模式下发生101输出置1(发生比较时)输出清(0xff时0x00时)11120T310捕获,1T310001T3CC1(T31捕获/比较值寄存器T31比较/voidvoid{P1DIR=0X03;RLED=1;YLED= //初始化T3TIMER34_ENABLE_OVERFLOW_INT(3,1);//T3中断//时钟32分频101 //自动重装 //启I/0P10,P11LEDT316T3#pragmavector=#pragmavector=T3_VECTORinterruptvoid{//IRCON={counter=0;RLED=!RLED;}}//10次中断LED闪烁一//计数清200次中断改变一次红色LED\\EA\\EA=T3IE=do{T##timer##CTL=(val)?T##timer##CTL|0x08:T##timer##CTL&~0x08;T3的溢出中断。T3相关寄存器#defineTIMER34_INIT(timer) #defineTIMER34_INIT(timer) do{ 0x06T##timer##CCTL0=0x00;T##timer##CC0T##timer##CC0=0x00;\T##timer##CCTL1=0x00;\T##timer##CC1=0x00;\}while#define #define (T3CTL=(val)?T3CTL|0X10:功能:val1,T3正常运行,val0,T3停止计数T3工作方式#defineTIMER3_SET_MODE(val)T3CTL&=(val==1)?(T3CTL|=0X01):\*/\\(val==2)?(T3CTL|=0X02):(val==3)?(T3CTL|=0X03):/*UP/*/*/ /*freeruning\#defineT3_MODE_FREE #defineT3_MODE_DOWN #defineT3_MODE_MODULO0X02#defineT3_MODE_UP_DOWNvalT34CC25307:T44来改变小灯的状态,T4200次中断小灯改变状态一次。 CC25301。P1SELCC25301。P1DIRCC25301。T4CTL(T4控制寄存器定时器时钟再分频数(对00000120104011810016101321106411112840T40暂停计数,1310关溢出中断,120清计数值,写1 T40001DOWN(T4CC00x00计数一次(0x00T4CC0计数UP/DOWN(0x00T4CC0T4CCTL0(T40捕获/比较控制寄存器7—0读6100关中断,1通道0T4CC00001(发生比较时0010(发生比较时0100111(发生上比较时0(计0UP/DOWN模式下发生下比较)0UP/DOWN模式下发生下比较)1011(发生比较时)0(计0xff时)1100(发生比较时)1(0x00时11120T400捕获,1T400001T4CC0(T40捕获/比较值寄存器T40比较/T4CCTL1(T41捕获/比较控制寄存器7—0读6110关中断,10T4CC00001(发生比较时0010(发生比较时0100111(发生上比较时)(0或UP/DOWN模式下发生下1000(发生上比较时)(0或UP/DOWN模式下发生下0xff时)0x00时)11120T410捕获,1T410001T4CC1(T41捕获/比较值寄存器T41比较/void{P1DIR=led1=led2= //初始化T4TIMER34_ENABLE_OVERFLOW_INT(4,1);//T4中断 //自动重装 //启I/0P10,P11LEDT416T4#pragmavector=#pragmavector=T4_VECTORinterruptvoid{//IRCON=0x00; //10次中断LED闪烁一轮{counter=0;RLED=!RLED;}//计数清}200次中断改变一次红色LED的状态。\T4IE=\T4IE=\do{T##timer##CTL=(val)?T##timer##CTL|0x08:T##timer##CTL&~0x08;\EA=1;T4的溢出中断。T4相关寄存器#defineTIMER34_INIT(timer)#defineTIMER34_INIT(timer)\do T##timer##CTL=0x06;\T##timer##CCTL0=0x00;\T##timer##CC0=0x00;\T##timer##CCTL1=0x00;\T##timer##CC1=0x00;}while#defineTIMER#define#defineTIMER#define (T##timer##CTL=(val)?T##timer##CTL|0X10:#defineTIMER3_SET_MODE(val)T4CTL#defineTIMER3_SET_MODE(val)T4CTL&=\\\/*UP//*freeruning*/*/*/\#defineT4_MODE_FREE #defineT4_MODE_DOWN #defineT4_MODE_MODULO0X02#defineT4_MODE_UP_DOWNvalT44CC253084来改变小灯的状态,T420001000次IEN0,IEN1等寄存器。 参见CC2530实验1P1SEL参见CC2530实验1P1DIR参见CC2530实验1 参见CC2530实验7 参见CC2530实验7 参见CC2530实验7 参见CC2530实验7 参见CC2530实验void{P1DIR=led1=led2= //初始化T4TIMER34_ENABLE_OVERFLOW_INT(4,1);//T4中断 //自动重装 //启I/0P10,P11LEDT416T4#pragmavector=#pragmavector=interruptinterruptvoid{IRCON=if(counter<1000)counter++;//1000次中断LED闪烁一{counter= //计数清GlintFlag //GlintFalg1,LED闪}}do{T##timer##CTL=EA=1;T4IE=(val)?T##timer##CTL|0x08:T##timer##CTL&~0x08;\\T4#defineTIMER34_INIT(timer)\do#defineTIMER34_INIT(timer)\do T##timer##CTL=0x06;\T##timer##CCTL0=0x00;\T##timer##CC0=0x00;\T##timer##CCTL1=0x00;\T##timer##CC1=0x00;}while#defineTIMER#define#defineTIMER#define (T##timer##CTL=(val)?T##timer##CTL|0X10:功能:timer34。val1,定时器正常运行,val0,定时器停止#define #define T4CTL&=~0X03;\\*/*//*UP/*//*freeruning\#defineT4_MODE_FREE #defineT4_MODE_DOWN #defineT4_MODE_MODULO0X02#define#defineT4_MODE_FREE #defineT4_MODE_DOWN #defineT4_MODE_MODULO0X02#defineT4_MODE_UP_DOWNCC25309LED的状态,但这里两个按键不是做键盘用,而是产生中断触发信按下液晶扩展板上“OK”键S6,CC2530模块上1个LEDP0,P0SEL,P0DIR,P0INP,P0IEN,P0CTL,IEN2,P0IFG等寄 P0IEN(P01口中断掩码70P070关中断,160P060关中断,150P050关中断,140P040关中断,130P030关中断,120P020关中断,110P010关中断,100P000关中断,1PICTL(P口中断控制寄存器7—0读600最小驱动能力,1500关中断,1开中断400关中断,1开中断300关中断,1开中断20P2(0-4)0上升沿触发,110P1(0-7)0上升沿触发,100P0(0-7)0上升沿触发,11IEN2(—读500关中断,140P10关中断,13010关中断,12000关中断,110P20关中断,1000关中断,1voidvoid{RLED=led2=P0INP&~0X0c;//有上拉、下拉P1INP&=~0X40;//选择上拉P0IEN|=0X30;PICTL|=EA=IEN1|=0X20;P0IFG|=//P04//P0IE=//P12P13中断标志清}I/0P04,P03LEDP0interruptvoid{//interruptvoid{//按键中{P0IFG=0;RLED=!RLED;}P0IF= }P04,P03触发中断的时候将绿色LEDADCC253010CLKCONSTA,IEN0,U0DUB,ADCCON1,ADCCON3,ADCH,ADCL等寄存器。 5CLKCONCMD(时钟控制寄存器71写32kHz0:32K晶振,1:32KRC61写0:32M晶振,1:16MRC写定时器计数时钟分频(该时钟频不大于OSC决定频率000001010011110写000:32001:16010:8011:4100:2101:1110:500111:25071读32kHz0:32K晶振,1:32KRC61读0:32M晶振,1:16MRC读(该时钟频不大于决定频率000001010011100101110读000:32001:16010:8011:4100:2101:1110:500111:250SLEEPCMD(睡眠模式控制寄存器7—0读60写50写写00011020写0010写000110117—0读60T1I/O01,150T3I/O01,140T4I/O01,1—10101,100001,1U0CSR(0控制&状态寄存器700SPI模式,1UART600关闭接收,150SPI0SPI主,1SPI400没有帧错误,1300没有校验错误,1200没有接收到数据,1接收到一字节数100没有发送,1最后一次写入00读0串口闲,1U0GCR(0常规控制寄存器70SPI0低电平空闲,160SPI0CPOLCPOLCPOLCPOL1由非CPOL跳向CPOLCPOL500低位在先,1在U0BAUD(0波特率控制寄存器BAUD_EU0BUF(0收发缓冲器70ADC ADC进行中,1ADC60AD转换(1表示当前正AD转换)0没有转换,1启动AD转换AD000110T101100普通模式(13x打开01LFSR-AD 1.25V电压 AIN7A/D 8位 10位 12位1114A/DADCA/D0000000010010 01000101 01111000AIN0-1001AIN2-1010AIN4- 1110 1/3voidDelay(uintn)1voidinitUARTtest(void);函数原型:voidvoid{CLKCONCMD&=~0x40;CLKCONCMD&=~0x47;SLEEPCMD|=//晶//TICHSPD128分频,CLKSPD不分//RCPERCFG //位置1P0P0SEL //P0U0CSR|= U0GCR|= //baud_e=U0BAUD| UTX0IF=U0CSR|= //允许接IEN0| }P000voidUartTX_Send_String(char*Data,intvoidUartTX_Send_String(char*Data,int{intj;{U0DBUF=*Data++;while(UTX0IF==UTX0IF=}}*data为发送缓冲的指针,len为发送数据的长度,在初始化串口initTempSensor(void){initTempSensor(void){DISABLE_ xdata*)0xDF26)=}

UINT16accValue;UINT16value;accValue=0;for(i=0;i<4;i++{{ADC_SINGLE_CONVERSION(ADC_REF_1_25_V|ADC_14_BIT|ADC_TEMP_SENS);value=ADCL>>value|=(((UINT16)ADCH)<<}value=accValue>>2;//devideby4return}4ADAD结果转换为温度返回。#define#define (((ADC_VALUE)>>4)-CC2530IEN0,U0DUB,ADCCON1,ADCCON3,ADCH,ADCL等寄存器。 voidDelay(uintn)1voidinitUARTtest(void)10voidvoidUartTX_Send_String(char*Data,intlen)void{{//P1P1DIR=//P1控制led1=led2=//ADCH&= //EOC标 //14ADCCON1 //停止ADCCON1|=0X40;//},ADADCCC2530IEN0,U0DUB,ADCCON1,ADCCON3,ADCH,ADCL等寄存器。 voidDelay(uintn)1voidinitUARTtest(void)10void{//P1outP1DIR=0x03;void{//P1outP1DIR=0x03;led1=led2=//P1控制//ADCH&= //EOC标 //单次转换,参考电压为电源电压,对AVDDA/D转//14ADCCON1=0X30; ADCCON1|=0X40;//A/D}P10,P11LEDAD,ADUARTCC253013Test57600。U0GCR,U0BAUD,IEN0,U0DUB等寄存器。 voidDelay(uintn)1voidinitUARTtest(void);函数原型:voidvoid{CLKCONCMD&= //晶 CLKCONCMD&= //TICHSPD128分频,CLKSPD不分SLEEPCMD| //RCPERCFG //位置1P0P0SEL //P0P2DIR&=~0XC0; //P0优先作为串口0U0CSR|=0x80; //UART方式U0GCR|= U0BAUD| UTX0IF=}函数功能:初始化串口0,将I/O 到P0口,P0优先作为串口0使用,UART工作方式,波特率为57600。使用晶振作为系统时钟源。voidvoidUartTX_Send_String(char*Data,int{intj;{U0DBUF=*Data++;while(UTX0IF==UTX0IF=}}函数功能:串口发字串,*Data为发送缓存指针,len为发送字串的长度,只能是在初始化函voidinitUARTtest(void)之后调用才有效。发送完毕后返回,无返回值。CC253014PC在PC上从串口向CC2430模块发送命令,即可控制LED灯的亮灭,控制数据的格式为“灯开|关#”,LED1,LED2,0是关灯,1是开灯,如打开LED2令是“21#” void{voidDelay(uintn)void{CLKCONCMD&=~0x40; while(!(SLEEPSTA&0x40)); CLKCONCMD&= //TICHSPD128分频,CLKSPD不分SLEEPCMD| //RCPERCFG //位置1P0P0SEL //P0P2DIR& //P0U0CSR|= U0GCR|= U0BAUD| UTX0IF=} 到P0口,P0优先作为串口0使用,UART工作方式voidUartTX_Send_String(char*Data,int{intvoidUartTX_Send_String(char*Data,int{intj;{U0DBUF=*Data++;while(UTX0IF==UTX0IF=}}函数功能:串口发字串,*Data为发送缓存指针,len为发送字串的长度,只能是在初始化函voidinitUARTtest(void)之后调用才有效。发送完毕后返回,无返回值。interruptvoidinterruptvoid{URX0IF=temp=}temp变量,然后在主程序中去处理接收到的数据。CC253015:PCPCCC25303030字节,则以“#“为 voidDelay(uintn)1voidinitUARTtest(void)15voidUartTX_Send_String(char*Data,intlen)15voidUART0_ISR(void)15CC253016PC利用CC2430定时器1 -读50P00关中断,14040关中断,13030关中断,12020关中断,11010关中断,100DMA0关中断,1T1CCTL0(T10捕获/比较寄存器70T100捕捉引脚输入,1RF61T100关中断,1T10T3CC0时的发生事件0001(发生比较时0010(发生比较时010(0UP/DOWN模式下发生(0UP/DOWN模式下发生101预留,110预留,11120T100捕获,11T1000011011T1CC0H(T10捕获值/比较值高字节寄存器7T10捕获值/T1CC0L(T10捕获值/比较值低字节寄存器7T10捕获值/voidDelay(uintn)1voidinitUARTtest(void)15voidUartTX_Send_String(char*Data,intlen)15voidUART0_ISR(void)15void{T1CCTL0void{T1CCTL0=//T1CCTL0//T1ch0T1CC0H0x03;T1CC0L//0x0400=1000D)T1CTL|=0X02;//start//使用比较模式MODE10(B)IEN1|=0X02;IEN0|=//T1中}void说明,T1CC00X03E8=10002501s。voidvoid{PERCFG=P0SELvoid{PERCFG=P0SEL=//位置1P0//P0用作串U0CSR|=U0GCR|=U0BAUD|=UTX0IF=U0CSR|=IEN0|=//允许接}{CLKCONCMD=//TICKSPD1110.25M}interruptvoid{IRCON&~0x02;//清中断标志if(counter==interruptvoid{IRCON&~0x02;//清中断标志if(counter=={counter=timetemp led1 //调试指示}}interruptvoidinterruptvoid{URX0IF=URX0IF=temp=}PM0PM1,PM2,PM3PM3功耗最低。 -1-0读00voidDelay(void); 参见实验1void 参见实验#definedo#definedo\\if(mode==0) {SLEEPCMD&=~0x03;}\elseif(mode==3){SLEEPCMD|=0x03;}\else{SLEEPCMD&=~0x03;SLEEPCMD|=mode;}\PCON|=0x01; }whileCC2530CC2530模块的供电电CC253018本次实验使能外部I/O中断(按下液晶扩展板的S6或S7按键)唤醒CC2430,每次唤醒LED闪烁10次,然后进入低功耗模式,在进入PM3之前程序会将两个LED灯关闭。在应用中也可以不关闭以指示CC2430处于低功耗模式,可以中断激活。P2INP,CLKCONCMD,SLEEPCMD等寄存器。 P2INP(P2输入模式寄存器70P2口上/0上拉,160P1口上/0上拉,150P0口上/0上拉,140P2_40上拉,130P2_30上拉,120P2_20上拉,110P2_10上拉,1void voidvoid{P1DIR=0X03;RLED=1;YLED=P1SEL&=~0X0C;P1DIR&=P1INP&~0X0c;//P2INP&~0X40;选择上P1IEN|= //P12PICTL|=0X02; EA=1;IEN2|=0X10;//P1IE=P1IFG|= //P12{uchari,{uchari,j;i=sel;{SLEEPCMD&=0xfc;SLEEPCMD|=i;PCON=0x01;}}{PCON=}}selsel0-3CPUPM0-PM3PM0-CC2530190x0000000xffffffSTST[2-0]0x000f005PM2,这样周而复始的唤醒工作然后睡眠。系统睡眠832秒,这已经是最长睡眠时间。实验中操作了的寄存器有P1,P1DIR,P1SEL,IEN0,ST2,ST1,ST0,CLKCONCMD,SLEEPCMD等寄存器。 睡眠定时器计数/比较值[23-16]ST计ST0。睡眠定时器计数/比较值[15-8]STST0。睡眠定时器计数/比较值[7-0]ST计数值,ST0,写寄存器就后ST0。void{ST2=void{ST2=0X00;ST1=0X0f;ST0=0X00;EA1;//开中断STIE=1;STIF=}函数功能:打开睡眠定时器SLEEPCMDTIMER(ST)ST的中断发生时间为计数值0x000f00时。void{ucharvoid{ucharjj=10;{RLED=}}LED5interruptvoidinterruptvoid{STIF=STIF=}#define\\\{\P1SEL&=\P1DIR|=\RLED=\GLED=\}\\{\P1DIR&=\}}#defineRLEDP1_0#defineGLED\#defineSET_MAIN_CLOCK_SOURCE(source)\do{ if(source) CLKCONCMD|=0x40;\SLEEPCMD|=/*关掉不用的*/\\\}elseSLEEPCMD&=\ CLKCONCMD&~0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论