|
|||||||||||
| 技術(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 |
請(qǐng)教一個(gè)關(guān)于中斷代碼的問題 |
| 作者:sdilizj 欄目:單片機(jī) |
我近來在學(xué)習(xí)用Protues仿真,學(xué)習(xí)的第一個(gè)例子是個(gè)ADC的。我自己按原來的電路重寫了代碼,可是在中斷程序處編譯出錯(cuò)。我在學(xué)校里(我是個(gè)在校生)用的是MPLAB 6.x,從沒有遇到這種情況,查閱了一些資料也沒有說明。希望各位給予指點(diǎn),謝謝。 我用的是MPLAB7.3,中斷代碼如下: ····· 8 ORG 0X00 9 NOP 10 GOTO MAIN 11 12 ORG 0X04 13 BCF INTCON,GIE 14 BCF PIR1,ADIF 15 BSF ADCON0,2 16 BSF INTCON,GIE 17 RETFIE 18 19 MAIN ······ 編譯時(shí)錯(cuò)誤提示只有以下兩句: Error[118] H:\WORKS\PIC\ADC.ASM 13 : Overwriting previous address contents (0004) Error[118] H:\WORKS\PIC\ADC.ASM 13 : Overwriting previous address contents (0005) 代碼的其他地方?jīng)]有錯(cuò)誤(有幾個(gè)message和warning),希望各位能夠給予指點(diǎn)。 |
| 2樓: | >>參與討論 |
| 作者: systemchip 于 2006/2/9 15:59:00 發(fā)布:
:什么芯片 企圖覆蓋預(yù)先定義的地址常量,雙擊錯(cuò)誤信息可以跳至出錯(cuò)處,好好檢查程序, 另外13和16這兩句多余!進(jìn)入中斷后會(huì)自動(dòng)禁止全局中斷,出中斷后會(huì)自動(dòng)恢復(fù)使能! |
|
| 3樓: | >>參與討論 |
| 作者: sdilizj 于 2006/2/9 20:06:00 發(fā)布:
回復(fù) 用的是16F877.html">16F877 我預(yù)定義的變量是這樣的: LIST P=16F877 INCLUDE "P16F877.INC" CBLOCK 0X20 lc1,lc2 ENDC ORG 0X00 NOP GOTO MAIN 我試過無論在中斷程序中加入什么語句都會(huì)在ORG 0X04后的第一句報(bào)同樣的錯(cuò)誤,(就像原程序中的13行一樣)。我覺得單純說企圖覆蓋原定義變量有點(diǎn)籠統(tǒng),我寫過一些程序,但這個(gè)情況我的確從沒遇到,急切盼望予以更詳細(xì)的指點(diǎn)。謝謝! |
|
| 4樓: | >>參與討論 |
| 作者: systemchip 于 2006/2/9 22:14:00 發(fā)布:
: 有沒有在其他地方使用“ORG"這個(gè)偽指令,把完整程序帖出來! 試試這個(gè): list p=16F877 ; list directive to define processor #include <p16F877.inc> ; processor specific variable definitions ;***** VARIABLE DEFINITIONS w_temp EQU 0x70 ; variable used for context saving status_temp EQU 0x71 ; variable used for context saving ;********************************************************************** ORG 0x000 ; processor reset vector clrf PCLATH ; ensure page bits are cleared goto main ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register ; isr code can go here or be located as a call subroutine elsewhere movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt main ; remaining code goes here END ; directive 'end of program' * - 本貼最后修改時(shí)間:2006-2-9 22:18:11 修改者:systemchip |
|
| 5樓: | >>參與討論 |
| 作者: sdilizj 于 2006/2/9 22:26:00 發(fā)布:
回復(fù) 我調(diào)試出來了,把ORG 00H后的NOP去掉就一切正常?墒俏覀冋n本上寫的由于軟件仿真資源的問題,這個(gè)NOP在SIM下是一定要加上的,而且我們以往在6.x下作的程序都有這個(gè)NOP,為什么這里就不行了呢? 高興的是,總算調(diào)試出來了。 謝謝systemchip詳細(xì)的指導(dǎo),你的方案我也會(huì)認(rèn)真學(xué)習(xí)的,謝謝! 只是這個(gè)NOP的問題····· |
|
| 6樓: | >>參與討論 |
| 作者: sdilizj 于 2006/2/9 22:32:00 發(fā)布:
回復(fù) 我又試了一下: 不是NOP的問題:在我的MPLAB7.3中,ORG 00H后只能有一條語句,多于一條時(shí)上面的中斷程序就會(huì)發(fā)生類似的錯(cuò)誤。 不知是不是我的軟件哪個(gè)地方需要設(shè)置? |
|
| 7樓: | >>參與討論 |
| 作者: sdilizj 于 2006/2/9 23:46:00 發(fā)布:
找到錯(cuò)誤了 原來我在建立工程時(shí)出錯(cuò)了: 以往在實(shí)驗(yàn)室里,MPLAB由于設(shè)置過了,再那里新建的工程都是默認(rèn)為16F877芯片的。在這里我也習(xí)慣了,不好意思,我直接建立的工程而沒有用向?qū),但這個(gè)MPLAB由于是新裝的,默認(rèn)芯片為18·····,從而我的程序出現(xiàn)了以上問題。其實(shí)有句警告說頭文件不匹配,由于編譯器沒有當(dāng)錯(cuò)誤處理,我總以為是·····反正是有點(diǎn)暈吧,麻煩大家了,見諒,謝謝大家! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |