cc2530的第三次實(shí)驗(yàn):按鍵中斷控制流水燈
效果為按一次按鍵,流水燈亮一次
實(shí)驗(yàn)相關(guān)電路圖:
實(shí)驗(yàn)相關(guān)寄存器:
初始化函數(shù)
//初始化LED燈 //設(shè)置P1SEL,通用為0,外設(shè)為1 11111100 P1SEL &=~0x03; //設(shè)置P0SEL, 11101111 P0SEL &= ~0x10; //設(shè)置P1DIR,輸出為1,輸入為0 00000011 P1DIR |= 0x03; //設(shè)置P0DIR 00010000 P0DIR |= 0x10; //初始化按鈕和中斷 //初始化按鈕 //初始化P0SEL,通用為0 11111101 P0SEL&=~0x02; //初始化P0DIR,輸入為0 11111101 P0DIR&=~0x02; //初始化中斷 //設(shè)置引腳中斷 1為中斷使能 00000010 P0IEN |= 0x02; //設(shè)置端口中斷 IEN1=1; //設(shè)置端口中斷觸發(fā)方式 1為中斷使能 IEN1|=0x20; //設(shè)置總中斷 EA=1; //清空標(biāo)志位 P0IFG=0;
中斷服務(wù)函數(shù)
//中斷服務(wù)函數(shù) #pragma vector = P0INT_VECTOR //這一行的P0INT_VECTOR是中斷源的名稱嗎? __interrupt void P0ISR(void) { //清除端口中斷標(biāo)志位 P0IFG=0; //LED燈流水亮一遍 BLink(); //清除端口中斷標(biāo)志位 P0IF=0; }
上面的代碼一定要注意P0IFG一定要在P0IF之前清除,話說P0IF與P0IFG到底是干啥用的?他們之間什么關(guān)系,端口的標(biāo)志寄存器?(記得查一下)
P0IFG是端口0中斷狀態(tài)標(biāo)志,P0IF是cpu內(nèi)中斷標(biāo)志寄存器,什么鬼,沒弄明白啊,問一下老師吧!
全部代碼
#includetypedef unsigned int uint; typedef unsigned char uchar; #define LED1 P1_0 #define LED2 P1_1 #define LED3 P0_4 #define BUTTON1 P0_1 uint time=300; //延遲函數(shù) void Delay(uint time) { for(uint i=0;i
-
流水燈
+關(guān)注
關(guān)注
21文章
433瀏覽量
59764 -
CC2530
+關(guān)注
關(guān)注
19文章
221瀏覽量
58112 -
中斷控制
+關(guān)注
關(guān)注
0文章
26瀏覽量
8882
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論