嵌入式實驗 (王明欣 楊睿 雷鳴)

實驗一:LED發(fā)光二極管實驗

1.實驗環(huán)境

1)硬件:通用節(jié)點一個罕拂、USB仿真器颠焦、PC機法精;

2)軟件:IAR Embedded

Workbench for

MCS-51沛厨;

2.實驗內(nèi)容

1)熟悉Zigbee硬件模塊相關(guān)接口;

2)使用IAR開發(fā)環(huán)境設計程序像鸡,利用CC2530

的IO口進行LED發(fā)光二極管的亮滅操作顽照;

3.

實驗原理

1)硬件接口原理

2) 軟件設計

#include

#define

D_COUNT? 50? ? ?

//通用延時時間計數(shù)

void Delay(unsigned int n)

{

? unsigned

int t,tt;

for(tt=0;tt

? for(t=0;t<1000;t++)

? ?

;

}

void main( void )

{

? unsigned

int i;

P0DIR? =0xff;? ? ? ?

//設置P0口全部為輸出

P1DIR? =0xff;? ? ? ?

//設置P1口全部為輸出

? P0 =0xff;? ? ? ? ? ?

//點亮所有燈

? P1 =0xff;

Delay(D_COUNT);Delay(D_COUNT);Delay(D_COUNT);

? P0 =0;? ? ? ? ? ? ? ?

//熄滅所有燈

? P1 =0;

Delay(D_COUNT);Delay(D_COUNT);Delay(D_COUNT);

while(1)

{?

? for(i=0;i<8;i++)

? {

? ? P0 =0x01<<i;? ? ? ?

//P0的第i位為1,其它位為0

? ? //P1_0 ^=1;? ? ?

//P1.0取反

? ? Delay(D_COUNT);? ? ?

//設置IO狀態(tài)后需要一個延時來讓我們看到效果

? }

? P0 = 0;

? for(i=0;i<8;i++)

{

? ? P1 =

0x01<<i;? ? ?

//P1的第i位為1啊楚,其它位為0

? ? //P0_0 ^=1;? ? ?

//P0.0取反

? ? Delay(D_COUNT);? ?

//設置IO狀態(tài)后需要一個延時來讓我們看到效果

?

}

?

P1 = 0;

}

}

程序首先通過配置CC2530相關(guān)控制寄存器P0DIR、P1DIR來設置P0浑彰、P1工作于普通GPIO的輸出模式恭理。然后點亮所有燈,經(jīng)過一個長延時后再熄滅所有燈郭变,再經(jīng)過一個長延時后進入程序主循環(huán)颜价。在循環(huán)中首先依次將P0的某一位置1(從低到高,其他位為0诉濒,每次置位后在進行一個標準延時)周伦。然后對P0所有位清0,接著對P1口執(zhí)行以上類似操作未荒。P1口操作結(jié)束后清0专挪,再回到上面循環(huán)對P0口進行操作……

4. 實驗步驟

·使用USB 仿真器連接PC 機和通用節(jié)點模塊,模塊電源開關(guān)處于中間“OFF”檔片排,使用仿真器給模塊供電寨腔。

·啟動IAR 開發(fā)環(huán)境,打開“...\基礎(chǔ)傳感器實驗\1-5基礎(chǔ)例程\1-LED”目錄下的實驗工程率寡。

·在IAR 開發(fā)環(huán)境中編譯程序迫卢、點擊下載、調(diào)試程序勇劣。按“F5”使程序運行靖避。

·觀察現(xiàn)象潭枣,可以看到發(fā)光二極管輪流亮起。

·使用調(diào)試界面上的停止按鈕使程序停止幻捏,觀察現(xiàn)象是否停止盆犁。(現(xiàn)象停止)

·使用調(diào)試界面上的go按鈕(等同“F5”),觀察現(xiàn)象篡九。(二極管輪流亮起)

實驗二:串口收發(fā)數(shù)據(jù)實驗


1.實驗環(huán)境

1)硬件:通用節(jié)點或任意傳感器節(jié)點一個谐岁、USB仿真器、USB電纜榛臼、PC機伊佃;

2)軟件:IAR Embedded

Workbench for

MCS-51、串口調(diào)試工具沛善;

2.實驗內(nèi)容

1)熟悉Zigbee硬件模塊相關(guān)接口航揉;

2)使用IAR開發(fā)環(huán)境設計程序,利用CC2530

的串口0 進行數(shù)據(jù)收發(fā)通訊金刁;

3.實驗原理

1) 硬件接口原理

2)軟件設計

#include "ioCC2530.h"

#include <string.h>

#define uint unsigned int

#define uchar unsigned char

//定義控制燈的端口

#define led1 P1_0

#define led2 P1_1

void InitIO(void);?

? ? ? ? //IO初始化

void InitUart(void);?

? ? //串口初始化

void SendString(char*string,uint legth);

? //發(fā)送字符串

uchar temp;? ? ? ? //存放接受的數(shù)據(jù)

char wch[] = "Welcome to test this program!\n";

void DelayXms(unsigned int Count)

{

unsigned int i;

unsigned int j;

for(i = 0; i < Count; i++)

{

? ? for( j=10000;j>0; j--);

}

}

void InitIO(void)

{

? ? SLEEPCMD

&= ~0X04;

? ? CLKCONCMD =

0X10;? ?

?

//32k和32M時鐘使用外部晶體帅涂,timer分頻8M

?

while(CLKCONSTA!=0X10);?

//等待時鐘切換

? ? SLEEPCMD = 0X04;

? ?

? ? P2DIR =0x00;? ?

? ?

? //高兩位零

若設則最高優(yōu)先USART0

? ? P1DIR|=0X03;? ?

? ?

? //P1.0 P1.1 LEDs 燈端口配置

? ? P0DIR|=0X00;? ?

? ?

? //input

? ?

? ? PERCFG =0x00;? ?

? ?

? //UART0 默認端口

? ? P1SEL = 0X00;

? ? P0SEL =0X0c;? ?

? ?

//P0<3:2>設置成外圍應用

}

void InitUart(void)

{

? ? U0CSR |= 0x80;

//UART方式

? ? U0GCR = 11;

? ?

? //baud_e 波特率設為115200

? ? U0BAUD |= 216; //baud_m =

BaudRate*2^(28-buad_e)/32M-256//BaudRate=(256+baud_m)/2^(28-buad_e)x32MHz

? ? UTX0IF =1;? ? //接收中斷標記

? ? U0CSR |= 0X40; //允許接收

? ? URX0IE =1;? ? //接收中斷使能

? ? EA =1;

? ?

? ?

? ?

? ?

? ?

? ?

//總中斷開關(guān)打開

}

void SendString(char*string,uint lenth)

{

? ? uint j;

? ? for (j=0;

j<lenth; j++)

? ? {

? ? ? U0DBUF

= *string++;?

?

//將要發(fā)送字符送入U0DBUF發(fā)送寄存器

? ?

while(UTX0IF == 0);?

?

//等待發(fā)送完成

? ? ? UTX0IF

= 0;? ?

? ?

? ? //清0標志位

? ? }

}

void main(void)

{

? ? InitIO();

? ? InitUart();

? ? DelayXms(10);

? ? led1=1;

? ? //點亮2個LED燈

? ? led2=1;

? SendString(wch,sizeof(wch));

? ?

? ? while(1)

? ? {

? ? ? ;

//進入無限循環(huán)等待中斷函數(shù)被處觸發(fā)

? ? }

}

#pragma vector = URX0_VECTOR

__interrupt void UART0_ISR(void)

{

? URX0IF = 0;?

? ?

//清中斷標志

temp = U0DBUF;

? ?

? U0DBUF = temp; //將收到的字符發(fā)送回去

while(UTX0IF == 0);? //等待發(fā)送 UTX0IF = 0;? //清發(fā)送標志

led1 = ~led1; //指示中斷活動

? led2 = ~led2;

}

DelayXms(unsigned int

Count):延時函數(shù)。?

InitIO():完成IO初始化功作尤蛮。InitUart():完成串口的初始化工作媳友。

SendString(char*string,uint legth):完成從串口發(fā)送字符串。

main():主函數(shù)产捞。完成各種初始化后進入循環(huán)等待串口接收中斷被觸法醇锚。

UART0_ISR():串口接收中斷函數(shù)。將收到的字符從串口發(fā)回坯临。同時改變LED燈的狀態(tài)焊唬,指示串口收到數(shù)據(jù)。

此實驗的是實驗現(xiàn)象:

發(fā)送文本框“字符串輸入框”中的內(nèi)容尿扯,點擊發(fā)送按鈕求晶⊙娴瘢可以看到相同的字符串又被返回

實驗三:按鍵控制實驗

1.實驗環(huán)境

硬件:傳感器節(jié)點一個衷笋、USB仿真器、PC機矩屁;

軟件:IAR Embedded Workbench for MCS-51辟宗;

2.實驗內(nèi)容

熟悉Zigbee硬件模塊相關(guān)接口;

使用IAR 開發(fā)環(huán)境設計程序吝秕,利用CC2530 的GPIO讀取按鍵值并相應對進行LED發(fā)光二極管的亮滅操作泊脐;

3.實驗原理

1)硬件接口原理

2)軟件設計

#include <ioCC2530.h>

#define D_COUNT

50?

? ? //標準延時周期計數(shù)

#define KEY_INPUT P2_0?

? //定義按鍵引腳

void Delay(unsigned int n)

{

? unsigned int t,tt;

? for(tt=0;tt<n;tt++)

?

for(t=0;t<1000;t++)

? ;

}

void main( void )

{

? unsigned int i;

? P0DIR? =0x00;? ?

? ? //P0口全部為輸入

? P1DIR? =0x03;? ?

? ? //P1口低2位輸出,其他輸入

? P1 = 0;

Delay(D_COUNT);Delay(D_COUNT);Delay(D_COUNT);

? while(1)

? {

? if(!KEY_INPUT)?

? ? //判斷按鍵是否按下

? ? {

i++;

? ? ? P1 =i&0x03;?

? ?

//P1低2位賦值為i的低2位

? ?

Delay(100);? ?

?

//延時烁峭,加長2次判斷間隔

? ? }

? ? Delay(10);

? }

}

程序通過讀取P2.0的信息來獲得按鍵的狀態(tài)容客,同時對P1上的2個發(fā)光二極管進行操作秕铛。程序中的長延時是為了使得一定時間內(nèi)的按下只被識別為一次按下,短延時是為了濾掉可能的干擾信號缩挑。

4.實驗步驟

1)使用USB 仿真器連接PC

機和任意一個傳感器節(jié)點模塊但两,模塊電源開關(guān)處于“ON”檔,使用電池給模塊供電(如電池電量低插上USB電纜供置,可一邊充電一邊使用)谨湘。

2)啟動IAR 開發(fā)環(huán)境,打開“...\基礎(chǔ)傳感器實驗\1-5基礎(chǔ)例程\3-按鍵控制”目錄下的實驗工程芥丧。

3)在IAR 開發(fā)環(huán)境中編譯程序紧阔、點擊下載、調(diào)試程序续担。按“F5”使程序運行擅耽。

4)觀察現(xiàn)象:可以看到2個發(fā)光二極管都沒有亮起。

當按下模塊中間的“KEY”按鍵物遇,可觀察到發(fā)光二極管亮起秫筏。按住其中一個按鍵,在短時間內(nèi)松手挎挖,則認為是短按这敬,LED亮起又熄滅;如果一直按住這個按鍵不松手蕉朵,那么超過規(guī)定的長時間內(nèi)崔涂,則認為是長按,LED會持續(xù)亮一段時間始衅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冷蚂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子汛闸,更是在濱河造成了極大的恐慌蝙茶,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诸老,死亡現(xiàn)場離奇詭異隆夯,居然都是意外死亡,警方通過查閱死者的電腦和手機别伏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門蹄衷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厘肮,你說我怎么就攤上這事愧口。” “怎么了类茂?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵耍属,是天一觀的道長托嚣。 經(jīng)常有香客問我,道長厚骗,這世上最難降的妖魔是什么注益? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮溯捆,結(jié)果婚禮上丑搔,老公的妹妹穿的比我還像新娘。我一直安慰自己提揍,他們只是感情好啤月,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劳跃,像睡著了一般谎仲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刨仑,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天郑诺,我揣著相機與錄音,去河邊找鬼杉武。 笑死辙诞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的轻抱。 我是一名探鬼主播飞涂,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祈搜!你這毒婦竟也來了较店?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤容燕,失蹤者是張志新(化名)和其女友劉穎梁呈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蘸秘,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡官卡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秘血。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片味抖。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖灰粮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忍坷,我是刑警寧澤粘舟,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布熔脂,位于F島的核電站,受9級特大地震影響柑肴,放射性物質(zhì)發(fā)生泄漏霞揉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一晰骑、第九天 我趴在偏房一處隱蔽的房頂上張望适秩。 院中可真熱鬧,春花似錦硕舆、人聲如沸秽荞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扬跋。三九已至,卻和暖如春凌节,著一層夾襖步出監(jiān)牢的瞬間钦听,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工倍奢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朴上,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓卒煞,卻偏偏與公主長得像余指,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子跷坝,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容