上篇筆記介紹了通用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擋,檔位切換要等多久?...