找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6425|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Zigbee之旅:第一個(gè)CC2430程序LED-IAR相關(guān)設(shè)置

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71477 發(fā)表于 2015-1-1 19:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一、承上啟下
     在上一篇文章《Zigbee之旅(一):開(kāi)天辟地》中,我們簡(jiǎn)要的介紹了Zigbee,以及其開(kāi)發(fā)環(huán)境的搭建。OK,現(xiàn)在工具都齊全了,一個(gè)問(wèn)題隨之產(chǎn)生:如何利用這些軟、硬件來(lái)編寫(xiě)一個(gè)能夠跑起來(lái)的程序呢?
     本篇文章基本是來(lái)回答以上問(wèn)題的:以“LED燈閃爍”這個(gè)小實(shí)驗(yàn)作為例子,介紹如何配置IAR以適合開(kāi)發(fā)基于CC2430的程序,如何運(yùn)用 IAR 編寫(xiě)并在線調(diào)試程序。
二、IAR的配置
     IAR是一個(gè)強(qiáng)大的嵌入式開(kāi)發(fā)平臺(tái),支持非常多種類的芯片。IAR中的每一個(gè)Project,都可以擁有自己的配置,具體包括Device類型、堆/棧、Linker、Debugger等。
(1)新建 Workspace 和 Project
     首先新建文件夾 ledtest。打開(kāi)IAR,選擇主菜單File -> New -> Workspace建立新的工作區(qū)域。
     選擇Project -> Create New Project -> Empty Project,點(diǎn)擊OK,把此工程文件保存到文件夾 ledtest 中,命名為:ledtest.ewp(如下圖)。
(2)配置General Options
       Target設(shè)置:Device:CC2430;
                         Code Mode:Near;
                         Data model:Large;
                         Calling convention:XDATA stack reetrant
     Data pointer設(shè)置:Number of DPTRs:1
     Stack/Heap設(shè)置:XDATA stack size:0x1FF
(3)Linker設(shè)置
     Linker command file:選擇lnk51ew_cc2430.xcl
(4)Debugger設(shè)置:
     Driver:Texas Instruments (本實(shí)驗(yàn)為真機(jī)調(diào)試,所以選擇TI;若其他程序要使用IAR仿真器,可選Simulator)
     Device Description file:CC2430.ddf
      至此,針對(duì)本實(shí)驗(yàn)的IAR配置基本結(jié)束,下面來(lái)介紹其編碼實(shí)現(xiàn)。
三、程序代碼的編寫(xiě)(1)新建程序文件
      選擇File->New->File,新建文件main.c。
(2)引入頭文件
      基于CC2430的程序,必須包含對(duì)ioCC2430.h的引用,此文件定義了CC2430的各類特殊功能寄存器(SFR)的地址映射。
#include <ioCC2430.h>         //引入CC2430所對(duì)應(yīng)的頭文件(包含各SFR的定義)
      此文件內(nèi)置于IAR中(類似于stdio.h),將鼠標(biāo)至于此行代碼上,右鍵,選擇 OPen "ioCC2430.h" ,即可看到此頭文件的全部?jī)?nèi)容。
(3)定義LED引腳
     查看開(kāi)發(fā)板電路圖,如下所示:
     可知led1~4分別受引腳P1_0~P4_0的控制,因此可以定義 led1、led2、led3、led4 分別為引腳 P1_0、P2_0、P3_0、P4_0。
#define led1    P1_0          //定義LED1為P1_0口控制
#define led2    P1_1          //定義LED2為P1_1口控制
#define led3    P1_2          //定義LED3為P1_2口控制
#define led4    P1_3          //定義LED4為P1_3口控制

(4)main函數(shù)
     接下來(lái),開(kāi)始編寫(xiě)main函數(shù)。
     首先,在使用P1.0~P1.4端口前,需對(duì)其工作方式以及輸入/輸出方向進(jìn)行設(shè)置,其中涉及到兩個(gè)SFR:P1SEL、P1DIR。
  P1SEL  = 0x00;          //設(shè)置P1為普通 I/O 口
  P1DIR |= 0x0F;          //設(shè)置P1.0 P1.1 P1.2 P1.3 為輸出

Zigbee 小貼士
CC2430具有 P0_0 ~ P0_7 , P1_0~P1_7 , P2_0~P2_7 共21個(gè)I/O口。它們可作為通用數(shù)字I/O,也可用于連接ADC、定時(shí)/計(jì)數(shù)器或USART等外設(shè)IO。
CC2430的SFR中有三類寄存器可用于配置這些IO口:
PxSEL(x為0/1/2):P0/P1/P2口功能選擇
                                0:通用數(shù)字IO,1:外設(shè)IO,缺省默認(rèn)為0
PxDIR(x為0/1/2):P0/P1/P2口方向
                                0:輸入,1:輸出,缺省默認(rèn)為0
PxINP(x為0/1):P0/P1口輸入模式
                                0:上拉/下拉,1:三態(tài),缺省默認(rèn)為0
在使用IO口時(shí)需配置,若缺省,則取系統(tǒng)默認(rèn)值。
     然后初始化4個(gè)LED燈,設(shè)為全滅:
  led1 = 1;   
  led2 = 1;
  led3 = 1;
  led4 = 1;

     最后,編寫(xiě)LED燈閃爍效果代碼:
    led1 = 0;  //led1閃爍
    Delay(10);
    led1 = 1;
    Delay(10);
   
    led2 = 0;  //led2閃爍
    Delay(10);
    led2 = 1;
    Delay(10);
   
    led3 = 0;  //led3閃爍
    Delay(10);
    led3 = 1;
    Delay(10);
   
    led4 = 0;  //led4閃爍
    Delay(10);
    led4 = 1;
    Delay(10);


     其中涉及到一個(gè)延時(shí)子函數(shù)Delay(unsigned char n):
void Delay(unsigned char n)  {
  unsigned char i;
  unsigned int j;
  for(i = 0; i < n; i++)
    for(j = 1; j; j++)
    ;
}   


(5)代碼總覽
      將上述代碼合并為一個(gè)整體,如下所示:
//引入頭文件
#include <ioCC2430.h>         //引入CC2430所對(duì)應(yīng)的頭文件(包含各SFR的定義)

//定義LED引腳
#define led1    P1_0          //定義LED1為P1_0口控制
#define led2    P1_1          //定義LED2為P1_1口控制
#define led3    P1_2          //定義LED3為P1_2口控制
#define led4    P1_3          //定義LED4為P1_3口控制 //延時(shí)子程序
void Delay(unsigned char n)  {
  unsigned char i;
  unsigned int j;
  for(i = 0; i < n; i++)
    for(j = 1; j; j++)
    ;
}

void main(void)
{
  P1SEL  = 0x00;          //設(shè)置P1為普通 I/O 口
  P1DIR |= 0x0F;          //設(shè)置P1.0 P1.1 P1.2 P1.3 為輸出
  
  led1 = 1;   //初始化,4個(gè)led燈全熄
  led2 = 1;
  led3 = 1;
  led4 = 1;
  
  while(1)     //開(kāi)始循環(huán)
  {
    led1 = 0;  //led1閃爍
    Delay(10);
    led1 = 1;
    Delay(10);
   
    led2 = 0;  //led2閃爍
    Delay(10);
    led2 = 1;
    Delay(10);
   
    led3 = 0;  //led3閃爍
    Delay(10);
    led3 = 1;
    Delay(10);
   
    led4 = 0;  //led4閃爍
    Delay(10);
    led4 = 1;
    Delay(10);
  }
}

     OK,這個(gè)小實(shí)驗(yàn)的代碼就編寫(xiě)好了,是不是很簡(jiǎn)單啊,呵呵~
四、編譯及調(diào)試
     選擇Project -> Make,編譯代碼,若成功,則會(huì)出現(xiàn)以下輸出:
     按 Zigbee開(kāi)發(fā)板 → 調(diào)試器 → PC的USB接口 的順序連接Zigbee設(shè)備,然后選擇Project -> Debug,程序就會(huì)被自動(dòng)下載到開(kāi)發(fā)板中。
     然后選擇 Debug -> Go,即可啟動(dòng)程序,這時(shí),你就會(huì)看到4個(gè)LED燈依次閃爍了!雖然這是一個(gè)簡(jiǎn)單得不能再簡(jiǎn)單的小實(shí)驗(yàn),但是當(dāng)筆者成功實(shí)現(xiàn)它的時(shí)候,還是小小的興奮了一把~呵呵!
五、結(jié)語(yǔ)
     本文以“LED燈閃爍實(shí)驗(yàn)”為基礎(chǔ),分別從IAR的配置、程序代碼的編寫(xiě),以及編譯及調(diào)試的過(guò)程介紹了整個(gè)實(shí)現(xiàn)過(guò)程。接下來(lái)的一篇,則會(huì)在了解了開(kāi)發(fā)程序的基本過(guò)程的基礎(chǔ)上,介紹幾個(gè)CC2430開(kāi)發(fā)的基礎(chǔ)實(shí)驗(yàn),涉及定時(shí)器串口通信、AD轉(zhuǎn)換、系統(tǒng)睡眠以及看門(mén)狗 等,敬請(qǐng)期待

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1075447 發(fā)表于 2023-5-5 12:15 | 只看該作者
可以實(shí)現(xiàn)以zigbee為基礎(chǔ)的室內(nèi)定位嗎老哥
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表