標題: CC2530外部中斷控制LED開關(guān)實驗詳解與源程序 [打印本頁]

作者: cc880    時間: 2017-12-14 01:58
標題: CC2530外部中斷控制LED開關(guān)實驗詳解與源程序
5、CC2530 外部中斷控制LED開關(guān)

1.實驗?zāi)康?/font>
1)、通過實驗掌握CC2530芯片GPIO的配置方法,帶你一步步走進嵌入式大門
2)、握Led驅(qū)動電路及開關(guān)Led的原理
3)、過按鍵S1產(chǎn)生外部中斷改變LED1\LED2\LED3狀態(tài)


2.實驗設(shè)備

硬件:PC 機 一臺 EB2530(底板、核心板、仿真器、USB 線) 一套

軟件:2000/XP/win7 系統(tǒng),IAR 8.10 集成開發(fā)環(huán)境


3.實驗相關(guān)電路圖




發(fā)光二極管是屬于二極管的一種,具有二級管單向?qū)щ娞匦,即只有在正向電壓(二極 管的正極接正,負極接負)下才能導通發(fā)光。P1.0引腳接發(fā)光二極管(D1)的負極, 所以P1.0引腳輸出低電平D1亮,P1.0引腳輸出高電平D1熄滅,D2,D3同理。


注:D3燈的控制腳復(fù)用到了防真器,而防真器用到了鎖存器,所以要使得D3亮,必 須取下防真器。

按鍵S1接在P0_1上,當按鍵松開時,p0_1通過電阻上拉為高電平,當按鍵S1按下時,
p0_1為低電平。


4.實驗相關(guān)寄存器

操作P1.0我們需要掌握相關(guān)寄存器的作用和配置方法。如下表所示:

寄存器
作用
描述
P1 (0x90)
端口1
端口1。通用I / O端口。可以從SFR位尋址。
P1SEL(0x
F4)
端口1 功能
選擇
P1.7 到P0.0功能選擇
0: 通用I / O
1: 外設(shè)功能
P1DIR(0x
FE)
端口1 方向
P1.7到P1.0的I/O方向
0: 輸入
1: 輸出
P1INP(0x
F6)
端口1 輸入
模式
P1.7到P1.2的I/O輸入模式。由于P1.0 和P1.1 沒有上
拉/下拉功能, P1INP暫時不需要配置, 了解一下為后面的實驗打下基礎(chǔ)
0: 上拉/下拉(見P2INP (0xF7)–端口2輸入模式)
1: 三態(tài)



CC2530外部中斷需要配置P0IEN 、PICTL 、P0IFG、IEN1寄存器。 外部中斷寄存器 說明如下表所示:
寄存器
作用
描述
P0IEN(0xAB)
端口0 中斷屏蔽
端口P0.7到P0.0中斷使能
0:中斷禁用
1:中斷使能。





PICTL(0x8C)
端口中斷控制
P0ICON(Bit0)
端口0, 7到0輸入模式下的中斷配置。
該位為所有端口0的輸入選擇中斷請求條件。
0: 輸入的上升沿引起中斷
1: 輸入的下降沿引起中斷
P0IFG(0x89)
端口0 中斷狀態(tài)標志
端口0,位7到位0輸入中斷狀態(tài)標志。當
輸入端口中斷請求未決信號時,其相應(yīng)的標志位將置1。
IEN1 (0xB8)
中斷使能1
P0IE(Bit5)
端口0中斷使能
0: 中斷禁止
1: 中斷使能

按照表格寄存器的內(nèi)容,對P1.0口進行配置,當P1.0輸出低電平時D1被點亮,D2、 D3同理。S1按下時P0.1產(chǎn)生外部中斷從而控制LED1/LED2/LED3的亮滅所以配置如下:


P1SEL &=~0x01; //配置P1.0為通用IO口 ,默認為0的,可以不設(shè) P1DIR |= 0x01;              //P10 定義為輸出

按鍵S1配置如下:


P0IEN |= 0x2; // P0.1 設(shè)置為中斷方式 1:中斷使能 PICTL |= 0x2; //下降沿觸發(fā)
IEN1 |= 0x20; //允許P0口中斷; P0IFG = 0x00; //初始化中斷標志位 EA = 1; //打開總中斷



5.源碼分析

1)、 請 打 開 工 程 , 學 習 例 程              \5 、 CC2530              外 部 中 斷 控 制 LED 開 關(guān)
\sz-yy-zigbee\sz-yy-zigbee.eww
2)、主代碼 main.c 如下:

  1. /**************************************/
  2. /*描述:按鍵 S1 外部中斷方式改變 LED1 狀態(tài)
  3. **************************************/
  4. #include <ioCC2530.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. //定義控制 LED 燈的端口



  8. #define LED1 P1_0 //定義 LED1 為 P1.0 口控制
  9. #define KEY1 P0_1              //中斷口
  10. //函數(shù)聲明
  11. void Delayms(uint);              //延時函數(shù)
  12. void InitLed(void);              //初始化 P1 口
  13. void KeyInit();              //按鍵初始化
  14. uchar KeyValue=0;
  15. /****************************
  16. //延時函數(shù)
  17. *****************************/
  18. void Delayms(uint xms)              //i=xms 即延時 i 毫秒
  19. {
  20. uint i,j;
  21. for(i=xms;i>0;i--)
  22. for(j=587;j>0;j--);
  23. }
  24. /**************************** LED 初始化程序
  25. *****************************/
  26. void InitLed(void)
  27. {
  28. P1DIR |= 0x01; //P1_0、P1_1 定義為輸出 LED1 = 1;              //LED1 燈熄滅
  29. }
  30. /**************************** KEY 初始化程序--外部中斷方式
  31. *****************************/
  32. void InitKey()
  33. {
  34. P0IEN |= 0X2;              //P01 設(shè)置為中斷方式 PICTL |= 0X2; // 下降沿觸發(fā)
  35. IEN1 |= 0X20;              // 允許 P0 口中斷; P0IFG = 0x00;              // 初始化中斷標志位 EA = 1;
  36. }
  37. /**************************** 中斷處理函數(shù)
  38. *****************************/
  39. #pragma vector = P0INT_VECTOR              //格式:#pragma vector = 中斷向量,緊接 著是中斷處理程序



  40.   interrupt void P0_ISR(void)
  41. {
  42. Delayms(10);                            //去除抖動 LED1=~LED1;                           //改變 LED1 狀態(tài) P0IFG = 0;              //清中斷標志
  43. P0IF = 0;              //清中斷標志
  44. }
  45. /*************************** 主函數(shù)
  46. ***************************/
  47. void main(void)
  48. {
  49. InitLed();              //調(diào)用初始化函數(shù) InitKey();
  50. while(1)
  51. {
  52. }
  53. }
復(fù)制代碼
6.實驗步驟

1)、打開代碼工程,\5、CC2530 外部中斷控制 LED 開關(guān)\sz-yy-zigbee\sz-yy-zigbee.eww, 如果 IAR 沒有很安裝,請按。\學習例程以及開發(fā)環(huán)境安裝\2.開發(fā)環(huán)境搭建.pdf 去安裝。
2)通過仿真器把開發(fā)板接到電腦上。

3)編繹下載。




程序已下載完成,可以運行:


4).現(xiàn)象:每按下一次 S1,D1 的狀態(tài)會跟著變化,這里是通過按鍵中斷實驗的哦。


全部資料51hei下載地址:
5、CC2530 外部中斷控制LED開關(guān).rar (606.82 KB, 下載次數(shù): 16)







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1