無(wú)線傳感器網(wǎng)絡(luò)(7)_第1頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)(7)_第2頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)(7)_第3頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)(7)_第4頁(yè)
無(wú)線傳感器網(wǎng)絡(luò)(7)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、無(wú)線傳感器網(wǎng)絡(luò)第第7 7章章 CC2530CC2530實(shí)現(xiàn)紅實(shí)現(xiàn)紅外通信外通信計(jì)計(jì)算機(jī)科算機(jī)科學(xué)學(xué)系系 宋文強(qiáng)宋文強(qiáng)1 7.1 7.1 紅紅外通信外通信簡(jiǎn)簡(jiǎn)介介v 紅紅外外遙遙控方式是以控方式是以紅紅外外線線作作為載為載體體來(lái)傳來(lái)傳送控制信息的,同送控制信息的,同時(shí)時(shí)隨隨著著電電子技子技術(shù)術(shù)的的發(fā)發(fā)展,展,單單片機(jī)的出片機(jī)的出現(xiàn)現(xiàn),催生了,催生了數(shù)數(shù)字字編碼編碼方式方式的的紅紅外外遙遙控系控系統(tǒng)統(tǒng)的快速的快速發(fā)發(fā)展。展。v 紅紅外外遙遙控具有很多的控具有很多的優(yōu)優(yōu)點(diǎn):點(diǎn):v紅紅外外線發(fā)線發(fā)射裝置采用射裝置采用紅紅外外發(fā)發(fā)光二光二極極管,管,遙遙控控發(fā)發(fā)射器易于小型射器易于小型化且價(jià)格低廉;化且

2、價(jià)格低廉;v采用采用數(shù)數(shù)字信字信號(hào)編碼號(hào)編碼和二次和二次調(diào)調(diào)制方式,不制方式,不僅僅可以可以實(shí)現(xiàn)實(shí)現(xiàn)多路信息多路信息的控制,增加的控制,增加遙遙控功能,提高信控功能,提高信號(hào)傳輸號(hào)傳輸?shù)目垢傻目垢蓴_擾性,性,減減少少誤誤動(dòng)動(dòng)作,而且功率消耗低;作,而且功率消耗低;v紅紅外外線線不不會(huì)會(huì)向室外泄露,不向室外泄露,不會(huì)產(chǎn)會(huì)產(chǎn)生信生信號(hào)號(hào)串串?dāng)_擾;v反反應(yīng)應(yīng)速度快、速度快、傳輸傳輸效率高、工作效率高、工作穩(wěn)穩(wěn)定可靠。定可靠。 2 紅紅外外發(fā)發(fā)射信射信號(hào)號(hào)的形成的形成 3 紅紅外外線遙線遙控接收控接收電電路路 v 紅紅外接收端普遍采用價(jià)格便宜,性能可靠的一體化外接收端普遍采用價(jià)格便宜,性能可靠的一體化

3、紅紅外接收外接收頭頭接收接收紅紅外信外信號(hào)號(hào),它它同同時(shí)對(duì)時(shí)對(duì)信信號(hào)進(jìn)號(hào)進(jìn)行放大行放大、檢檢波、整形,得到波、整形,得到數(shù)數(shù)字信字信號(hào)號(hào)的的編碼編碼信息再送信息再送給單給單片機(jī),片機(jī),經(jīng)單經(jīng)單片機(jī)解片機(jī)解碼并執(zhí)碼并執(zhí)行,去控制相行,去控制相關(guān)對(duì)關(guān)對(duì)象。象。 4 紅紅外外發(fā)發(fā)射射電電路路 v 由于由于CC2530CC2530可以使用定可以使用定時(shí)時(shí)器器產(chǎn)產(chǎn)生生38K38K的的調(diào)調(diào)制信制信號(hào)號(hào),所以,所以只需要在只需要在CC2530CC2530引腳上接一引腳上接一個(gè)紅個(gè)紅外外發(fā)發(fā)射管就可以了,在射管就可以了,在一般情一般情況況下,下,還還需要串需要串連連一一個(gè)個(gè)小小電電阻。阻。v 需要注意的是需要

4、注意的是紅紅外外發(fā)發(fā)射射對(duì)對(duì)引腳的引腳的驅(qū)動(dòng)驅(qū)動(dòng)能力有要求,能力有要求,CC2530CC2530只有引腳只有引腳P1_0P1_0和和P1_1P1_1符合要求,可以作符合要求,可以作為紅為紅外信外信號(hào)號(hào)的的輸輸出引腳出引腳 5 7.2 7.2 實(shí)驗(yàn)實(shí)驗(yàn)1 1:中:中斷斷方式方式發(fā)發(fā)射射紅紅外信外信號(hào)號(hào)v 定定時(shí)時(shí)器器3 3有一有一個(gè)單獨(dú)個(gè)單獨(dú)的分的分頻頻器,器,T3CTL.DIV=010T3CTL.DIV=010,有效,有效時(shí)時(shí)鐘鐘= =標(biāo)記頻標(biāo)記頻率率/4/4v 定定時(shí)時(shí)器器3 3選擇選擇“ “模模” ”模式模式v 當(dāng)當(dāng)定定時(shí)時(shí)器器3 3的的計(jì)數(shù)計(jì)數(shù)器器值值=T3CC0=T3CC0時(shí)時(shí),發(fā)發(fā)生

5、定生定時(shí)時(shí)器器3 3溢出中溢出中斷斷v 在中在中斷處斷處理函理函數(shù)數(shù)中,如果中,如果當(dāng)當(dāng)前的信前的信號(hào)為號(hào)為0 0,將將高低高低電電平平進(jìn)進(jìn)行行轉(zhuǎn)換轉(zhuǎn)換6 #include #include #define uin unsigned int#define uin unsigned int#define T1_Start T1CTL = 0 xa#define T1_Start T1CTL = 0 xa/ / 啟動(dòng)啟動(dòng)定定時(shí)時(shí)器器1 1的宏的宏#define T1_Stop T1CTL = 0 x8#define T1_Stop T1CTL = 0 x8/ / 停止定停止定時(shí)時(shí)器器1 1的宏的宏

6、#define T1_Clear T1STAT = 0#define T1_Clear T1STAT = 0/ / 清清除定除定時(shí)時(shí)器器1 1中中斷標(biāo)斷標(biāo)志的宏志的宏/ / 啟動(dòng)啟動(dòng)定定時(shí)時(shí)器器1 1通道通道0 0比比較值較值的宏的宏#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Over() (T1STAT & 1)#define T1_Over() (T1STAT & 1)/ / 測(cè)試測(cè)試定定時(shí)時(shí)器器1 1通道通道0 0中中斷標(biāo)斷

7、標(biāo)志的宏志的宏static unsigned int count;static unsigned int count;/ / 延延時(shí)計(jì)數(shù)時(shí)計(jì)數(shù)static unsigned char flag;static unsigned char flag;/ / 紅紅外外發(fā)發(fā)送送標(biāo)標(biāo)志志char iraddr1; char iraddr1; / / 十六位地址的第一十六位地址的第一個(gè)個(gè)字字節(jié)節(jié)char iraddr2;char iraddr2;/ / 十六位地址的第二十六位地址的第二個(gè)個(gè)字字節(jié)節(jié)7 發(fā)發(fā)送送紅紅外外數(shù)數(shù)據(jù)的函據(jù)的函數(shù)數(shù)void SendIRdata(char p_irdata)void

8、SendIRdata(char p_irdata) int i; int i; char irdata = p_irdata; char irdata = p_irdata; T1_Set(9000); T1_Set(9000); / / 發(fā)發(fā)9ms9ms的低的低電電平引平引導(dǎo)碼導(dǎo)碼 flag = 0; flag = 0; T1_Clear();T1_Clear(); T1_Start(); T1_Start(); while(!T1_Over(); while(!T1_Over(); T1_Stop(); T1_Stop(); T1_Set(4500); T1_Set(4500); / /

9、發(fā)發(fā)4.5ms4.5ms的高的高電電平引平引導(dǎo)碼導(dǎo)碼 flag = 1; flag = 1; T1_Clear();T1_Clear(); T1_Start(); T1_Start(); while(!T1_Over(); while(!T1_Over(); T1_Stop(); T1_Stop(); flag = 0; flag = 0; T1_Set(300); T1_Set(300);/ / 發(fā)發(fā)300s300s低低電電平引平引導(dǎo)碼導(dǎo)碼 T1_Clear();T1_Clear(); T1_Start(); T1_Start(); while(!T1_Over(); while(!T1_O

10、ver(); T1_Stop(); T1_Stop();8 發(fā)發(fā)送送紅紅外外數(shù)數(shù)據(jù)的函據(jù)的函數(shù)數(shù) irdata = iraddr1; irdata = iraddr1;/ / 發(fā)發(fā)送十六位地址的第一送十六位地址的第一個(gè)個(gè)字字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1;/ / 右移一位,準(zhǔn)右移一位,準(zhǔn)備發(fā)備發(fā)送下一位送下一位 9 發(fā)發(fā)送送紅紅外外數(shù)數(shù)據(jù)的函據(jù)的函數(shù)數(shù) flag = 0; flag = 0; irdata = iraddr2; irdata = iraddr2;/ / 發(fā)發(fā)送十六位地址的第二送十六位地址的第二個(gè)個(gè)字字節(jié)節(jié) fo

11、r(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 10 發(fā)發(fā)送送紅紅外外數(shù)數(shù)據(jù)的函據(jù)的函數(shù)數(shù) flag = 0; flag = 0; irdata = p_iradata; irdata = p_iradata;/ / 發(fā)發(fā)送一送一個(gè)數(shù)個(gè)數(shù)據(jù)字據(jù)字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 11 發(fā)發(fā)送送紅紅外外數(shù)數(shù)據(jù)的函據(jù)的函數(shù)數(shù) flag = 0; flag = 0; irdata = p_iradata; irdata = p_iradata;/ / 發(fā)發(fā)送送數(shù)數(shù)據(jù)的反據(jù)的反碼碼 for(

12、i=0; i8; i+) for(i=0; i1; irdata = irdata1; flag = 1;flag = 1; 12 T3T3、T1T1初始化函初始化函數(shù)數(shù)void Init_T3()void Init_T3() P1DIR = 0 x02; P1DIR = 0 x02;/ P1_1/ P1_1引腳引腳設(shè)為輸設(shè)為輸出出 CLKCONCMD &= 0 x7F; CLKCONCMD &= 0 x7F;/ / 晶振晶振頻頻率率32MHz32MHz while(CLKCONSTA & 0 x40); while(CLKCONSTA & 0 x40); /

13、/ 等待晶振等待晶振穩(wěn)穩(wěn)定定 EA = 1; EA = 1;/ / 開(kāi)開(kāi)放放總總控中控中斷斷 T3IE = 1; T3IE = 1;/ / 開(kāi)開(kāi)放定放定時(shí)時(shí)器器3 3中中斷斷 T3CTL = 0 x46; T3CTL = 0 x46;/ / 定定時(shí)時(shí)器器3 3設(shè)為設(shè)為4 4分分頻頻,“ “模模” ”模式模式 T3CCTL0 = 0 x44; T3CCTL0 = 0 x44;/ / 定定時(shí)時(shí)器器3 3通道通道0 0開(kāi)開(kāi)放中放中斷斷,設(shè)設(shè)比比較較模式模式 T3CC0 = 105; T3CC0 = 105;/ / 設(shè)設(shè)置定置定時(shí)時(shí)器器3 3通道通道0 0比比較較寄存器寄存器 void Init_T1

14、()void Init_T1() T1IE = 1; T1IE = 1;/ / 開(kāi)開(kāi)放定放定時(shí)時(shí)器器1 1中中斷斷 T1CTL = 0 x0A; T1CTL = 0 x0A;/ / 定定時(shí)時(shí)器器1 1設(shè)設(shè)分分頻頻,“ “模模” ”模式模式 T1CCTL0 = 0 x44; T1CCTL0 = 0 x44;/ / 定定時(shí)時(shí)器器1 1通道通道0 0開(kāi)開(kāi)放中放中斷斷,設(shè)設(shè)比比較較模式模式 13 主函主函數(shù)數(shù)void main()void main() Init_T3(); Init_T3(); Init_T1(); Init_T1(); P1_1 = 1; P1_1 = 1;/ IR/ IR輸輸出引

15、腳,初始化出引腳,初始化為為1 1 T3CTL |= 0 x10; T3CTL |= 0 x10;/ / 啟動(dòng)啟動(dòng)定定時(shí)時(shí)器器3 3 iraddr1 = 0; iraddr1 = 0;/ / 地址地址碼碼第一第一個(gè)個(gè)字字節(jié)節(jié) iraddr2 = 0 xFF; iraddr2 = 0 xFF;/ / 地址地址碼碼第二第二個(gè)個(gè)字字節(jié)節(jié) SendIRdata(18); SendIRdata(18); 14 定定時(shí)時(shí)器器3 3的中的中斷處斷處理函理函數(shù)數(shù)#pragma vector = T3_VECTOR#pragma vector = T3_VECTOR_interrupt void T3_ISR(

16、)_interrupt void T3_ISR() / / 當(dāng)標(biāo)當(dāng)標(biāo)志位志位為為0 0時(shí)時(shí),將將IRIR輸輸出引腳出引腳電電平反平反轉(zhuǎn)轉(zhuǎn),輸輸出出38kHz38kHz信信號(hào)號(hào) if(flag = 0) if(flag = 0) P1_1 = P1_1; P1_1 = P1_1; else else P1_1 = 0; P1_1 = 0; / / 每(每(1/760001/76000)秒被)秒被調(diào)調(diào)用一次用一次15 7.3 7.3 實(shí)驗(yàn)實(shí)驗(yàn)2 2:PWMPWM方式方式輸輸出出紅紅外信外信號(hào)號(hào)v 利用利用1616位的定位的定時(shí)時(shí)器器1 1和和8 8位的定位的定時(shí)時(shí)器器3 3相配合,可以用相配合,可

17、以用PWMPWM方式方式輸輸出出紅紅外信外信號(hào)號(hào)v 定定時(shí)時(shí)器器3 3用于用于產(chǎn)產(chǎn)生生載載波波vT3CC0T3CC0設(shè)設(shè)置周期置周期vT3CC1T3CC1設(shè)設(shè)置占空比置占空比v通道通道1 1用于用于PWMPWM輸輸出出v 通道通道1 1使用比使用比較較模式:模式:在比在比較時(shí)清較時(shí)清除,在除,在0 x000 x00設(shè)設(shè)置置輸輸出出v 定定時(shí)時(shí)器器1 1采用定采用定時(shí)時(shí)器器3 3通道通道1 1的的輸輸出比出比較較信信號(hào)號(hào)作作為標(biāo)記為標(biāo)記,而,而不是采用系不是采用系統(tǒng)標(biāo)記統(tǒng)標(biāo)記v 定定時(shí)時(shí)器器1 1計(jì)數(shù)計(jì)數(shù)器不再器不再計(jì)計(jì)算系算系統(tǒng)時(shí)鐘統(tǒng)時(shí)鐘信信號(hào)號(hào)的的個(gè)數(shù)個(gè)數(shù),而是,而是計(jì)計(jì)算算定定時(shí)時(shí)器通道器

18、通道1 1輸輸出的方波出的方波個(gè)數(shù)個(gè)數(shù)例如:例如:T3CC0=211,T3CC1=105,則通道則通道1輸出占空比為輸出占空比為1:2的方波的方波16 定時(shí)器定時(shí)器3通道通道1的輸出的輸出定時(shí)器定時(shí)器1計(jì)數(shù)器的輸入計(jì)數(shù)器的輸入17 v IRCTL.IRGEN=1IRCTL.IRGEN=1,定,定時(shí)時(shí)器器1 1處處于于IRIR產(chǎn)產(chǎn)生模式生模式v T1CTL.MODE=10T1CTL.MODE=10,定,定時(shí)時(shí)器器1 1處處于于調(diào)調(diào)制模式制模式v 定定時(shí)時(shí)器器1 1的周期使用的周期使用T1CC0T1CC0設(shè)設(shè)置置vT1CCTL0.MODE=1T1CCTL0.MODE=1,通道,通道0 0處處于比于

19、比較較模式模式vT1CCTL1.CMP=011T1CCTL1.CMP=011,通道,通道1 1處處于比于比較較模式,在比模式,在比較時(shí)設(shè)較時(shí)設(shè)置置輸輸出出,在,在0 x00000 x0000清清除,用于除,用于輸輸出出門門控信控信號(hào)號(hào)vT1CC1.T1CC1T1CC1.T1CC1標(biāo)記載標(biāo)記載波的波的個(gè)數(shù)個(gè)數(shù)v NECNEC格式格式紅紅外外編碼編碼要求要求數(shù)數(shù)據(jù)據(jù)“ “1”1”的持的持續(xù)時(shí)間為續(xù)時(shí)間為 1680s 1680s高高電電平平 + 560s+ 560s低低電電平平v 因此因此T1CC1=1680/26.3=64T1CC1=1680/26.3=64v T1CC0=(1680+560)/2

20、6.3=85 T1CC0=(1680+560)/26.3=8518 7.3 7.3 實(shí)驗(yàn)實(shí)驗(yàn)2 2:PWMPWM方式方式輸輸出出紅紅外信外信號(hào)號(hào)#include #include #include “exboard.h”#include “exboard.h”#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8/ / 設(shè)設(shè)置定置定時(shí)時(shí)常常數(shù)數(shù)#define T11_Set(dat) T1CC1L=dat; T1CC1H=dat8#define T11_Set(dat) T1C

21、C1L=dat; T1CC1H=dat8char iraddr1 = 0;char iraddr1 = 0;/ / 十六位地址低字十六位地址低字節(jié)節(jié)char iraddr2 = 0 xFF;char iraddr2 = 0 xFF;/ / 十六位地址高字十六位地址高字節(jié)節(jié)void Set_ST_Period(uint sec)void Set_ST_Period(uint sec)/ / 設(shè)設(shè)置睡眠定置睡眠定時(shí)時(shí)器工作周期器工作周期 long sleepTimer = 0; long sleepTimer = 0; sleepTimer |= ST0; sleepTimer |= ST0;/

22、/ 先先讀讀出睡眠定出睡眠定時(shí)時(shí)器的器的當(dāng)當(dāng)前前值值 sleepTimer |= (long)ST18; sleepTimer |= (long)ST18; sleepTimer |= (long)ST216; sleepTimer |= (long)ST216); ST2 = (char)(sleepTimer16);/ / 再再寫(xiě)寫(xiě)回睡眠定回睡眠定時(shí)時(shí)器器 ST1 = (char)(sleepTimer8); ST1 = (char)(sleepTimer8); ST0 = (char)sleepTimer; ST0 = (char)sleepTimer; 19 初始化睡眠定初始化睡眠定時(shí)

23、時(shí)器器void Init_SLEEP_TIMER()void Init_SLEEP_TIMER() ST2 = 0 x00; ST2 = 0 x00; ST1 = 0 x0F; ST1 = 0 x0F; ST0 = 0 x0F; ST0 = 0 x0F; EA = 1; EA = 1;/ / 開(kāi)總開(kāi)總控中控中斷斷 STIE = 1; STIE = 1;/ / 睡眠定睡眠定時(shí)時(shí)器中器中斷斷使能使能 STIF = 0; STIF = 0;/ / 睡眠定睡眠定時(shí)時(shí)器中器中斷狀態(tài)斷狀態(tài)位置位置0 0 20 SendIRdata()SendIRdata()函函數(shù)數(shù)void SendIRdata(char

24、 p_irdata)void SendIRdata(char p_irdata) int i; int i; char irdata; char irdata; T1_Set(180); T1_Set(180);/ / 發(fā)發(fā)4.5ms4.5ms的高的高電電平起始平起始碼碼 T11_Set_(165); T11_Set_(165); Set_ST_Period(154); Set_ST_Period(154);/ / 設(shè)設(shè)置睡眠定置睡眠定時(shí)時(shí)器周期器周期 while(!(IRCON & 0 x80); while(!(IRCON & 0 x80); STIF = 0; STIF

25、= 0; irdata = iraddr1; irdata = iraddr1;/ / 發(fā)發(fā)送十六位地址的第一送十六位地址的第一個(gè)個(gè)字字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 21 SendIRdata()SendIRdata()函函數(shù)數(shù) irdata = iraddr2; irdata = iraddr2;/ / 發(fā)發(fā)送十六位地址的第二送十六位地址的第二個(gè)個(gè)字字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 22 SendIRdata()SendIRdata()函函數(shù)數(shù) ird

26、ata = p_irdata; irdata = p_irdata;/ / 發(fā)發(fā)送送8 8位位數(shù)數(shù)據(jù)據(jù) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 23 SendIRdata()SendIRdata()函函數(shù)數(shù) irdata = p_irdata; irdata = p_irdata;/ / 發(fā)發(fā)送送8 8位位數(shù)數(shù)據(jù)的反據(jù)的反碼碼 for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; T3CTRL &= 0 x10; T3CTRL &= 0 x10; 24 T3T3、T1T1初始化初始

27、化void Init_T3()void Init_T3() T3IE = 0; T3IE = 0;/ / 關(guān)關(guān)定定時(shí)時(shí)器器3 3中中斷斷 T3CTL = 0 x46; T3CTL = 0 x46;/ / 定定時(shí)時(shí)器器3 3設(shè)設(shè)置置4 4分分頻頻,“ “模?!?”模式模式 T3CCTL1 = 0 x24; T3CCTL1 = 0 x24;/ / 通道通道1 1開(kāi)開(kāi)中中斷斷 T3CC0 = 211; T3CC0 = 211;/ / 波形波形總總周期周期 T3CC1 = 105; T3CC1 = 105;/ / 波形高波形高電電平平寬寬度度 void Init_T1()void Init_T1()

28、T1IE = 0; T1IE = 0;/ / 關(guān)關(guān)定定時(shí)時(shí)器器1 1中中斷斷 T1CTL = 0 x02; T1CTL = 0 x02;/ / 定定時(shí)時(shí)器器1 1設(shè)設(shè)置置為為“ “模?!?”模式模式 PERCFG = 0 x40;PERCFG = 0 x40;/ / 定定時(shí)時(shí)器器1 1使用使用備備用位置用位置2 2,輸輸出引腳出引腳為為P1_1P1_1 T1CCTL0 = 0 x04; T1CCTL0 = 0 x04;/ / 定定時(shí)時(shí)器器1 1通道通道0 0設(shè)為設(shè)為比比較輸較輸出出 T1CCTL1 = 0 x5C; T1CCTL1 = 0 x5C;/ / 定定時(shí)時(shí)器器1 1通道通道1 1設(shè)為設(shè)

29、為比比較輸較輸出出 25 主函主函數(shù)數(shù)void main()void main() CLKCONCMD &= 0 x7F; CLKCONCMD &= 0 x7F; / / 晶振晶振頻頻率率32MHz32MHz while(CLKCONSTA & 0 x40) while(CLKCONSTA & 0 x40) / / 等待晶振等待晶振穩(wěn)穩(wěn)定定 P1SEL = 0 xFE; P1SEL = 0 xFE;/ / 將將引腳引腳設(shè)設(shè)置置為為外外設(shè)設(shè)功能功能 P2SEL = 0 x28; P2SEL = 0 x28; P1DIR = 0 xFE; P1DIR = 0 xFE

30、;/ / 將將相相應(yīng)應(yīng)引腳引腳設(shè)設(shè)置置為輸為輸出出 Init_T3(); Init_T3(); P1_1 = 0; P1_1 = 0; IRCTL = 0 x01; IRCTL = 0 x01;/ / 定定時(shí)時(shí)器器3 3的的輸輸出作出作為為定定時(shí)時(shí)器器1 1的的標(biāo)記輸標(biāo)記輸入入 Init_T1(); Init_T1(); Init_SLEEP_TIMER(); Init_SLEEP_TIMER(); T3CTL |= 0 x10; T3CTL |= 0 x10;/ / 啟動(dòng)啟動(dòng)定定時(shí)時(shí)器器3 3 SendIRdata(18); SendIRdata(18);/ / 發(fā)發(fā)送送紅紅外外數(shù)數(shù)據(jù)據(jù) 2

31、6 7.4 7.4 實(shí)驗(yàn)實(shí)驗(yàn)3 3:紅紅外接收外接收(1 1)實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模耗康模壕幘幊坛虒?shí)現(xiàn)實(shí)現(xiàn)接收接收紅紅外外遙遙控器的按控器的按鍵編碼鍵編碼,并將并將其其鍵碼顯鍵碼顯示在示在學(xué)習(xí)學(xué)習(xí)板的板的LCD1602LCD1602顯顯示示屏屏上。上。(2 2)設(shè)計(jì)設(shè)計(jì)思路:思路:v 紅紅外接收要求能準(zhǔn)確外接收要求能準(zhǔn)確計(jì)計(jì)算信算信號(hào)號(hào)周期,所以使用定周期,所以使用定時(shí)時(shí)器器1 1。將將定定時(shí)時(shí)器器1 1進(jìn)進(jìn)行行3232分分頻頻,每,每個(gè)計(jì)數(shù)個(gè)計(jì)數(shù)周期周期1s1sv 紅紅外外遙遙控器的按控器的按鍵動(dòng)鍵動(dòng)作是作是隨隨機(jī)機(jī)產(chǎn)產(chǎn)生的,需要使用生的,需要使用輸輸入引腳入引腳P1_0P1_0的中的中斷斷服服務(wù)務(wù)

32、程序程序來(lái)處來(lái)處理理紅紅外接收外接收頭頭接收的接收的數(shù)數(shù)據(jù)據(jù)27 7.4 7.4 實(shí)驗(yàn)實(shí)驗(yàn)3 3:紅紅外接收外接收實(shí)驗(yàn)實(shí)驗(yàn)#include #include #include “exboard.h”#include “exboard.h”#include “l(fā)cd.h”#include “l(fā)cd.h”#define IRIN P1_0#define IRIN P1_0char IRCOM7;char IRCOM7;#define T1_Start() T1CTL = 0 x09#define T1_Start() T1CTL = 0 x09#define T1_Stop() T1CTL = 0

33、 x08#define T1_Stop() T1CTL = 0 x08#define T1_Clear() T1STA = 0#define T1_Clear() T1STA = 0#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Over()(T1STAT & 1)#define T1_Over()(T1STAT & 1)28 7.4 7.4 實(shí)驗(yàn)實(shí)驗(yàn)3 3:紅紅外接收外接收實(shí)驗(yàn)實(shí)驗(yàn)void main()void main() CLK

34、CONCMD &= 0 x7F; CLKCONCMD &= 0 x7F;/ / 晶振晶振頻頻率率32MHz32MHz while(CLKCONSTA & 0 x40); while(CLKCONSTA & 0 x40);/ / 等待晶振等待晶振穩(wěn)穩(wěn)定定 P0DIR = 0 xF0; P0DIR = 0 xF0;/ / 設(shè)設(shè)置置P0P0口引腳方向口引腳方向 P1DIR = 0 x1C; P1DIR = 0 x1C; / / 設(shè)設(shè)置置P1P1口引腳方向口引腳方向 lcd_init(); lcd_init();/ / 初始化初始化LCDLCD顯顯示示屏屏 P1IEN

35、|= 0 x11; P1IEN |= 0 x11;/ P1_0/ P1_0設(shè)設(shè)置置為為中中斷斷方式方式 PICTL |= 0 x02; PICTL |= 0 x02;/ / 下降沿下降沿觸發(fā)觸發(fā) EA = 1; EA = 1;/ / 開(kāi)開(kāi)放放總總控中控中斷斷 IEN2 |= 0 x10; IEN2 |= 0 x10;/ P0/ P0設(shè)設(shè)置置為為中中斷斷方式方式 T1CTL = 0 x09; T1CTL = 0 x09; while(1); while(1); 29 中中斷斷服服務(wù)務(wù)程序程序#pragma vector = P1INT_VECTOR#pragma vector = P1INT_V

36、ECTOR_interrupt void P1_ISR()_interrupt void P1_ISR() unsigned char j, k; unsigned char j, k; unsigned int N = 0; unsigned int N = 0; IEN2 &= 0 x10; IEN2 &= 0 x10; if(IRIN = 1) if(IRIN = 1) IEN2 |= 0 x10; IEN2 |= 0 x10; return; return; T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0; T1_Start

37、() T1_Start()30 while(!IRIN);while(!IRIN); T1_Stop(); T1_Stop(); N = T1CNTH; N = T1CNTH; N = N8; N = N8; N = N+T1CNTL; N = N+T1CNTL; if(N8500) if(N8500) IEN2 |= 0 x10; IEN2 |= 0 x10; return; return; T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0;31 for(j=0; j4; j+)for(j=0; j4; j+) for(k=0; k8; k+) f

38、or(k=0; k8; k+) while(IRIN); while(IRIN); while(!IRIN); while(!IRIN); T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0; T1_Start(); T1_Start(); while(IRIN); while(IRIN); N = T1CNTH; N = T1CNTH; N = N8; N = N=2000) if(N=2000) IEN2 |= 0 x10; IEN2 |= 0 x10; break; break; IRCOMJ = IRCOMJ1; IRCOMJ = IRCOMJ

39、1; if(N=700) if(N=700) IRCOMJ = IRCOMJ | 0 x80; IRCOMJ = IRCOMJ | 0 x80; N = 0; N = 0; T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0; T1_Stop(); T1_Stop(); 32 IEN2 |= 0 x10;IEN2 |= 0 x10; IRCOM5 = IRCOM2 & 0 x0F; IRCOM5 = IRCOM2 & 0 x0F; IRCOM6 = IRCOM2 4; IRCOM6 = IRCOM2 4; if(IRCOM59) if(

40、IRCOM59)/ / 轉(zhuǎn)換為轉(zhuǎn)換為ASCIIASCII碼碼 IRCOM5 = IRCOM2 + 0 x37; IRCOM5 = IRCOM2 + 0 x37; else else IRCOM5 = IRCOM2 + 0 x30; IRCOM5 = IRCOM2 + 0 x30; if(IRCOM69) if(IRCOM69) / / 轉(zhuǎn)換為轉(zhuǎn)換為ASCIIASCII碼碼 IRCOM6 = IRCOM2 + 0 x37; IRCOM6 = IRCOM2 + 0 x37; else else IRCOM6 = IRCOM2 + 0 x30; IRCOM6 = IRCOM2 + 0 x30; P1

41、DIR = 0 x1C; P1DIR = 0 x1C; lcd_pos(0); lcd_pos(0); lcd_wdat(IRCOM6); lcd_wdat(IRCOM6);/ / 在在LCDLCD上上顯顯示示結(jié)結(jié)果果 lcd_pos(1); lcd_pos(1); lcd_wdat(IRCOM5); lcd_wdat(IRCOM5); P1IFG |= 0 x00; P1IFG |= 0 x00; 33 補(bǔ)補(bǔ)充充實(shí)驗(yàn)實(shí)驗(yàn):無(wú):無(wú)線線點(diǎn)燈點(diǎn)燈實(shí)驗(yàn)實(shí)驗(yàn)操作方法:操作方法:v 把把main()main()主函主函數(shù)數(shù)中的第一行中的第一行寫(xiě)為寫(xiě)為: uint8 appMode = SWITCH;ui

42、nt8 appMode = SWITCH; v 選擇選擇 Project-Rebuild All Project-Rebuild All 編譯編譯v 下下載載到到發(fā)發(fā)射模射模塊塊v 把把main()main()主函主函數(shù)數(shù)中的第一行中的第一行寫(xiě)為寫(xiě)為: uint8 appMode = uint8 appMode = L LIGHTIGHT; ; v 選擇選擇 Project-Rebuild All Project-Rebuild All 編譯編譯v 下下載載到到發(fā)發(fā)射模射模塊塊v 兩個(gè)兩個(gè)模模塊塊分分別別上上電電,按,按發(fā)發(fā)射模射模塊塊的的S1S1鍵鍵,接收模,接收模塊塊LED1LED1狀態(tài)狀

43、態(tài)在在“ “點(diǎn)亮點(diǎn)亮” ”與與“ “熄熄滅滅” ” 之之間來(lái)間來(lái)回切回切換換34 實(shí)驗(yàn)實(shí)驗(yàn):無(wú):無(wú)線線點(diǎn)燈點(diǎn)燈(1)(1)#include #include #include #include #include #include #include #include #include hal_mcu.h#include hal_mcu.h#include hal_button.h#include hal_button.h#include hal_rf.h#include hal_rf.h#include basic_rf.h#include basic_rf.h#define RF_CHANNE

44、L #define RF_CHANNEL 25 25 / 2.4GHz RF channel/ 2.4GHz RF channel/ BasicRF address definitions/ BasicRF address definitions#define PAN_ID #define PAN_ID 0 x20070 x2007#define SWITCH_ADDR #define SWITCH_ADDR 0 x25200 x2520#define LIGHT_ADDR #define LIGHT_ADDR 0 xBEEF0 xBEEF#define APP_PAYLOAD_LENGTH#

45、define APP_PAYLOAD_LENGTH1 1#define LIGHT_TOGGLE_CMD #define LIGHT_TOGGLE_CMD 0 0/ Application states/ Application states#define IDLE #define IDLE 0 0#define SEND_CMD #define SEND_CMD 1 1/ Application role/ Application role#define NONE #define NONE 0 0#define SWITCH #define SWITCH 1 1#define LIGHT #

46、define LIGHT 2 2#define APP_MODES #define APP_MODES 2 235 實(shí)驗(yàn)實(shí)驗(yàn):無(wú):無(wú)線線點(diǎn)燈點(diǎn)燈(2)(2)static uint8 pTxDataAPP_PAYLOAD_LENGTH; static uint8 pTxDataAPP_PAYLOAD_LENGTH; / / 聲聲明明發(fā)發(fā)送送緩緩沖沖區(qū)區(qū)static uint8 pRxDataAPP_PAYLOAD_LENGTH; static uint8 pRxDataAPP_PAYLOAD_LENGTH; / / 聲聲明接收明接收緩緩沖沖區(qū)區(qū)static basicRfCfg_t basicR

47、fConfig;static basicRfCfg_t basicRfConfig;#ifdef SECURITY_CCM#ifdef SECURITY_CCM static uint8 key= 0 xc0, 0 xc1, 0 xc2, 0 xc3, 0 xc4, 0 xc5, 0 xc6, 0 xc7, static uint8 key= 0 xc0, 0 xc1, 0 xc2, 0 xc3, 0 xc4, 0 xc5, 0 xc6, 0 xc7, 0 xc8, 0 xc9, 0 xca, 0 xcb, 0 xcc, 0 xcd, 0 xce, 0 xcf,; 0 xc8, 0 xc9,

48、0 xca, 0 xcb, 0 xcc, 0 xcd, 0 xce, 0 xcf,;#endif#endif/ / 聲聲明本地函明本地函數(shù)數(shù)static void appLight();static void appLight();static void appSwitch();static void appSwitch();36 實(shí)驗(yàn)實(shí)驗(yàn):無(wú):無(wú)線線點(diǎn)燈點(diǎn)燈(3)(3)static void appLight()static void appLight() / Initialize BasicRF/ Initialize BasicRF basicRfConfig.myAddr = LIGH

49、T_ADDR; basicRfConfig.myAddr = LIGHT_ADDR; if(basicRfInit(&basicRfConfig) = FAILED) if(basicRfInit(&basicRfConfig) = FAILED) HAL_ASSERT(FALSE); HAL_ASSERT(FALSE); basicRfReceiveOn(); basicRfReceiveOn(); / Main loop/ Main loop while (TRUE) while (TRUE) while(!basicRfPacketIsReady(); while(!ba

50、sicRfPacketIsReady(); / / 檢查檢查模模塊塊是否已是否已經(jīng)經(jīng)可以接收下一可以接收下一個(gè)數(shù)個(gè)數(shù)據(jù),據(jù),/ / 如果準(zhǔn)如果準(zhǔn)備備好好則則返回返回 TRUETRUE / / 把收到的把收到的數(shù)數(shù)據(jù)據(jù)復(fù)復(fù)制到制到bufferbuffer中中 if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)0)if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)0) if(pRxData0 = LIGHT_TOGGLE_CMD) if(pRxData0 = LIGHT_TOGGLE_CMD

51、) /判判斷斷接收到的接收到的數(shù)數(shù)據(jù)是否據(jù)是否為為L(zhǎng)IGHT_TOGGLE_CMDLIGHT_TOGGLE_CMD halLedToggle(1); halLedToggle(1); / / 改改變變Led1Led1的的狀態(tài)狀態(tài) 37 實(shí)驗(yàn)實(shí)驗(yàn):無(wú):無(wú)線線點(diǎn)燈點(diǎn)燈(4)(4)static void appSwitch()static void appSwitch() pTxData0 = LIGHT_TOGGLE_CMD; pTxData0 = LIGHT_TOGGLE_CMD; / Initialize BasicRF/ Initialize BasicRF basicRfConfig.my

52、Addr = SWITCH_ADDR; basicRfConfig.myAddr = SWITCH_ADDR; if(basicRfInit(&basicRfConfig)=FAILED) if(basicRfInit(&basicRfConfig)=FAILED) HAL_ASSERT(FALSE); HAL_ASSERT(FALSE); basicRfReceiveOff(); basicRfReceiveOff(); / / 由于模由于模塊塊只需要只需要發(fā)發(fā)射,所以把接收射,所以把接收屏屏蔽掉以降低功耗蔽掉以降低功耗 / Main loop/ Main loop while (TRUE) while (TRUE) if(halButtonPush

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論