本問(wèn)主要介紹了CC2530處理器的通用輸入/輸出接口(GPIO),以及GPIO的位操作,理解GPIO的基本原理和功能,最后使用C語(yǔ)言驅(qū)動(dòng)CC2530的GPIO實(shí)現(xiàn)對(duì)信號(hào)燈的控制。
CC2530的GPIO引腳有3個(gè)8位端口,分別是端口0,端口1和端口2,分別表示位P0,P1,P2,其中P0和P1是8位端口,而P2只有5位可用,所有端口均可以通過(guò)SFR寄存器來(lái)進(jìn)行位尋址和字節(jié)尋址。
寄存器PxSEL中的x表示端口0~2,用來(lái)設(shè)置端口的每個(gè)引腳位GPIO(0)或者外部設(shè)備輸入信號(hào)(1),在默認(rèn)情況下,當(dāng)復(fù)位之后,所有的數(shù)字輸入/輸出引腳都設(shè)置為通用輸入引腳。
寄存器PxDIR用來(lái)改變一個(gè)端口引腳的方向,0設(shè)置為輸入,1設(shè)置為輸出。
GPIO一般是通過(guò)位操作完成寄存器設(shè)置的,而常用的位操作符有按位與“&”,按位或“|”,按位取反“~”,按位異或“^”,以及左移“<<”和右移“>>”操作。值得注意的是常使用按位或運(yùn)算符將一個(gè)數(shù)據(jù)位置1,比如將P0端口方向寄存器的第一位和第二位置1(P0端口的0和1引腳置為輸出模式),可以寫(xiě)為P0DIR |= 0x03;常使用按位與“&”將一個(gè)數(shù)據(jù)位置0,比如P0SEL &= ~0x03;,表示將將端口0和1配置位GPIO模式。
通過(guò)查看電路圖,實(shí)現(xiàn)CC2530微處理器開(kāi)發(fā)板上的紅燈亮,只需使P0_1為0即可。
驅(qū)動(dòng)程序如下:
1 #include "iocc2530.h" 2 3 #define uint unsigned int 4 #define uchar unsigned char 5 6 #define Rled P1_1 7 #define Gled P1_0 8 #define ON 0 9 #define OFF 1 10 #define Key1 P1_4 11 12 void delay(uint n){//定義延時(shí)函數(shù) 13 uint i, j; 14 for(i = 0; i < n; i++) 15 for(j = 500; j >= 0; j--); 16 } 17 void key_init(){ 18 P1SEL &= 0x10;//GPIO模式 19 P1DIR &= 0x10;//輸出模式 20 } 21 void led_init(){ 22 P1SEL &= ~0x03;//GPIO模式 23 P1DIR |= 0x03; //輸出模式 24 25 Rled = OFF; 26 Gled = OFF; 27 } 28 void main() 29 { 30 led_init();//led初始化 31 key_init();//案件初始化 32 Rled = ON;//打開(kāi)紅燈 33 34 while(1){ 35 if(Key1 == ON){ 36 delay(1000); //消抖 37 if(Key1 == ON){ 38 while(Key1 == ON);//松手檢測(cè) 39 40 Rled = ~Rled; 41 } 42 } 43 } 44 }
燒寫(xiě)完成后,可以看到綠燈常亮,按鍵被按下之后紅燈改變一次狀態(tài),功能完成。
需要思考的是有時(shí)按鍵控制led時(shí)不太準(zhǔn)確,后者說(shuō)不太靈敏,從而引入下一節(jié),通過(guò)中斷使得按鍵控制led更加準(zhǔn)確。
編輯:hfy
-
處理器
+關(guān)注
關(guān)注
68文章
19404瀏覽量
230961 -
led
+關(guān)注
關(guān)注
242文章
23347瀏覽量
662696 -
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121027
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論