|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
pic(12f629)單片機(jī)中斷返回后不返回到原處,而返回指定地點(diǎn)。 |
| 作者:ch_ljun 欄目:單片機(jī) |
我在做一個(gè)項(xiàng)目的時(shí)候,遇到一個(gè)問(wèn)題請(qǐng)那位高手指點(diǎn)一下!非常感謝! 當(dāng)單片機(jī)在中斷返回以后,要求它不返回到原來(lái)的地方,而是返回到我指定的地方去? 具體的情況如下:有10種模式在循環(huán)運(yùn)行,在這個(gè)過(guò)程之中突然斷電,然后再次上電。如果時(shí)間在一秒內(nèi),則從斷電處運(yùn)行的那一種模式的下一種模式變化開(kāi)始運(yùn)行,如果斷電時(shí)間超過(guò)一秒,則從本次模式再次循環(huán)。在整個(gè)程序的運(yùn)行過(guò)程之中,我用中斷探測(cè)到何時(shí)斷電,當(dāng)我中斷返回以后就不能再返回到原處了,而是返回到我指定的地方去從新運(yùn)行,不知這里如何處理,請(qǐng)高手指點(diǎn)。謝謝! |
| 2樓: | >>參與討論 |
| 作者: fzj 于 2007/3/19 13:41:00 發(fā)布:
應(yīng)該講你的程序設(shè)計(jì)思路不對(duì) 如果中斷返回要返回到你指定的地方也可以,可以根據(jù)你中斷事件判斷建立幾個(gè)標(biāo)志位,然后根據(jù)標(biāo)志位去執(zhí)行不同的子程序. |
|
| 3樓: | >>參與討論 |
| 作者: ch_ljun 于 2007/3/19 19:35:00 發(fā)布:
這位仁兄說(shuō)的可能有點(diǎn)問(wèn)題。 非常感謝2樓的兄弟指點(diǎn)。因?yàn)槲沂浅醺鉷ic單片機(jī),對(duì)此也不是很熟,所以還要兄弟們多多指教才是,你說(shuō)的這種方式我當(dāng)初也想過(guò)了。因?yàn)樵谠鮽(gè)程序運(yùn)行的過(guò)程之中,我設(shè)定了一個(gè)TIME1定時(shí)器,是每隔20ms中斷一次,我要以此來(lái)判定,硬件在運(yùn)行的過(guò)程之中是否會(huì)斷電。如果斷電時(shí)間超過(guò)一秒,在下一次上電時(shí)從這個(gè)模式從新運(yùn)行,如果斷電時(shí)間在一秒以內(nèi),下一次上電就從這個(gè)模式的下一個(gè)模式再運(yùn)行。如果在中斷這里設(shè)定標(biāo)志,當(dāng)硬件斷電之后再上電(時(shí)間在1秒以內(nèi),因?yàn)橛布嫌幸粋(gè)大電容,所以系統(tǒng)不會(huì)復(fù)位,程序可以接著運(yùn)行),如果將程序跳到開(kāi)始再運(yùn)行,則中斷沒(méi)有返回,下一次斷電就檢測(cè)不到,如果中斷返回了又不能運(yùn)行新的模式,所以,在這里不知如何處理,不知兄弟能否教我,謝謝了。 |
|
| 4樓: | >>參與討論 |
| 作者: cloud2k 于 2007/3/19 22:32:00 發(fā)布:
做標(biāo)志位 中斷做標(biāo)志位,然后在程序運(yùn)行的過(guò)程中不斷的檢測(cè),呵呵. 沒(méi)有做過(guò). |
|
| 5樓: | >>參與討論 |
| 作者: ch_ljun 于 2007/3/20 0:57:00 發(fā)布:
這個(gè)方案試過(guò) 這個(gè)方案試過(guò),在兩個(gè)模式的循環(huán)之中有一個(gè)5秒的延時(shí),其一不可能到延時(shí)里檢測(cè),其二在同一個(gè)模式下又有幾種變化,如果在運(yùn)行中斷電,程序也會(huì)亂的,所以這個(gè)方案行不通,看那路高手有更好的主意。謝謝。 |
|
| 6樓: | >>參與討論 |
| 作者: FZJ 于 2007/3/20 8:40:00 發(fā)布:
樓主想要的是掉電一秒內(nèi)的記憶功能吧 那就別軟件了,交給硬件,由硬件來(lái)完成... 搞個(gè)掉電檢測(cè)端口,一掉電就SLEEP,這時(shí)測(cè)量一下MCU消耗電流,然后合理選擇儲(chǔ)能電容容量,就是說(shuō)儲(chǔ)能電容容量只能維持單片機(jī)在SLEEP下放電1S,如果放電時(shí)間過(guò)長(zhǎng)MCU因得不到維持電壓而復(fù)位. |
|
| 7樓: | >>參與討論 |
| 作者: yewuyi 于 2007/3/20 8:51:00 發(fā)布:
如果你非要按照你的想法做,只有換成可以操作堆棧的MCU |
|
| 8樓: | >>參與討論 |
| 作者: 塵埃讀電子 于 2007/3/20 20:22:00 發(fā)布:
中斷可以不返回嗎?> PIC中斷只有8級(jí)你不返回就會(huì)逸出的 |
|
| 9樓: | >>參與討論 |
| 作者: eeproom 于 2007/3/20 20:29:00 發(fā)布:
你的設(shè)計(jì)原理沒(méi)錯(cuò) 不過(guò)的軟件設(shè)計(jì)思路錯(cuò)誤。你可以在中斷中設(shè)置一個(gè)全局標(biāo)記,全身快速退出,安全的時(shí)間內(nèi)保存到EEPROM,下次開(kāi)機(jī)檢測(cè)狀態(tài)標(biāo)記決定做啥。 |
|
| 10樓: | >>參與討論 |
| 作者: ch_ljun 于 2007/3/24 21:47:00 發(fā)布:
問(wèn)題解決 這個(gè)項(xiàng)目我已經(jīng)搞定了,因?yàn)檫@個(gè)有些功能不用了,所以沒(méi)有簡(jiǎn)單多了,另外這個(gè)項(xiàng)目,大家可以討論一下,看有沒(méi)有辦法做到我說(shuō)的那個(gè)功能,另外,硬件部份是已經(jīng)做好了的,沒(méi)有辦法改動(dòng)的。只有在軟件上想辦法,請(qǐng)各路高手討論一下。 |
|
| 11樓: | >>參與討論 |
| 作者: ch_ljun 于 2007/4/3 14:54:00 發(fā)布:
還有其它方案嗎 怎么這段時(shí)間沒(méi)有高手發(fā)言,看還有其它方案嗎,望高手們?cè)谶@里指點(diǎn),看有什么更好的思路。 |
|
| 12樓: | >>參與討論 |
| 作者: 蘭天白云 于 2007/4/3 17:12:00 發(fā)布:
斷電1秒鐘,電路還有電壓?jiǎn)? 如果沒(méi)有,那又怎么知道是斷電1秒呢? |
|
| 13樓: | >>參與討論 |
| 作者: alin_99 于 2007/4/4 8:53:00 發(fā)布:
從備用電源的角度來(lái)考慮或者超級(jí)電容來(lái)考慮 |
|
| 14樓: | >>參與討論 |
| 作者: ch_ljun 于 2007/4/4 10:48:00 發(fā)布:
硬件有電容 我在題里說(shuō)過(guò)了,在硬件是有一個(gè)大電容,外部斷電了,電容可以支持單片機(jī)跑1秒多,所以就存在這樣的問(wèn)題出現(xiàn)了。 |
|
| 15樓: | >>參與討論 |
| 作者: xieyuanbin 于 2007/4/4 18:49:00 發(fā)布:
是不是超過(guò)一秒鐘重新運(yùn)行,而不超過(guò)一秒返回? 簡(jiǎn)單: 如果超過(guò)一秒鐘,那么程序進(jìn)入一個(gè)死循環(huán),讓單片機(jī)WDT復(fù)位,重新運(yùn)行,前提當(dāng)然是WDT要開(kāi)啟. 如果不超過(guò)一秒鐘,從中斷返回應(yīng)該沒(méi)問(wèn)題吧? 如果對(duì)堆棧很清楚,讓堆棧下溢也是沒(méi)問(wèn)題的.不過(guò)要把GIE給補(bǔ)上,但從中斷中直接跳轉(zhuǎn)到正常程序是很危險(xiǎn)的行為,因?yàn)楹芏嘀当荒愀淖兞?比如W和STATUS |
|
| 16樓: | >>參與討論 |
| 作者: ch_ljun 于 2007/4/27 13:09:00 發(fā)布:
可以試試 樓上的兄弟說(shuō)的這個(gè)方案,我也想過(guò),感覺(jué)可行,可是我們WDT的用法不是很熟,不知道經(jīng)過(guò)WDT復(fù)位之后,程序是自動(dòng)從最開(kāi)始運(yùn)行,還是說(shuō)會(huì)復(fù)位到中斷跳出來(lái)的這個(gè)地方,如果是復(fù)位到叫斷跳出來(lái)的這個(gè)地方那就有問(wèn)題了,你高手們指點(diǎn)。 |
|
| 17樓: | >>參與討論 |
| 作者: PIC 于 2009/8/19 15:00:26 發(fā)布:
中斷之后必須要返回?cái)帱c(diǎn)處,如果要跳轉(zhuǎn)到指定的處,可以先在中斷里初試化一些寄存器,如TRIS,PORT等,然后返回執(zhí)行下面的程序,但是由于在中斷里做了準(zhǔn)備,所以下面的指令不改變端口寄存器的值,然后在主程序放些判別指令,判別跳轉(zhuǎn)的路徑,來(lái)實(shí)現(xiàn)跳轉(zhuǎn)自己指定的地方。 樓主說(shuō)要求的1秒之內(nèi),執(zhí)行下個(gè)模式,1秒之外,執(zhí)行本模式,可以利用EEPROM和定時(shí)器結(jié)合,首先把沒(méi)個(gè)模式給他一個(gè)相應(yīng)的代碼,在沒(méi)一次模式轉(zhuǎn)化時(shí),把代碼寫(xiě)到EEPROM中,單片機(jī)有欠壓檢測(cè),上電時(shí)候,TIME0里的值不改變的,可以通過(guò)該值算出有沒(méi)有超過(guò)一秒,來(lái)判斷執(zhí)行哪個(gè)模式,這里就可以讀EEPROM的值了 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |