找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71477 發(fā)表于 2015-1-1 19:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、承上啟下
     在上一篇文章《Zigbee之旅(一):開天辟地》中,我們簡要的介紹了Zigbee,以及其開發(fā)環(huán)境的搭建。OK,現(xiàn)在工具都齊全了,一個問題隨之產(chǎn)生:如何利用這些軟、硬件來編寫一個能夠跑起來的程序呢?
     本篇文章基本是來回答以上問題的:以“LED燈閃爍”這個小實驗作為例子,介紹如何配置IAR以適合開發(fā)基于CC2430的程序,如何運用 IAR 編寫并在線調(diào)試程序。
二、IAR的配置
     IAR是一個強大的嵌入式開發(fā)平臺,支持非常多種類的芯片。IAR中的每一個Project,都可以擁有自己的配置,具體包括Device類型、堆/棧、Linker、Debugger等。
(1)新建 Workspace 和 Project
     首先新建文件夾 ledtest。打開IAR,選擇主菜單File -> New -> Workspace建立新的工作區(qū)域。
     選擇Project -> Create New Project -> Empty Project,點擊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 (本實驗為真機調(diào)試,所以選擇TI;若其他程序要使用IAR仿真器,可選Simulator)
     Device Description file:CC2430.ddf
      至此,針對本實驗的IAR配置基本結(jié)束,下面來介紹其編碼實現(xiàn)。
三、程序代碼的編寫(1)新建程序文件
      選擇File->New->File,新建文件main.c。
(2)引入頭文件
      基于CC2430的程序,必須包含對ioCC2430.h的引用,此文件定義了CC2430的各類特殊功能寄存器(SFR)的地址映射。
#include <ioCC2430.h>         //引入CC2430所對應(yīng)的頭文件(包含各SFR的定義)
      此文件內(nèi)置于IAR中(類似于stdio.h),將鼠標至于此行代碼上,右鍵,選擇 OPen "ioCC2430.h" ,即可看到此頭文件的全部內(nèi)容。
(3)定義LED引腳
     查看開發(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ù)
     接下來,開始編寫main函數(shù)。
     首先,在使用P1.0~P1.4端口前,需對其工作方式以及輸入/輸出方向進行設(shè)置,其中涉及到兩個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個I/O口。它們可作為通用數(shù)字I/O,也可用于連接ADC、定時/計數(shù)器或USART等外設(shè)IO。
CC2430的SFR中有三類寄存器可用于配置這些IO口:
PxSEL(x為0/1/2):P0/P1/P2口功能選擇
                                0:通用數(shù)字IO,1:外設(shè)IO,缺省默認為0
PxDIR(x為0/1/2):P0/P1/P2口方向
                                0:輸入,1:輸出,缺省默認為0
PxINP(x為0/1):P0/P1口輸入模式
                                0:上拉/下拉,1:三態(tài),缺省默認為0
在使用IO口時需配置,若缺省,則取系統(tǒng)默認值。
     然后初始化4個LED燈,設(shè)為全滅:
  led1 = 1;   
  led2 = 1;
  led3 = 1;
  led4 = 1;

     最后,編寫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);


     其中涉及到一個延時子函數(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)代碼總覽
      將上述代碼合并為一個整體,如下所示:
//引入頭文件
#include <ioCC2430.h>         //引入CC2430所對應(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口控制 //延時子程序
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個led燈全熄
  led2 = 1;
  led3 = 1;
  led4 = 1;
  
  while(1)     //開始循環(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,這個小實驗的代碼就編寫好了,是不是很簡單啊,呵呵~
四、編譯及調(diào)試
     選擇Project -> Make,編譯代碼,若成功,則會出現(xiàn)以下輸出:
     按 Zigbee開發(fā)板 → 調(diào)試器 → PC的USB接口 的順序連接Zigbee設(shè)備,然后選擇Project -> Debug,程序就會被自動下載到開發(fā)板中。
     然后選擇 Debug -> Go,即可啟動程序,這時,你就會看到4個LED燈依次閃爍了!雖然這是一個簡單得不能再簡單的小實驗,但是當筆者成功實現(xiàn)它的時候,還是小小的興奮了一把~呵呵!
五、結(jié)語
     本文以“LED燈閃爍實驗”為基礎(chǔ),分別從IAR的配置、程序代碼的編寫,以及編譯及調(diào)試的過程介紹了整個實現(xiàn)過程。接下來的一篇,則會在了解了開發(fā)程序的基本過程的基礎(chǔ)上,介紹幾個CC2430開發(fā)的基礎(chǔ)實驗,涉及定時器、串口通信、AD轉(zhuǎn)換、系統(tǒng)睡眠以及看門狗 等,敬請期待

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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