Zigbee cc2530筆記 按鍵與外部中斷

2021-08-14 20:53:55 字數 1860 閱讀 1816

上篇筆記介紹了通用i/o的設定,這次來介紹下外部中斷功能。
通用 i/o引腳設定為輸入後,可以用於產生中斷。中斷可以設定在外部訊號的上公升或下降沿觸發。 p0、 p1

或p2埠都有中斷使能位,對位於ienl-2暫存器內的埠所有的位都是公共的,如下:

� ieni.p0ie: p0中斷使能

� ien2.piie: p1中斷使能

� ien2.p2ie: p2中斷使能

除了這些公共中斷使能之外, 每個埠的位都有位於sfr暫存器p0ien、 p1ien和p2ien的單獨的中斷使

能。即使配置為外設i/o或通用輸出的i/o引腳使能時都有中斷產生

當中斷條件發生在 i/o引腳之一上面, p0-p2中斷標誌暫存器 p0ifg、 p1ifg或p2ifg中相應的中斷狀態

標誌將設定為1。不管引腳是否設定了它的中斷使能位,中斷狀態標誌都被設定。當中斷已經執行,中斷狀態

標誌被清除,該標誌寫入0。 這個標誌必須在清除cpu埠中斷標誌( pxif)之前被清除。

用於中斷的sfr暫存器描述在下一節。暫存器總結如下:

p0ien: p0中斷使能

p1ien: p1中斷使能

p2ien: p2中斷使能

pictl: p0、 p1和p2觸發沿設定

p0fg: p0中斷標誌

p1ifg: p1中斷標誌

p2ifg: p2中斷標

實驗原理圖:

這裡用到的i/o口是p1_2

實驗所用到的暫存器:

程式設計步驟:

1.配置p1_2i/o的狀態

void key_init()

2.配置p1_2的中斷暫存器

void interrupt_init()

3.按鍵消抖處理與鍵值的讀取

uchar key_scan()

while(!key);

return (1);

} }

return(0);

} 4.清除中斷標誌位

void interrupt_cleanflag()

5.main函式(編寫中斷服務程式)

uchar keytouchtimes=0;

void main()

}

}//中斷服務程式的編寫

__interrupt void p1_isr(void)

while(!key); //雙重鬆手檢測,去抖動

interrupt_cleanflag();

if (keytouchtimes >= 4)

keytouchtimes = 1;

else

keytouchtimes ++; // 按鍵次數加 1

p1if = 0; //清中斷標誌

}

教父3 筆記

教父3是一部很矯情的 原因在於教父3就是一部斬草不除根,然後還亮將禍患留在自己身邊,首領貼心照顧偏愛這個禍害,禍害長大了開始秘密禍害這個家族,然後首領還是不忍心處理掉這個禍害,忠心耿耿的手下被殺才布局讓手下去除掉禍害!大部分時間講述好萊塢的各種齷齪和骯髒,我猜想國內大部分是看電影過來的,如果以閱讀 ...

3 21 筆記 心得

課堂筆記 1函式內,區域性作用域 函式外,全域性作用域 2.this,指向誰,具體看誰呼叫這個函式 3.localstorage.setitem key,value 用於將key value鍵值對的方式插入localstorage中。4.localstorage.getitem key 讀取key的...

科目三筆記

1 起步 1左燈,喇叭3秒 2鬆手剎 3腳踩離合器和腳剎,掛一檔 先手剎,後檔位 4起步 問題 在轉彎時,加油掛2擋以及 3擋 還是轉彎過後直行,加油掛擋呢?2 左轉 右 速度在20碼上 3 加減檔 3 2 3 4 3 問題 1掛4檔後,加油到 38碼?2什麼時候從4擋掛到 3擋,檔位切換要等多久?...