![]() |
發(fā)布時間: 2019-4-21 17:34
正文摘要:預(yù)先的設(shè)計想法 P1口接八個led,開關(guān)k1,k2分別接外部中斷0 P3.2,和外部中斷1 P3.3 程序執(zhí)行的時候8是流水燈形式。 1)k1按下上下四個燈是交替閃爍10次 2)k2按下的是8個燈交替閃爍5次 3)設(shè)置優(yōu)先級別 遇到 ... |
通常在中斷子程序中是不調(diào)用延時子程序的,這樣會增加中斷處理時間,如果有其它低級中斷了,就會延誤響應(yīng)中斷了。 所以,中斷子程序中不要寫調(diào)用延時子程序,中斷子程序也不要寫得過長,處理過多的任務(wù),要盡快處理后及時返回,如果中斷一次有很多任務(wù)需要執(zhí)行完全,可以在中斷子程序中設(shè)置一個標(biāo)志位,在主程序中查這個標(biāo)志位,當(dāng)標(biāo)志為1時,就在主程序中完成這些任務(wù),這樣就不會影響其它中斷源的中斷,也不會使中斷產(chǎn)生混亂。 如果延時函數(shù)時間過長,則下次中斷有可能不會被觸發(fā),類似按鍵不靈敏,還有可能因?yàn)橹袛嗪椭鞒绦蚨荚谑褂醚訒r函數(shù),而和此相關(guān)的寄存器的值沒有保存,導(dǎo)致延時時間出錯。 |
參與人數(shù) 1 | 黑幣 +5 | 收起 理由 |
---|---|---|
![]() | + 5 | 贊一個! |
shuaishuaida 發(fā)表于 2019-4-22 14:01 可不可,詳細(xì)說一下呢 |
中斷需要的時間 程序不對 |
你對中斷理解得不太正確 |
HC6800-ES-V2.0 發(fā)表于 2019-4-22 08:18 謝謝啦,我理解的按鍵消抖是做出實(shí)物的的時候才需要的,仿真的時候是不需要的。 |
初學(xué)者易犯的錯: 中斷處理程序執(zhí)行時間過長! 在此期間其它比此更低級是中斷都將無法響應(yīng),被執(zhí)行! |
對是硬件中斷響應(yīng)自動判斷置位 |
其實(shí)不是你說的那樣。 IEx是外部中斷的觸發(fā)位,即當(dāng)有外部中斷時,這個位就由單片機(jī)置1,不是由程序置1。 在外部中斷的服務(wù)函數(shù)中,只需要將其置0即可,不需要再置1,置1就相當(dāng)于又產(chǎn)生了新的外部中斷。 所以,你原來的程序,只需要IEx置0,不需要最后的置1操作就好了。 我已經(jīng)試過的,沒問題,可以返回。 另外:由于外部中斷是用按鍵完成的,是按鍵,都是需要消抖的,你沒有消抖的程序,所以可能中斷會發(fā)生幾次才能返回主函數(shù),我試驗(yàn)時,按下外部中斷1的按鍵最多產(chǎn)生過三次中斷。 |
參與人數(shù) 1 | 黑幣 +10 | 收起 理由 |
---|---|---|
![]() | + 10 | 很給力! |
壓縮包里面的是仿真原理圖 |
Powered by 單片機(jī)教程網(wǎng)