|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請用過PICC的指點,急死了 |
| 作者:tangq 欄目:單片機 |
用MPLAB5.7和PICC8.01PL3編譯,中斷使用INT(RB0)和TMR0,INTCON=0B101100000; 中斷中使用 void interrupt int_ser() { if (INTF==1) { out=0; INTF=0; if (run_start_time==1) {time_clock++;} // DISPLAY(); OPTION=OPTION^0B01000000; } // if (TMR2IF==1) // { // DISPLAY(); // TMR2IF=0; // } if (T0IF==1) { DISPLAY(); T0IF=0; } ei(); } 運行中,程序會飛掉,如果屏蔽INT中斷,程序運行很好,如果屏蔽TMR0程序運行也正常,但是兩個中斷同時開,程序就會出問題,在ICD中單步調(diào)試,BTFSS 0X6,0X4 ;明明RB4是低電平,也會當作高電平執(zhí)行。 還有,出故障的時間不確定,有時候要運行幾次才出現(xiàn)錯誤,有時候剛開始就出問題。在關閉TMR0,使用TMR2時,現(xiàn)象相同。INT中斷檢測的是50赫茲 |
| 2樓: | >>參與討論 |
| 作者: 張明峰 于 2003/9/23 14:57:00 發(fā)布:
畫蛇添足 "ei();" 純屬多余,有百害而無一益。 |
|
| 3樓: | >>參與討論 |
| 作者: 痞子 于 2003/9/23 15:01:00 發(fā)布:
可能是堆棧益出? |
|
| 4樓: | >>參與討論 |
| 作者: tangq 于 2003/9/23 17:08:00 發(fā)布:
太感謝了 張教主果然一針見血,就是“EI()”惹的禍,只是不明白為什么會這樣,看過程序的匯編碼,沒有看出問題阿。 另外,張教主是否可以出本書了,談談對PICC應用的體會,讓我等后進著也少走彎路,我想弟兄們定會捧場。 同時也謝謝痞子兄。 |
|
| 5樓: | >>參與討論 |
| 作者: 張明峰 于 2003/9/23 17:30:00 發(fā)布:
要理解PIC中斷機制 如果認為用C編程就可以不用看數(shù)據(jù)手冊了,那你的彎路還有的走了。 |
|
| 6樓: | >>參與討論 |
| 作者: lb0021 于 2003/10/23 9:24:00 發(fā)布:
那最終怎么解決的呢?我也同時在用這兩個中斷。 |
|
| 7樓: | >>參與討論 |
| 作者: lb0021 于 2003/10/23 9:27:00 發(fā)布:
難道去掉ei();就OK了?什么道理? 不就是多一條bsf intcon,gie嗎?怎么會這么嚴重? |
|
| 8樓: | >>參與討論 |
| 作者: wwllzz 于 2003/10/23 11:31:00 發(fā)布:
粗看了一下,我懷疑還可能是隔離問題 |
|
| 9樓: | >>參與討論 |
| 作者: ljrwzm 于 2003/10/23 13:19:00 發(fā)布:
加上ei();會發(fā)生中斷嵌套,導致堆棧溢出 看一下編譯以后的指令,在你的ei();指令后還有若干條中斷現(xiàn)場恢復指令,PIC是允許中斷自身嵌套的 |
|
| 10樓: | >>參與討論 |
| 作者: bolofeng 于 2003/10/23 13:19:00 發(fā)布:
中斷嵌套惹的禍 |
|
| 11樓: | >>參與討論 |
| 作者: lb0021 于 2003/10/23 15:33:00 發(fā)布:
對了,謝謝! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |