|
|||||||||||
| 技術(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 |
51單片機可以從T0中斷程序中直接跳到程序開始嗎? |
| 作者:半導體 欄目:單片機 |
51單片機可以從T0中斷程序中用LJMP命令直接跳到程序開始嗎? 我做一個東西,需要從T0中斷中直接跳到程序開始處,用仿真器察看,中斷打開后,程序不再進入任何中斷,有什么方法么? |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2005/3/7 18:01:00 發(fā)布:
為什么不用RETI返回? 怎么我發(fā)現(xiàn)有些人做東西,總會搞一些古怪的東西呢?我怎么就從來沒遇到這樣的問題? 我要返回,就直接一個return(C語言)。 * - 本貼最后修改時間:2005-3-7 18:18:01 修改者:computer00 |
|
| 3樓: | >>參與討論 |
| 作者: 半導體 于 2005/3/7 18:05:00 發(fā)布:
某一種狀態(tài)下,我需要CPU從頭運行 哦,忘了說了,我也有RETI返回, 只是某一種狀態(tài)下,我需要CPU從頭運行,不知用什么方式比較好 |
|
| 4樓: | >>參與討論 |
| 作者: 音樂樂樂 于 2005/3/7 18:31:00 發(fā)布:
在reti之前把0x0000地址壓入堆棧 這樣返回后即可以退出中斷,又可以跳回0地址執(zhí)行 51好像有兩級中斷,所以需要用類似方法reti兩次,以前有帖子討論過這個問題。 |
|
| 5樓: | >>參與討論 |
| 作者: worminight 于 2005/3/7 22:27:00 發(fā)布:
偶有個想法 偶有個想法:(匯編) int_t0: ;t0終端服務(wù)程序 ;重啟動標志位條件滿足。彈出堆棧其他入棧數(shù)據(jù)sp=int_t0中斷地址+2 pop a pop a PUSH 目標高地址 ;重啟高地址 PUSH 目標低地址 ;重啟低地址 reti 反正思想就是想辦法吧存入堆棧的int地址變?yōu)橹貑幽繕说刂肪托辛恕?br>不知行不? |
|
| 6樓: | >>參與討論 |
| 作者: maychang 于 2005/3/7 23:09:00 發(fā)布:
worminight的方法可行 |
|
| 7樓: | >>參與討論 |
| 作者: dengm 于 2005/3/7 23:29:00 發(fā)布:
可以這樣 。。。 DEC SP DEC SP ACALL INTRET ACALL INTRET LJMP 0000 INTRET: RETI |
|
| 8樓: | >>參與討論 |
| 作者: hotpower 于 2005/3/7 23:59:00 發(fā)布:
方法太多 |
|
| 9樓: | >>參與討論 |
| 作者: worminight 于 2005/3/8 20:23:00 發(fā)布:
也可以這樣,真有意思 DEC SP DEC SP PUSH 目標高地址 ;重啟高地址 PUSH 目標低地址 ;重啟低地址 RETI 嘻嘻,有點意思了 |
|
| 10樓: | >>參與討論 |
| 作者: renmingcan 于 2005/3/8 21:13:00 發(fā)布:
非也非也 |
|
| 11樓: | >>參與討論 |
| 作者: hotpower 于 2005/3/9 1:03:00 發(fā)布:
2次reti比較好 可以這樣(學習鄧苗好榜樣) 。。。 ; DEC SP;此句不好,會破壞數(shù)據(jù)區(qū)(假定此時在主程序中) ; DEC SP;此句不好,會破壞數(shù)據(jù)區(qū)(假定此時在主程序中) ACALL INTRET;此句執(zhí)行1次RETI ; ACALL INTRET;此句+LJMP 0000不如改后3句 ; LJMP 0000;此句不如以下3句 CLR A PUSH ACC PUSH ACC INTRET: RETI * - 本貼最后修改時間:2005-3-9 1:16:52 修改者:hotpower |
|
| 12樓: | >>參與討論 |
| 作者: canycao 于 2005/3/10 13:58:00 發(fā)布:
不能這樣 51單片機中斷時有些位是通過硬件置位的,必須執(zhí)行RETI時才能進行清位,所以要解決這樣的問題常采用改寫堆棧或置位查詢的方式進行 |
|
| 13樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/3/10 15:12:00 發(fā)布:
強行進入! |
|
| 14樓: | >>參與討論 |
| 作者: juery1197 于 2005/3/10 17:43:00 發(fā)布:
為何不想辦法讓mcu復(fù)位? 想個辦法讓mcu在你要的那特定條件下復(fù)位就可以了。 |
|
| 15樓: | >>參與討論 |
| 作者: danielsh04 于 2005/3/10 18:54:00 發(fā)布:
可以的 可以直接跳到程序開始,最好在程序開始處清一下堆棧,并注意中斷標志位。 |
|
| 16樓: | >>參與討論 |
| 作者: sharks 于 2005/3/10 20:24:00 發(fā)布:
52單片機非常好辦。 52有內(nèi)狗,打開,餓死。8192周期,很短 |
|
| 17樓: | >>參與討論 |
| 作者: c_a_j 于 2005/3/11 11:25:00 發(fā)布:
復(fù)位 如果有看門夠的話,在程序里延時,使看門狗復(fù)位就行了。 |
|
| 18樓: | >>參與討論 |
| 作者: njp508 于 2005/3/11 12:08:00 發(fā)布:
re 可以,只要處理好堆棧的問題就可以. |
|
| 19樓: | >>參與討論 |
| 作者: tldong 于 2005/3/11 12:28:00 發(fā)布:
請教高手 我的畢業(yè)設(shè)計課題是關(guān)于485串口通信及嵌入式系統(tǒng)應(yīng)用,在此請那位高手能給點資料.謝謝!tldong_1982@163.com |
|
| 20樓: | >>參與討論 |
| 作者: erp21com 于 2005/3/11 16:04:00 發(fā)布:
這樣做也許更好! isr_t0: lcall DUMMY_reti pop a ;;注意sp pop a ljmp anywhere DUMMY;_reti |
|
| 21樓: | >>參與討論 |
| 作者: dx1021 于 2005/3/11 16:27:00 發(fā)布:
當然可以,這種應(yīng)用場合完全可以不用這樣程序結(jié)構(gòu)阿,總之不提倡 |
|
| 22樓: | >>參與討論 |
| 作者: jinlongzhu 于 2005/3/11 18:57:00 發(fā)布:
修改程序計數(shù)器或用長跳轉(zhuǎn)語句 修改程序計數(shù)器 |
|
| 23樓: | >>參與討論 |
| 作者: xwj 于 2005/3/11 19:33:00 發(fā)布:
有看門狗就餓死狗狗,沒有就用一個IO加一個電阻一個PNP管復(fù)位 |
|
| 24樓: | >>參與討論 |
| 作者: wolaiye3 于 2005/3/11 20:10:00 發(fā)布:
我是這樣做的! MOV A,#0 PUSH ACC PUSH ACC RETI 這樣就可以了 在我的系統(tǒng)中已經(jīng)可以用了 |
|
| 25樓: | >>參與討論 |
| 作者: 李冬發(fā) 于 2005/3/12 11:07:00 發(fā)布:
為什么要這樣做?是為了標新立意還是其它? 我認為還是用正統(tǒng)的程序結(jié)構(gòu)為好! |
|
| 26樓: | >>參與討論 |
| 作者: ligpin 于 2005/3/12 11:15:00 發(fā)布:
111 111 |
|
| 27樓: | >>參與討論 |
| 作者: 12864 于 2005/3/12 13:17:00 發(fā)布:
這并不影響“正統(tǒng)”的程序結(jié)構(gòu) 需要軟復(fù)位,于是就這樣做,無需理由 |
|
| 28樓: | >>參與討論 |
| 作者: caijie 于 2005/3/12 17:43:00 發(fā)布:
好玩的一個程序 寄存器等相關(guān)內(nèi)容自己要保存 這是我做來好玩的一個程序 你可以在中斷中跳到你想的地方 想數(shù)據(jù)之類的保存處理 等等 你自己要保證再次能用就行 DD1 = 1234H DD2 = 2345H DD3 = 3456H RR1 = 0*8+0 ; RR2 = 1*8+0 RR3 = 2*8+0 TT1 = 30H TT2 = 31H SYSRUN_SIG = 20H.1 SYSTIME = 0F830H FLAG = 20H.0 ORG 0000H LJMP main ORG 000BH LJMP ISR_TIMER0 main: MOV A,#45H MOV B,#10 DIV AB CPL RR1 CPL RR2 CPL RR3 MOV A,TT1 CPL A MOV TT1,A MOV A,TT2 CPL A MOV TT2,A ; SJMP main JB SYSRUN_SIG,SYSERROR MOV SP,#60H LCALL DELAY ORL TMOD,#01H ; Timer 0 Mode 1 MOV TL0,#LOW(SYSTIME) MOV TH0,#HIGH (SYSTIME) SETB TR0 SETB EA SETB ET0 JMP $ ;Wait startup fu1 SYSERROR: NOP MOV A,#0 PUSH A MOV A,#0 PUSH A CLR SYSRUN_SIG CLR TR0 CLR EA RETI ORG DD1 fu1: NOP JMP $ |
|
| 29樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/3/12 19:25:00 發(fā)布:
ligpin 你是??? |
|
| 30樓: | >>參與討論 |
| 作者: fen_mo 于 2005/3/13 10:20:00 發(fā)布:
有這個必要嗎? |
|
| 31樓: | >>參與討論 |
| 作者: lipyxj 于 2005/3/13 19:38:00 發(fā)布:
辦法很簡單 要用匯編,在RETI指令前,現(xiàn)將0000h壓入堆棧就可以了 |
|
| 32樓: | >>參與討論 |
| 作者: td578zz 于 2005/3/14 10:43:00 發(fā)布:
我看可以 在RETI返回之前,修改壓棧的返回地址(也就是把行號地址壓棧),中斷返回后就回到你期望得地方. |
|
| 33樓: | >>參與討論 |
| 作者: hexiaoxiao 于 2005/3/14 11:00:00 發(fā)布:
有必要嗎? |
|
| 34樓: | >>參與討論 |
| 作者: wolaiye3 于 2005/3/14 12:25:00 發(fā)布:
好用 |
|
| 35樓: | >>參與討論 |
| 作者: hawker2001 于 2005/3/14 13:23:00 發(fā)布:
可以倒是可以,不過…… 這樣的中斷會亂掉的,因為大部分51在片內(nèi)有對用戶不可見的一些中斷寄存器,如果不用reti卻用跳轉(zhuǎn)指令或者ret之類的指令的話,會使中斷亂掉的。 |
|
| 36樓: | >>參與討論 |
| 作者: worminight 于 2005/3/16 2:16:00 發(fā)布:
哥哥呀,其實就是把中斷返回地址改寫成目標地址就ok,然后reti 有關(guān)系嗎? 如果非要 用狗的話可能ram數(shù)據(jù)不保阿 當然小心別搞中斷嵌套,很麻煩 * - 本貼最后修改時間:2005-3-16 2:19:51 修改者:worminight |
|
| 37樓: | >>參與討論 |
| 作者: jin2558 于 2005/3/16 9:20:00 發(fā)布:
看門狗復(fù)位最簡單 |
|
| 38樓: | >>參與討論 |
| 作者: fanyunxiao 于 2005/3/16 16:09:00 發(fā)布:
可以的,但要重新初始化堆棧 |
|
| 39樓: | >>參與討論 |
| 作者: gbchang 于 2005/3/16 16:49:00 發(fā)布:
謝謝hotpower蚌,我曾經(jīng)用過你的概念做過一件功在當代,利在千秋的 謝謝hotpower蚌,我曾經(jīng)用過你的概念做過一件功在當代,利在千秋的事呢! 是這樣的: 做W78E58的ISP,在串行中斷中收到標志了,就要進入休眠,可是在中斷中直接休不了,就只好只做一個標志,再在主程序中休, 用了你的方法后,程序就好辦了,第一次彈出,清掉中斷標志,同時跳到行休眠指令處.真爽. 謝謝啊. |
|
| 40樓: | >>參與討論 |
| 作者: nuptni 于 2005/3/16 22:47:00 發(fā)布:
請教樓主 如何用單片機實現(xiàn)自檢? 拜托! |
|
| 41樓: | >>參與討論 |
| 作者: l_a 于 2005/3/17 23:02:00 發(fā)布:
pop兩次,然后ljmp 0 |
|
| 42樓: | >>參與討論 |
| 作者: wxs_1 于 2005/3/18 15:35:00 發(fā)布:
幫幫忙!! 我的畢業(yè)設(shè)計是關(guān)于51單片機的無線通信,用C語言編程 請各位高手賜教點關(guān)于這方面的資料或網(wǎng)站。謝謝!! |
|
| 43樓: | >>參與討論 |
| 作者: sophist98 于 2005/3/18 20:51:00 發(fā)布:
應(yīng)該可以 應(yīng)該可以。但CPU響應(yīng)中斷時要保護現(xiàn)場,這樣會造成空間不足。故中斷服務(wù)時應(yīng)清堆棧。不過我還沒試過這樣做。 |
|
| 44樓: | >>參與討論 |
| 作者: mengzs 于 2005/3/19 9:29:00 發(fā)布:
達到同一目的通常有多種途徑! 總結(jié)各位大俠論點:達到同一目的通常有多種途徑,當一種方法行不通時,可以尋求其他途徑解決。主要還是將單片機的使用規(guī)則爛熟于胸然后多動手多思考,當把問題思考得差不多時還是不成,這時再問,往往一點就透。 不知對否。 |
|
| 45樓: | >>參與討論 |
| 作者: nongcunren 于 2005/3/19 15:50:00 發(fā)布:
!。。。。。。。。。! worminight 老兄。 那樣不可以啊! 會死機的 |
|
| 46樓: | >>參與討論 |
| 作者: 54liugang 于 2005/3/20 16:54:00 發(fā)布:
為什么不直接跳到0000呢? 為什么不直接跳呢? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |