|
|||||||||||
| 技術(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 |
響應一個內(nèi)部和外部中斷 |
| 作者:sybaselu 欄目:單片機 |
用timer1或timer0計時做一個內(nèi)部中斷: void timer1(void)interrupt 1 { EA=0; ...... EA=1; } void main() { .... EA=1; while(1) } 是不是在main()中,對于內(nèi)部中斷的響應,是先將EA=1,開中斷,然后去調(diào)用timer1中斷服務程序(先關(guān)閉中斷,EA=0--->處理---->EA=1,開中斷.返回主程序main). 對于外部中斷而言,則不必開/關(guān)中斷,而是通過外部條件送到INTO,由外部條件決定什么時候響應中斷。 |
| 2樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/18 10:39:00 發(fā)布:
再問一個 AT89C2051的RAM區(qū)有多大?ROM區(qū)=2K是吧? |
|
| 3樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/18 13:36:00 發(fā)布:
再頂一次! |
|
| 4樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/18 15:13:00 發(fā)布:
再頂一次! 對于響應內(nèi)部計時器timer0/1的中斷,如何調(diào)用他的中斷服務程序,是在main()中調(diào)用之前,先開中斷嗎:EA=1,然后進入: void timer_INTE(void)interrupt 0 {} |
|
| 5樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/18 17:12:00 發(fā)布:
繼續(xù)問 AT89C2051的RAM區(qū)有多大?ROM區(qū)=2K是吧? |
|
| 6樓: | >>參與討論 |
| 作者: computer00 于 2005/1/18 17:21:00 發(fā)布:
中斷程序不用主函數(shù)去調(diào)用 當發(fā)生中斷時,主函數(shù)被打斷,轉(zhuǎn)向中斷服務程序。當中斷服務程序處理完畢之后, 會自動返回到主函數(shù)。所以中斷函數(shù)的調(diào)用不由你負責,當中斷發(fā)生時,系統(tǒng)自然會調(diào)用。 2051是128字節(jié)RAM,2KROM。 |
|
| 7樓: | >>參與討論 |
| 作者: 12864 于 2005/1/18 19:05:00 發(fā)布:
中斷里面無需關(guān)閉系統(tǒng)中斷 特殊應用除外。 |
|
| 8樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/19 10:27:00 發(fā)布:
見解 1:"中斷里面無需關(guān)閉系統(tǒng)中斷"這點我明白,但處理完后最好在中斷服務程序中將中斷打開,EA=1,不要在main()中打開應該更好吧? 2:對于內(nèi)部中斷,例如用timer0或timer1做計時中斷的時候,如何發(fā)生中斷?只有在main()中將中斷打開EA=1,系統(tǒng)才去響應該中斷: void timer0_INT(void)interrupt 0 { ... EA=1; } void main() { EA=1; //此時系統(tǒng)去響應中斷服務程序:timer0_INT while(1) { } } 3:對于外部中斷,如INTO/INT1則不用先將EA=1打開,去開中斷,而是由外部決定的。當外部事件滿足時就發(fā)生的外部中斷! 4:我是這么理解內(nèi)外部中斷和中斷響應的,當然之前,我們還要初始化EX,ET等。 |
|
| 9樓: | >>參與討論 |
| 作者: computer00 于 2005/1/19 12:42:00 發(fā)布:
你對51的中斷理解不對 你把EA=1這條語句當作軟中斷指令了。80X86有軟中斷指令,51中沒軟中斷指令。 EA=1這條語句是表示使能全部中斷。如果EA=0,則所有中斷被屏蔽。EA=1,并 不一定會發(fā)生中斷。還要有各個中斷相應的中斷使能位為1,同時中斷條件成立時, 才會發(fā)生中斷,從而執(zhí)行中斷服務程序。如定時/計數(shù)器0中斷發(fā)生條件是:EA=1 且ET0=1且定時/計數(shù)器由0xFFFF變成0時。 如果EA=0或者EX0=0,即使有外部中斷0信號,外部中斷0也是不會發(fā)生的。而不是 你所理解的“對于外部中斷,如INTO/INT1則不用先將EA=1打開,去開中斷, 而是由外部決定的。當外部事件滿足時就發(fā)生的外部中斷!” * - 本貼最后修改時間:2005-1-19 12:44:15 修改者:computer00 |
|
| 10樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/19 14:24:00 發(fā)布:
頂 1:就是說如果我這么做: EA=1; ET0=1; THL=0XAA; //給timer0賦任意初值 TH0=0X00; TR0=1 //有必要嗎? 那么就會發(fā)生內(nèi)部的timer0的中斷響應吧 2: “如果EA=0或者EX0=0,即使有外部中斷0信號,外部中斷0也是不會發(fā)生的“ 你是說”外部中斷0也是不會發(fā)生的“還是說”外部中斷0會發(fā)生呢“? |
|
| 11樓: | >>參與討論 |
| 作者: hangqun 于 2005/1/19 15:13:00 發(fā)布:
妳想中斷嵌套中斷? 妳想中斷嵌套中斷? |
|
| 12樓: | >>參與討論 |
| 作者: twz8858877 于 2005/1/19 15:58:00 發(fā)布:
建議你先把datasheet讀懂 建議你先把datasheet讀懂,或看看匯編的程序?qū)δ忝靼姿目刂屏鞒逃袔椭?br> |
|
| 13樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/19 17:19:00 發(fā)布:
頂 1:不明白這句”妳想中斷嵌套中斷?“。按照computer00的說法,我的舉例應該是對的!只要滿足EA=1; EX=1; TH0=0X任意,TL0=0X任意;就會響應中斷服務程序。∑渲蠺H0,TL0不一定是0X0000! 2:twz8858877你是說datasheet還是dataflowgraph? |
|
| 14樓: | >>參與討論 |
| 作者: 浮云者 于 2005/1/19 18:49:00 發(fā)布:
EA是總開關(guān),ET0是timer0中斷的開關(guān) 自己再看看中斷框圖 |
|
| 15樓: | >>參與討論 |
| 作者: twz8858877 于 2005/1/20 9:44:00 發(fā)布:
re 中斷的產(chǎn)生需要3個條件,1、總中斷允許即EA=1,2、自己的中斷位允許,即EX/ET/ES=1,3、中斷請求標志位置起,即對外部中斷為IE0、IE1,對定時中斷為TF0/TF1,對串口中斷為TI/RI。3個條件任意一個不滿足均不會進入中斷響應。中斷請求標志位的置起由條件觸發(fā),對外部中斷為INT0或INT1口出現(xiàn)下降沿(邊沿觸發(fā)方式)或低電平(電平觸發(fā)方式)時置起IE0或IE1;對定時器0/1為為定時/計數(shù)溢出時置起TF0/TF1;對串口為接收一幀數(shù)據(jù)時硬件置RI=1,發(fā)送一幀數(shù)據(jù)時置TI=1。建議你看看書上寫的中斷系統(tǒng)一節(jié),里面寫的很清楚。 |
|
| 16樓: | >>參與討論 |
| 作者: ysl3721 于 2005/1/20 10:22:00 發(fā)布:
應該在初始化時即打開的好,即MAIN之前,中間不要關(guān) |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |