|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
如何安排多級中斷? |
| 作者:hwqfj 欄目:單片機 |
我的系統(tǒng)中有2個中斷,按中斷優(yōu)先級高低排列順序如下: 1、定時器1中斷,每1ms中斷一次,用于速度采樣 2、鍵盤中斷,讀取鍵碼 問題是:系統(tǒng)進入采樣循環(huán)后,想通過按鍵來結(jié)束循環(huán)。但是,當按鍵按下后,系統(tǒng)并不能退出循環(huán),而是死在 While(sampletime!=0);這里。按理說,按鍵中斷并不破壞定時器的中斷。空l能幫我分析一下是什么原因? /***********示例程序************************/ unsigned int sampletime; //定義采樣周期 unsigned int KEY; // #define KEY_ESC 06 //定義ESC鍵 Timer_Initial();//定時器初始化 Interrupt_Timer //定時器中斷 { sampletime--; //采樣次數(shù)減1 Timer_Initial(); //重新初始化定時器 } KeyScan(); //鍵盤讀取程序 Interrupt_Key //鍵盤中斷程序 { KEY=KeyScan(); //讀取鍵碼 } main() { while(KEY!=KEY_ESC) //判斷ESC鍵是否按下 { Timer_Initial(); while(sampletime!=0); //等待采樣周期結(jié)束 /* 一些系統(tǒng)控制代碼 */ } } |
| 2樓: | >>參與討論 |
| 作者: 艾森豪威爾 于 2006/6/29 16:11:00 發(fā)布:
你的鍵盤中斷優(yōu)先級比定時器1中斷優(yōu)先級高 那你進入鍵盤中斷后,定時器1的中斷就無法進入了 建議你把鍵盤中斷優(yōu)先級降低到低于定時器1中斷優(yōu)先級 |
|
| 3樓: | >>參與討論 |
| 作者: hwqfj 于 2006/6/29 16:31:00 發(fā)布:
鍵盤優(yōu)先級比定時器1低! 我設(shè)置的時候就是這樣的。采樣周期未結(jié)束時,鍵盤中斷出現(xiàn),兩者之間出現(xiàn)了沖突。是不是定時器1的中斷時間太短? |
|
| 4樓: | >>參與討論 |
| 作者: 567 于 2006/6/29 16:49:00 發(fā)布:
Timer_Initial()內(nèi)部的原因,和鍵盤無關(guān)。 |
|
| 5樓: | >>參與討論 |
| 作者: hwqfj 于 2006/6/29 17:28:00 發(fā)布:
Timer_Initial()只有幾條語句! Timer_Initial() { // 允許定時器的周期中斷 // 清除定時器周期中斷標志 //設(shè)置定時器中斷周期為1ms //定時器計數(shù)清零 //啟動定時器 } |
|
| 6樓: | >>參與討論 |
| 作者: gw1428jk 于 2006/6/30 12:51:00 發(fā)布:
我覺得按鍵用中斷不太合適,想想其他辦法吧 |
|
| 7樓: | >>參與討論 |
| 作者: hwqfj 于 2006/7/3 11:16:00 發(fā)布:
硬件已定! 想知道哪位高手設(shè)計類似系統(tǒng)時,是如何考慮到中斷的安排的。PID轉(zhuǎn)速控制,一般都要用到定時器來產(chǎn)生采樣周期中斷,如果在等待采樣周期過程中產(chǎn)生了其他中斷,要做何處理。 有誰介紹一下阻塞和非阻塞編程的思想更好! |
|
| 8樓: | >>參與討論 |
| 作者: peater 于 2006/7/3 18:39:00 發(fā)布:
看看你的定時器 你用仿真器看看定時器中斷中的sampletime--;有沒有運行過。 你是不是忘了使能定時器了。 另外你的按鍵中斷程序要注意消抖。 |
|
| 9樓: | >>參與討論 |
| 作者: fys3000 于 2006/7/3 23:05:00 發(fā)布:
太簡單了,你將按鍵設(shè)置為高級于時間中斷 太簡單了,你將按鍵設(shè)置為高級于時間中斷 在按鍵中斷增加“等待采樣周期結(jié)束”sampletime=0; 即可離開While(sampletime!=0);這句語句了, Interrupt_Key //鍵盤中斷程序 { //-------增加內(nèi)容 sampletime=0; //--------------- KEY=KeyScan(); //讀取鍵碼 } |
|
| 10樓: | >>參與討論 |
| 作者: hwqfj 于 2006/7/4 16:31:00 發(fā)布:
已解決! 錯誤在于:退出鍵盤中斷時,我把定時器的中斷標志也清除了。導(dǎo)致定時器中斷無法響應(yīng)! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |