




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
518AVR開始。誠然,這是一條比較合理的路徑,但是,我們就第所以,CC253051單片機(jī)可以說是一樣的。換句話來說,現(xiàn)在我們完全可C253021MCU的編程,所以,我們相信,以后業(yè)界進(jìn)入MCU學(xué)習(xí)會是從Zigbee開始。這是因為Zigbee除了可以機(jī)編程之外,還可以應(yīng)用協(xié)議棧來完成無線數(shù)據(jù)的收發(fā)。所謂協(xié)議棧,就是生產(chǎn)廠商,為用戶事先寫好的函數(shù)庫,用戶可以直接調(diào)用現(xiàn)現(xiàn)用戶想達(dá)到的功能。所謂機(jī)編程,就是說,用戶可以不應(yīng)用協(xié)議棧,來實現(xiàn)編程,也就是說,所有函數(shù)用戶自己編寫。所以,ZigbeeMCU的為了讓有的初學(xué)者能輕松學(xué)習(xí)MCU,進(jìn)入弱電控制領(lǐng)域,為了讓有基礎(chǔ)的愛好者快捷地學(xué)好用好Zigbee,秉火開發(fā)出一套Zigbee學(xué)習(xí)套件。例程/組成:是:本是針對例程寫出來的,也就是最終的目的是希望用戶掌握CC2530相關(guān)應(yīng)用程序的編寫,所以,用戶可以根據(jù)自己的需要來選擇性學(xué)習(xí)本。ZigbeeTI為用戶igbee協(xié)議棧,感覺Zigbee協(xié)議棧像程序,又不像,很是。若是程序,只需添加應(yīng)其次,Zigbee協(xié)議棧如何應(yīng)用?當(dāng)需要數(shù)據(jù)通信時,需要做的是:第一,調(diào)用組網(wǎng)函數(shù)給你組建你想要的網(wǎng)絡(luò),2ZigZigbee 下 :淘寶::http:/前 Zigbee開 總 目 第1 TI協(xié)議棧Zstack-CC2530-2.3.0-1.4.0的安 IAR如何程 第2 CC2530的IO端口介 CC2530與51單片機(jī)比 第3 CC2530通用IO詳 第4 第5 CC2530的Timer1介 第6 第7 第8 第9 CC2530的Usart介 Uart發(fā) 第10 Usart接 第11 Usart發(fā) Usart接 第12 CC2530的ADC介 第13 CC2530的ADC輸入介 第14 CC2530的DMA介 CC2530的DMA操 第15 第16 第17 第18 第19 第20 第21 DS18B20介 CC2530DS18B20溫度 2.20.5實驗現(xiàn) 第22 DHT11介 CC2530DHT11溫濕度 第23 第24 第25 第26 第27 如何獲取TI例 CC2530BasicRF工程文件放置說 BasicRF層介 第28 第29 PacketErrorRatetester工作流 PacketErrorRatetester流程 第30 第31 基于協(xié)議棧的Usart實 第32 第33 第34 第35 第36 第37 第38 第39 第40 第41 第42 基于協(xié)議棧的 第43 第44 第45 基于協(xié)議棧的DS18B20溫度檢 第46 基于協(xié)議棧的DHT11溫濕度檢 第47 第48 第49 基于協(xié)議棧的OLED測 第50 ZigbeeZigbee建立一個工程以及如何者只要看看就可以了,以后有不懂翻開看看即可。1Zigbee力,Zigbee協(xié)議在2003年中通過后,于2004正式問世了。一個增強(qiáng)型的8051內(nèi)核,從而降低了成本。每塊CC2530大約15塊RMB。1.1.1igbee網(wǎng)絡(luò)中通過自動路由的方式進(jìn)行傳輸,從而保證了信息傳輸?shù)目煽啃浴36?。Zigbee、藍(lán)牙和WIFI時延對比如表1.1.1所示。睡眠→網(wǎng)絡(luò)容量大:Zigbee1.1.2所示,由一65000高性:64位號和支持AES-128加密Zigbee網(wǎng)絡(luò)中的設(shè)備可分為協(xié)調(diào)器(Coordinator)、路由(Router)、終端(EndDevice)Zigbee1.1.3
四到五年,每個家庭將擁有50Zigbee器件,最后將達(dá)到每個家庭150個。 圖 IAR文TIZstack-CC2530-2.3.0-1.4.01.2.4CH340驅(qū)動的安裝文件,雙擊“SETUP.EXE”進(jìn)行安裝即H340COM口。.2IARInformationCenterforInMCS-511.3.3project--->CreateNewProject,就會彈出圖1.3.4的窗口。1.3.3圖1.3.4新建工程給開發(fā)環(huán)境取個名字(可任意取),這樣project就建立了。圖1.3.7所示,然后保存文件,如圖1.3.8所示。1.3.61.3.71.3.8步驟5、如圖1.3.9所示,CC2530-DEMO-Debug將剛才保存的main.c文件添加到CC2530-DEMO-Debug里,添加完成后如圖1.3.10所示。步驟6、如圖1.3.11所示,點擊project--->option進(jìn)入圖1.3.12所示的窗口里1.3.111.3.121.3.13General1.3.18的窗口,選擇lnk51ew_cc2530F256.xcl.183.20所示的窗口,選擇io8051.ddf.201.3.211.3.22IARIAR如何程1.4.1LED21.4.21.4.3開始1.4.4第二部分:機(jī)實本書開篇講述中,說明了Zigbee將會是初學(xué)者進(jìn)入微控制器領(lǐng)域的開始,現(xiàn)在,而實驗18~25則是秉火Zigbee自添加的板載外設(shè)。1、1、13、17、睡眠喚醒20、溫度傳感器21、溫濕度傳感器22、2324、OLED_1.3寸25、射頻打卡2能,知道怎么操作IO。CC2530IOCC253021個數(shù)字輸入/I/OI/O或者配I/O21I/O輸具備上拉或下拉能21個I/O引腳都可以用作于外部中斷源輸。因此如果需要外部設(shè)備可以產(chǎn)生實驗要講解的;IO中斷將會在按鍵的中斷實驗里講解;IO將會在定時器、串口、ADC里都會有講解。CC2530IO的使用,都是要通過配置相應(yīng)的寄存器來實現(xiàn)相應(yīng)功能的,故在附錄里我們給出操作IO的所有寄存器的類型及其具體內(nèi)容。CC253051接給某個IO端口賦值,或者直接某個IO端口的輸入電平。下面給出51單片機(jī)與CC2530管腳輸入輸出對比表:(如:inttemp;
2.1.2LEDCC2530IO端口的使用,是要配置寄存器的,那么接下來,我所以,我們只需要改:P1DIR|=【注意:(1)0x01=00000001;2)|=”是先執(zhí)行按位或運(yùn)算,再賦值3)P1DIR|0x01;最終結(jié)果是:bit0相或后得1,其它位保持不變?!?include#defineuintunsigned#defineucharunsignedchar#defineLED1 #defineLED2 #defineLED3 8910功能描述LED_IO輸入?yún)?shù)輸出參數(shù):void{P1DIR| LED1 LED2 LED3 2326功能描述輸入?yún)?shù)xmsi=xmsi輸出參數(shù)voidDelayms(uint{uintfor(i=xms;i>0;i-- for(j=587;j>0;j--3841:功能描述LED測試(IO的輸出使用輸入?yún)?shù)輸出參數(shù):voidmain(void{IO_Init Delayms2000//2swhile(1)LED1=~LED2=~LED3=~ Delayms(500); 62存器進(jìn)行包裝,從而提供一個人性化的名稱給用戶使用,比如P1_0、P1DIR等等。三個LED燈在閃爍。2.1.4LEDI/O21I/OI/O或外部設(shè)備附:管理IOIEN0(0xA8)IEN1(0xB8)IEN2(0x9A)P0P1P2PERCFGAPCFGIOP0SEL0P1SEL1P2SEL2P0DIR0P1DIR1P2DIR2P0INP0P1INP1P2INP2P0IFG0P1IFG1P2IFG2PICTLP0IEN0P1IEN1P2IEN2PMUXMUXOBSSEL0123453章KEY(查詢方式CC2530IO端口的功能中,我們用的初步掌握了CC2530IOLED實驗里,主要是介紹了通用IO的輸出,而今天,就給大家講解通用IO的輸入與輸出。I/O38012,表示P0、P1P2。其中,P0P18P25位可用。所有的SFRP0P1P2位尋址和字節(jié)尋址。每個端口引腳都可以單獨設(shè)置為通用I/O或外部設(shè)備I/O。P1.0P1.120mA的輸出驅(qū)動能力之外,所有的輸出均具備4mA的驅(qū)動能力。PxSELx0~2I/OI/O信號。作為缺省的情況,每當(dāng)復(fù)位之后,所有的數(shù)字輸入/輸出引PxDIR來設(shè)置每個端口PxDIR1,其對應(yīng)的引腳口就被設(shè)置當(dāng)端口寄存器P0、P1和P2的值,不管引腳配置如何,輸入引腳上的邏輯JBC,CPL,INC,DEC,DJNZ,MOV,CLRSETB。在一個端口寄存器上操作,以P0、P1P2中一個獨立的位,寄存器的值,而不PxINP1。I/OP1.0P1.1沒有上拉/下拉功能。注意配置為外設(shè)I/O信號的引腳沒有上拉/下拉功能,即使外設(shè)功能是一個輸入。PM1、PM2PM3I/OPM1/PM2/PM3I/O模式和輸出值(如果可用的話否否是2.2.1用查詢方式來判斷按鍵是否被按下,如果按下,LED1亮,再按下,LED1滅,如
2.2.2KEYP0.4IO、上拉、輸入;P1DIR|=1#include23#defineuintunsigned4#defineucharunsignedchar#defineLED1 #defineLED2 #defineLED3 #defineKEY1 13功能描述輸入?yún)?shù)xmsi=xmsi輸出參數(shù):voidDelayms(uint{uintfor(i=xms;i>0;i-- for(j=587;j>0;j--2528功能描述LEDIO輸入?yún)?shù)輸出參數(shù):void{P1DIR| LED1 LED2=LED3=4144功能描述輸入?yún)?shù)輸出參數(shù)0:無按鍵按下1uchar{if(KEY1==0) if(KEY1==0)return return 6164函數(shù)名功能描述輸入?yún)?shù)輸出參數(shù)返回值void{ while(1)if(KeyScan()) 81存器進(jìn)行包裝,從而提供一個人性化的名稱給用戶使用,比如P1_0、P1DIR等等。第28~41行:通用IO輸入(KEY)和輸出(LED)的初始化,上面已有講解。64~81IOwhile(1)LED的BUT1LED燈亮滅狀態(tài)的切換。P1.0P1.120mA的輸出驅(qū)動能力之外,所有的輸出均具備4mA的驅(qū)動能力。PxDIR來設(shè)置每個端口PxDIR1,其對應(yīng)的引腳口就被4KEY(中斷方式IO中斷的機(jī)制、CC2530的中斷或下降沿觸發(fā)。P0、P1P2IENl-2寄存器內(nèi)的端口所IENI.P0IE:P0IEN2.PIIE:P1IEN2.P2IE:P2SFRP0IEN、P1IENP2IENI/OI/O引腳使能時都有當(dāng)中斷條件發(fā)生在I/O引腳之一上面,P0-P2中斷標(biāo)志寄存器P0IFG、P1IFGP2IFG中相應(yīng)的中斷狀態(tài)標(biāo)志將設(shè)置為1。不管引腳是否設(shè)置了它的中斷使能位,中斷必須在清除CPU端口中斷標(biāo)志(PxIF)之前被清除。P0IENP0P1IEN:P1P2IEN:P2PICTL:P0、P1P2P0FG:P0P1IFG:P1P2IFG:P2圖2.3.1流程圖用中斷方式來判斷按鍵是否被按下,如果按下,LED1亮,再按下,LED1滅,如2.3.2KEYIEN0、IEN1IEN2IEN0EA1Nx、EA、PxSEL、PxDIR、PxINP這些寄存器(或其相關(guān)位LED燈控制端口配置的是PxSEL、PxDIR、PxINP這三個寄存器:2.3.1Px0P1DIR| //P1P0IEN|=0X10; IEN1|=0X20; //允許P0口中斷PICTL|=0X01; P0IFG=0x00; EA=1; 1#include23#defineuintunsigned4#defineucharunsignedchar6defineLED1 7defineLED2 8defineLED3 911函數(shù)12void 13void 14void 17功能描述輸入?yún)?shù)xmsi=xmsi輸出參數(shù):voidDelayms(uint{uintfor(i=xms;i>0;i-- for(j=587;j>0;j--2932功能描述LED_IO輸入?yún)?shù)輸出參數(shù):void{P1DIR| LED1 LED2 LED3 4548功能描述KEY_IO初始化(中斷方式配置輸入?yún)?shù)輸出參數(shù):void{P0IEN|0x10;//P0_4IEN1| PICTL|0x01;//P0IFG EA 6265功能描述輸入?yún)?shù)輸出參數(shù):#pragmavector //格式:#pragmavectorinterruptvoid 74 P0IFG P0IF=8184:功能描述KEY測試(IO中斷的使用輸入?yún)?shù)輸出參數(shù):void{while}存器進(jìn)行包裝,從而提供一個人性化的名稱給用戶使用,比如P1_0、P1DIR等等。第11~14行:函數(shù)。第32~45行:通用IO輸出(LED)初始化函數(shù);第65~81行:通用IO中斷的服務(wù)函數(shù);行初始化,然后在while(1)大循環(huán)里等待中斷發(fā)生。LED燈亮滅狀態(tài)的切換。KEY1KEY1I/OP0_4P0端口將會IEN1D51P0IEND41時,對應(yīng)的中斷使能位中斷使能,則根據(jù)中IEN1P0的中斷使能。當(dāng)IEN1中設(shè)置了P0口中斷時(D5=0無論P(yáng)0IEN中對應(yīng)的使能位設(shè)置成還是使能,該I/O發(fā)出的中斷請求CPU都不予接受。例InitKey()IEN1|=0X20;代碼行注釋掉,KEYLED12.3.7datasheet可知,0X6BP0口的中斷向量,#defineP0INT_VECTORVECT(13,0x6BP0P0INT_VECTOR。同理,#pragmavectorinterruptvoid任意函數(shù)名{}5、啟用通用IO5Timer1+LED(查詢方式的捕捉來實現(xiàn)外設(shè)IO(定時器)的功能,而是主要講解Timer1查詢方式的使用。CC2530的Timer1 個I/O引腳。定時器用于范圍廣泛的控制和測量應(yīng)用,可用的五個通道的正計數(shù)/倒計11,8,32128DMACC2530Timer1CC2530Timer1的所有功能中,我們16其中,16位計數(shù)器將會在紅外(VS1838)里講解;定時器1操作(查詢方式)就在本實驗里講解;定時器1中斷將會在Timer1+LED(中斷方式)里講解。
圖;而溢出標(biāo)志IRCON是我們用于查詢的,如圖。CC25302分頻,即系統(tǒng)將工作時鐘T1CTL0x0d;//1280x00000xFFFF2.4.3
2.4.41#include23#defineuintunsigned4#defineucharunsignedchar7defineLED1 8defineLED2 9defineLED3 11函數(shù)12voidDelayms(uint 13void 14voidInitT1(void); 17:功能描述Timer1測試(Timer1查詢方式的使用輸入?yún)?shù)輸出參數(shù):void{uchar while(1)ifIRCON>0ifcount)==1 LED1 LED2=LED3= 4245功能描述輸入?yún)?shù)xmsi=xmsi輸出參數(shù):voidDelayms(uint{uintfor(i=xms;i>0;i-- for(j=587;j>0;j--5760功能描述LED_IO輸入?yún)?shù)輸出參數(shù):void{P1DIR|0xff;//P1LED1 LED2=LED3=7376函數(shù)名功能描述輸入?yún)?shù)輸出參數(shù)返回值void{T1CTL 86存器進(jìn)行包裝,從而提供一個人性化的名稱給用戶使用,比如P1_0、P1DIR等等。17~42IOTimer1初始化函數(shù)進(jìn)ED的狀態(tài),每改變一次需要1s。LED燈每隔一定時間切換一次亮滅狀態(tài)。1,8,32128DMATH1TL1T1CTL1T1STAT1T1CCTLn1n捕獲/H–定時器1通道n捕獲/比較L1n捕獲/【說明:TIMIF.OVFIMTIMIF34寄6Timer3+LED(查詢方式負(fù)責(zé)任務(wù)輪詢時計時用的;Timer3、Timer4是相類似的,也就是性能以及操作使用都是基本相通的,所以,本實驗將會講解用查詢的方式來使用Timer3。CC2530的Timer3、Timer4348位的定時器。每個定時器有兩個獨立的比較通道,每個通道上使用一個I/O引腳。3/41,2,4,8,16,32,64,128DMA圖圖CC2530Timer3、Timer4CC2530Timer3、834操作(查詢方式)就在本實驗里講解;34中斷將會在Timer3+LED(中斷方式)里講解。Timer3、Timer4的所有寄存器的類從0x000xFF反復(fù)計數(shù)。.4它有沒有置位的,在上個實驗中,我們直接查詢IRCON,這是可以的,但是如果有幾個定時器申請中斷時,直接查詢IRCON會有,所以,本實驗給出另一個更為嚴(yán)謹(jǐn)?shù)淖龇ǎ褪遣樵僒3IF。圖為IRCON寄存器。1#include23#defineuintunsigned4#defineucharunsignedchar7defineLED1 8defineLED2 9defineLED3 11函數(shù)12void 13voidInitT3(void); 16:功能描述Timer3測試(Timer3查詢方式的使用輸入?yún)?shù)輸出參數(shù):void{uchar while(1)if(T3IF>0ifcount)==254 LED1 LED2=LED3=}}}}44函數(shù)名功能描述輸入?yún)?shù)輸出參數(shù)返回值void{P1DIR|0xff;//P1LED1 LED2=LED3=5760函數(shù)名功能描述輸入?yún)?shù)輸出參數(shù)返回值void{T3CTL 70存器進(jìn)行包裝,從而提供一個人性化的名稱給用戶使用,比如P1_0、P1DIR等等。16~41IOTimer3初始化函數(shù)進(jìn)ED的狀態(tài),每改變一次需要1s。LED燈每隔一定時間切換一次亮滅狀態(tài)。DMAT0xCA)3T3CCTL00xCC)30捕獲/T3CC00xCD)30捕獲/T3CCTL10xCE)31捕獲/T0xEA)4T4CCTL00xEC)40捕獲/T4CC00xED)40捕獲/T4CCTL10xEE)41捕獲/T4CC10xEF)41捕獲/TIMIF(0xD8)–定時器1/3/4中斷/標(biāo)7Timer3+LED(中斷方式在上一節(jié)實驗里,我們講解了用查詢方式來使用Timer3;另外,還提及到關(guān)于Timer3和Timer4CC2530為這兩個定時器各分配了一個中斷向量。當(dāng)以下定時器之一發(fā)生時,SFRTIMIF34TIMIF.
Timer3寄存器有:T3CTL,T3CCTL0,T3CC0,T3CCTL1,T3CC1。而我們需要0到0xFF反復(fù)計數(shù),如圖所示。所以,控制字為
2.6.2 //128T3CTL|=0x08 T3CTL&=~0X03; T3IE=1; //開Timer3中斷EA T3CTL 【注意:(1)T3CTL&=~0X03;這條語句理解為:0X03=00000011,則~0X03=1111(2)由于是128分頻,則計一次數(shù)需要時間t=128/ 的延時,那么128/ 為自動重裝0x00---0xFF,即產(chǎn)生一次溢出中斷計數(shù)256次,而我們現(xiàn)在是想它計算65200次,所以,我們要累加254次溢出中斷才讓LED1取反。】1#include23#defineuintunsigned4#defineucharunsignedchar7defineLED1 8defineLED2 9defineLED3 11函數(shù)12voidDelayms(uint 13void 14void 17uintcount=0;//20:功能描述Timer3測試(Timer3中斷方式的使用輸入?yún)?shù)輸出參數(shù):void{ while(1)}}功能描述輸入?yún)?shù)輸出參數(shù):#pragmavectorT3_VECTOR//Timer3interruptvoid{IRCON ifcount)>254 count }}功能描述輸入?yún)?shù)xmsi=xmsi輸出參數(shù):voidDelayms(uint{uintfor(i=xms;i>0;i--for(j=587;j>0;j--}功能描述LED_IO輸入?yún)?shù)輸出參數(shù)返回值void{P1DIR|0xff;//P1LED1 LED2=LED3=8487函數(shù)名功能描述輸入?yún)?shù)輸出參數(shù)返回值void{T3CTL|=0x08T3CTL&=T3IE=EA=102T3CTL存器進(jìn)行包裝,從而提供一個人性化的名稱給用戶使用,比如P1_0、P1DIR等等。行初始化,然后在while(1)大循環(huán)里等待定時器中斷的到來。2540.5sLEDcount0.LED燈每隔一定時間切換一次亮滅狀態(tài)。#pragmavector=interruptvoid任意函數(shù)名{}8Timer1+LED(中斷方式計數(shù)器達(dá)到最終計數(shù)值(溢出或回到零寄存器狀態(tài)寄存器T1STAT包括最終計數(shù)值和五個通道比較/捕獲的中斷標(biāo)志。僅當(dāng)設(shè)置了相應(yīng)的中斷位和IEN1.T1EN時,才能產(chǎn)生一個中斷請求。中斷位是n個通道的T1CCTLn.IM和溢出TIMIF.OVFIM。如果有其它未決中斷,相應(yīng)的中斷標(biāo)志,使能一個中斷位將產(chǎn)生一個新的中斷請求。
驗配置的是Timer1的控制寄存器。具體如何配置看圖?!咀⒁猓河捎谑?28分頻,則計一次數(shù)需要時間t=128/ ,如果我們希望得到一個0.5s的延時,那么128/ 所以,我們要累加1次溢出中斷才讓LED1取反?!?.7.2T1IE1;(Timer1中斷EA1;(開總中斷1#include23#defineuintunsigned4#defineucharunsignedchar7defineLED1 8defineLED2 9defineLED3 11函數(shù)12voidDelayms(uint 13void 14void 17uintcount=0;//20:功能描述Timer1測試(Timer1中斷方式的使用輸入?yún)?shù)輸出參數(shù):void{ while(1)}3336功能描述輸入?yún)?shù)輸出參數(shù):#pragmavectorT1_VECTOR//Timer1interruptvoid45IRCON ifcount)==1 count 5356功能描述輸入?yún)?shù)xmsi=xmsi輸出參數(shù):voidDelayms(uint{uintfor(i=xms;i>0;i-- for(j=587;j>0;j--6871功能描述LED_IO輸入?yún)?shù)輸出參數(shù):void{ P1DIR|=0x13;//P1_0、P1_1、P1_4LED1 LED2 LED3 8487功能描述Timer1輸入?yún)?shù)輸出參數(shù):void{ T1IE=EA=99存器進(jìn)行包裝,從而提供一個人性化的名稱給用戶使用,比如P1_0、P1DIR等等。行初始化,然后在while(1)大循環(huán)里等待定時器中斷的到來。20.5sLEDcount0.LED燈每隔一定時間切換一次亮滅狀態(tài)。#pragmavector=interruptvoid任意函數(shù)名{}9Usart(發(fā)送和通用IO中斷,今天,就給大家講解外設(shè)IO(Usart)。Usart1向電腦發(fā)送板載按鍵信息。CC2530的UsartTSPIUsartI/O引腳。由CC2530datasheet可知:UART0對應(yīng)的外部設(shè)備IO引腳關(guān)系為:P0_2------RX, UART1對應(yīng)的外部設(shè)備IO引腳關(guān)系為:P0_5------RX, CC2530Usart的所有功能中,我們用得最多的就是:Uart模式CC2530Usart的使用,都是要通過配置相應(yīng)的寄存器來實現(xiàn)相應(yīng)功能的,故在附錄里我們給出操作Usart的所有寄存器的類型及其具體內(nèi)容。UARTUART2RXD、TXDRTSCTS4線。UART模式的操作具有下列特點:89LSBMSB1個起始位、8個數(shù)據(jù)位、19位數(shù)據(jù)或者奇偶校驗位再1289UART操作由USART控制和狀態(tài)寄存器UxCSR以及UART控制寄存器UxUCR來就選擇了UART模式。SPI模式中,USART34線接口與外部系統(tǒng)通信。接口包含引腳MOSI、MISO、SCK和SS_N。SPI3線(主要)4SPILSBMSBUxCSR.MODE0SPISPI模式中,USART可以通過UxCSR.SLAVE位來配置SPI為主模式或者從模式。USART收/UxBUF寫入數(shù)據(jù)時,該字節(jié)發(fā)送到輸出引腳而當(dāng)字節(jié)傳送結(jié)束時為低。當(dāng)傳送結(jié)束時,UxCSR.TX_BYTE位設(shè)置為1。1,就在電腦上顯示“Key1hasbeenpresseddown.”,Key2
2.8.2CC2530②CC25304個時鐘,分別為:32KHzRCOscillator和32.768KHz晶振,還有內(nèi)部自帶的16MHzRCoscillator32MHzcrystaloscillator。CC2530systemclock32MHzcrystaloscillator,或者內(nèi)部Oscillator,32KHz時鐘最主要使用在SleepTimerWatchdogTimer上。短,正常運(yùn)行后成32MHz,用于RF。鐘為32MHzCLKCONCMD&= //32MHzcrystaloscillatorwhile(CLKCONSTA&0x40); //等待晶振穩(wěn)定CLKCONCMD&=~0x47; //設(shè)置系統(tǒng)主時鐘頻率32MHZPERCFG=0x00; //位置1P0口P0SEL //P0_2,P0_3用作串口(IO復(fù)用P2DIR&= //P0UART0U0CSR| //UARTU0GCR|= //U0GCRU0BAUDU0BAUD| //UTX0IF=0; //UART0TX1收發(fā)時候)②⑥U0GCR、式中:f16MHzRCOSC32MHzXOSC2.8.132MHz系統(tǒng)時鐘。真M誤差6789U0GCR|= U0BAUD|=1:功能描述USART測試(USART0發(fā)送數(shù)據(jù)給電腦輸入?yún)?shù)輸出參數(shù):void{ 秉火 d_String(Txdata1,sizeof("ThisisaUartwhile(1)if(KEY1==0) d_String(Txdata2,sizeof("Key1hasbeendown.\n"));// }if(KEY2==0) d_String(Txdata3,sizeof("Key2hasbeendown.\n"));// }}32第14行:CC2530串口初始化,具體代碼看工程,上文也有相應(yīng)的解釋。。子上的BUT1或BUT2時,串口調(diào)試助手上會打印出按鍵信息?!咀⒁猓?1)秉火Zigbee開發(fā)板,可以由2處地方供電:(1)USB/Battery,(2)器;2.8.52.8.6com振,還有內(nèi)部自帶的16MHzRCoscillator32MHzcrystaloscillator。CC2530的系統(tǒng)時鐘systemclock32MHzcrystaloscillator,或者內(nèi)部32KHzSleepTimerWatchdogTimer上。上電運(yùn)行的時候先用的oscillator用于RF。式中:f16MHzRCOSC32MHzXOSCM誤差6789附:管理UsartUxUCR:USARTxUART10章Usart(接收可以了。為了不占用CPU資源,我們待會采用Uart中斷方式。Usart1UxCSR.REUARTUART會在輸U(kuò)xCSR.ACTIVE變?yōu)榈碗娖?。位由硬件??!咀⒁猓寒?dāng)應(yīng)用程序讀UxDBUF,很重要的一點是不清除UxCSR.RX_BYTE。清除UxCSR.RX_BYTE暗示UART,使得它以為UARTRX移位寄存器為空,即使它可能保存有未決數(shù)據(jù)(一般是由于背對背傳輸。所以UART (TTL為低電平)RT/RTS結(jié)合了自動RT/RTS功能,因此只能被SoCUART本身控制。否則應(yīng)用程序一般可以經(jīng)歷以下:RT/RTS線保持(TTL為低電平)的狀態(tài),即使一個背對背傳輸
2.9.1UartUart接收數(shù)據(jù)就CLKCONCMD&= //32MHZwhile(CLKCONSTA& //CLKCONCMD&=~0x47; //設(shè)置系統(tǒng)主時鐘頻率為32MHZPERCFG=0x00; //位置1P0口P0SEL //P0_2,P0_3用作串口,P2DIR&= //P0UART0U0CSR| //UARTU0GCR|= //U0GCRU0BAUDU0BAUD| //UTX0IF //UART0TXU0CSR| 是IEN0,如何配置請見圖。.31:功能描述USART測試(USART0接收電腦發(fā)過來的數(shù)據(jù)輸入?yún)?shù)輸出參數(shù):void{ Uard_String(Txdata1,sizeof("ThisisaUarttest.\n"));while(1) 2528功能描述USART輸入?yún)?shù)輸出參數(shù)#pragmavector=interruptvoid37 Rxdata=U0DBUF; URX0IF 4144功能描述輸入?yún)?shù)輸出參數(shù):void{ if(Rxdata!='\0') d_String(Txdata2,sizeof("ThedataCC2530hasreceivedis提 if(Rxdata=='1') if(Rxdata=='2') if(Rxdata=='3') 80第12行:CC2530串口初始化,具體代碼看工程,上文也有相應(yīng)的解釋。。發(fā)送數(shù)據(jù)寄存器U0DBUF,類似地,接收數(shù)據(jù)就是接收數(shù)據(jù)的寄存器U0DBUF,44~80Send_char()函數(shù)將數(shù)據(jù)是控制LED燈閃爍,用以說明CC2530已經(jīng)收到數(shù)據(jù)。按照下圖所示,打開程序;然后,按照2.9.5所示,編譯程序到開發(fā)板上,打【注意:(1)秉火Zigbee開發(fā)板,可以由2處地方供電:(1)USB/Battery,(2)器;2.9.6今天的任務(wù)就是熟悉Uart的接收與發(fā)送的操作流程。USART收/UxBUF寫入數(shù)據(jù)時,該字節(jié)發(fā)送到輸出引腳而當(dāng)字節(jié)傳送結(jié)束時為低。當(dāng)傳送結(jié)束時,UxCSR.TX_BYTE位設(shè)置為1。1UxCSR.REUARTUART會在輸RXDxUxCSR.ACTIVE1。當(dāng)檢測出有效起時,產(chǎn)生接收中斷。同時UxCSR.ACTIVE變?yōu)榈碗娖健xBUFUxBUF讀出時,UxCSR.RX_BYTE位由硬件清0?!咀⒁猓寒?dāng)應(yīng)用程序讀UxDBUF,很重要的一點是不清除UxCSR.RX_BYTE。清除UxCSR.RX_BYTE暗示UART,使得它以為UARTRX移位寄存器為空,即使它可能 (TTL為低電平結(jié)合了自動RT/RTSSoCUART本身控制。否則應(yīng)用程序一般可以經(jīng)歷以下:RT/RTS線保持(TTL為低電平)的狀態(tài),即使一個背對背傳輸
1:功能描述USART測試(USART0接收+發(fā)送輸入?yún)?shù)輸出參數(shù):void{ d_String(Txdata1,sizeof("ThisisaUartwhile(1)switch(Flag)caseState_ReceivecaseState_Send}}}32功能描述USART輸入?yún)?shù)輸出參數(shù)temp---:#pragmavector=interruptvoid41temp=URX0IF 4447功能描述USART輸入?yún)?shù)輸出參數(shù):void{ U0CSR&= //接 );//U0CSR| Flag DataNumber 6568功能描述USART輸入?yún)?shù)輸出參數(shù):void{ if(temp!=0)Rxdata[DataNumber++]=}elseFlag temp= 8812行:CC25309第68~88行:串口接收到的數(shù)據(jù),并將狀態(tài)切換到發(fā)送狀態(tài)。【注意:(1)秉火Zigbee開發(fā)板,可以由2處地方供電:(1)USB/Battery,(2)器;2.10.512章Usart+ADC(片內(nèi)CC2530IO端口的功能中,我們用的ADCCC2530ADC,當(dāng)然,在講解協(xié)議棧實驗的ADCCC2530CC2530的ADCCC2530ADC1412ENOB(有效數(shù)字位8個各自可配置的通道;以及一個參考電壓發(fā)生器。轉(zhuǎn)換結(jié)果通過DMA寫入器。還具有若干運(yùn)行模式。ADC
可選的抽取率,這也設(shè)置了分辨率(712位8
2.11.42、VDD作為基準(zhǔn)電壓時,測量的電壓輸入范圍為0-VDD】1:功能描述:USART+ADC(串口發(fā)送ADC的電壓信息給電腦顯示輸入?yún)?shù)輸出參數(shù):void{ uint float SetSysClock32MHz HalAdcSetReference(HAL_ADC_REF_AVDD);/*AVDD_SOCPinReference22//HalAdcSetReference(HAL_ADC_REF_125V);/*InternalReference(1.25V-CC2430)(1.15V-CC2530)*/ d_String("ADCsampleonP0.0\n19);//while(1) AD_data=HalAdcRead(HAL_ADC_CHANNEL_0,HAL_ADC_RESOLUTION_14); num 31 numfloat)(AD_data)*1.15/8096.0;//adcdata[1char)(num)%10+48;//ACSIIadcdata[2]=adcdata[3]=(char)(num*10)%10+48; d_String("ADsampleonP0.0" 4418行:設(shè)置P0.0ADC輸入。第28行:將ADC轉(zhuǎn)換值進(jìn)行數(shù)據(jù)處理。著打開串口調(diào)試助手,并配置它的相關(guān)參數(shù),即可看到圖(HAL_ADC_REF_125V作為基準(zhǔn)電壓)圖(VDD作為基準(zhǔn)電壓)的實驗現(xiàn)象。2.11.72.11.8ADC可選的抽取率,這也設(shè)置了分辨率(712位ADCL0xBA)ADCADCH0xBB)ADC數(shù)據(jù)ADCCON10xB4)–ADCADCCON20xB5)–ADCADCCON30xB6)–ADCTR00x624B)13章我們就將溫度傳感器掛接到ADC上,檢測的溫度,并將溫度值發(fā)給電腦顯示點還是ADC,至于片內(nèi)溫度傳感器,我們不作詳細(xì)介紹。CC2530的ADC們就將側(cè)重點放在ADC的。2.12.1ADC
2.12.2利用ADC來溫度傳感器(片內(nèi),并將溫度值發(fā)給電腦顯示void{charchar5while(1)for(i=0;i<64;i++)+=ifi>0avgtemp>>=12 23第7行:串口初始化。第14~17行:64次溫度值,每一次平均一次。2.12.514章面有關(guān)ADC的實驗里,我們就已經(jīng)用到DMA,只不過為了減少大家對CC2530CC2530的DMA直接存取(DMA)控制器可以用來減輕8051CPU內(nèi)核傳送數(shù)據(jù)操作的負(fù)擔(dān),從而實現(xiàn)在高效利用電源的條件下的高性能。CPU極少的干預(yù),DMA控制器就可以將數(shù)據(jù)從諸如ADC或RF收發(fā)器的外設(shè)單元傳送到器。DMA控制器協(xié)調(diào)所有的DMA傳送,確保DMA請求和CPU器之間按照優(yōu)先等級協(xié)調(diào)、合理地進(jìn)行。DMADMA通道,用來實現(xiàn)DMA控制器XDATA空間的數(shù)據(jù)傳送。由于大多數(shù)SFR寄存器映射到DMA器空間,這些靈活的DMA通道的操作能夠以創(chuàng)新的方式減輕CPU的負(fù)擔(dān),例如,從器傳送數(shù)據(jù)到USART,或定期在ADC和器之間傳送數(shù)據(jù)樣DMACPU在低功耗模式下與外設(shè)單元之間傳送數(shù)據(jù),不DMA5DMA3DMA32個可以配置的傳送觸發(fā)CC2530的DMA當(dāng)DMA通道配置完畢后,在允許任何傳輸發(fā)起之前,必須進(jìn)入工作狀態(tài)。DMA通道通過將DMA通道工作狀態(tài)寄存器DMAARM中指定位置1,就可以進(jìn)入工作狀態(tài)。一旦DMA通道進(jìn)入工作狀態(tài),當(dāng)配置的DMA觸發(fā)發(fā)生時,傳送就開始了。應(yīng)的DMAARM位設(shè)置,觸發(fā)在需要配置通道的時間內(nèi)出現(xiàn),期望的觸發(fā)將丟失。如DMA通道同時進(jìn)入工作狀態(tài),所有通道配置的的時間將長一些(按順序讀取內(nèi)存5451首先準(zhǔn)備有32個,例如UART傳輸、定時器溢出等。DMA通道要使用的觸發(fā)由DMA通道配置設(shè)置,因此直到配置被之后,才能知道MAREQ位,強(qiáng)制使一個DMA傳送開始。DMA啟動DMA2.13.1口發(fā)送successful到電腦上顯示,否則提示failed。1*@brief*@param*@retvalvoid{91012 memset(destString,0,sizeof(destString));//Clearing 20Start2224while2528*@briefConfigure*@describeDMA*@param*@retvalvoid{ =VLENUSELEN;DMAConfigure.WORDSIZE=WORDSIZE_BYTE; =TMODE =DMATRIGNONE; =SRCINC = = =M8_USE_8_BITS;DMAConfigure.PRIORITY= }*@briefDMA*@param*@retvalvoidDMA{}*@brief*@param*@retvalvoid{ while102DMAIRQ0x00;//while(!(DMAIRQ&}111*@brief*@param*@retvalvoid{ucharucharerrors=for(i=0;i<sizeof(sourceString);i++)if(sourceString[i]!= if(errors==0)Uard_String("ThetestofDMAistestofDMAis}elseUardString("ThetestofDMAistestofDMAisfailed.\n"));// 13728~68行:DMA數(shù)據(jù)配置。為什么要這樣配置這些成員?這個問題,只要打開也可以在hal.h里找到相關(guān)結(jié)構(gòu)體,如下圖所示。71~84行:DMA寄存器配置。完成了:1、DMA通道進(jìn)入工作狀態(tài)(DMA0CFGH、DMA0CFGL);20(DMAARM);30(D2.13.5DMA5DMA3DMA32(1)DMA(2)DMA只需要CPU極少的干預(yù),DMA控制器就可以將數(shù)據(jù)從諸如ADC或RF收發(fā)器 15隨機(jī)數(shù)發(fā)生器(Randomnumbergenerator)是通過一些算法、物理信號、環(huán)境噪聲按一定的算法和值生成的,CC2530的隨機(jī)數(shù)發(fā)生器就是通過這樣的方法來產(chǎn)生隨機(jī)數(shù)的。由于CC2530的隨機(jī)數(shù)發(fā)生器是加密的重要組成部分,所以今天我們有必要跟大家講解一下CC2530的隨機(jī)數(shù)發(fā)生器。RNDHCRC1616LFSRX16+X15+X2+1(CRC162.14.1ADCCON1.RCTRL位控制的。LFSR16位移位寄存器的當(dāng)前值可以從RNDH和RNDL寄存器中。默認(rèn)操作(ADCCON1.RCTRL是00)是命令選通處理器每次隨機(jī)值,就通LFSR一次(13x13x13操作等式LFSRLSBLFSR13x,且當(dāng)操作完成時,ADCCON1.RCTRL位將自動清除。LFSR可以通過寫入RNDL寄存器兩次產(chǎn)生數(shù)。每次寫入RNDL寄存器,LFSR的8位LSB到8位MSB,8位LSB被替換為寫入RNDL的新的數(shù)據(jù)字節(jié)。當(dāng)需要一個真正的隨機(jī)值,LFSR應(yīng)通過寫入RN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備設(shè)備衛(wèi)生管理制度
- 設(shè)置宿舍衛(wèi)生管理制度
- 設(shè)計單位施工管理制度
- 設(shè)計顧問公司管理制度
- 診所安全用藥管理制度
- 2025年中國滑雪用護(hù)目鏡行業(yè)市場全景分析及前景機(jī)遇研判報告
- 試驗檢測資料管理制度
- 財務(wù)賬目健全管理制度
- 賬戶托管服務(wù)管理制度
- 貨運(yùn)碼頭貨場管理制度
- 下肢功能鍛煉的護(hù)理方法
- 2024-2025學(xué)年湘教版七年級數(shù)學(xué)下冊期末素養(yǎng)測試卷(二)含答案
- DB31/T 1204-2020標(biāo)準(zhǔn)先進(jìn)性評價通用要求
- 2025年中國半球諧振陀螺儀行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 《奇異空間》課件 -2024-2025學(xué)年湘美版(2024)初中美術(shù)七年級下冊
- 合伙或養(yǎng)雞協(xié)議書
- 2024年西安高新區(qū)公辦學(xué)校教師招聘真題
- 行政管理學(xué)科試題及答案分享
- 2023-2024學(xué)年上海市浦東區(qū)八年級(下)期末數(shù)學(xué)試卷 (含答案)
- 會務(wù)技能測試題及答案
- 公司辦公用品管理規(guī)程:申購、領(lǐng)用與報廢流程詳解
評論
0/150
提交評論