音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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ī)
請(qǐng)教一個(gè)關(guān)于中斷代碼的問題
我近來在學(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
:什么芯片
企圖覆蓋預(yù)先定義的地址常量,雙擊錯(cuò)誤信息可以跳至出錯(cuò)處,好好檢查程序,
另外13和16這兩句多余!進(jìn)入中斷后會(huì)自動(dòng)禁止全局中斷,出中斷后會(huì)自動(dòng)恢復(fù)使能!

3樓: >>參與討論
sdilizj
回復(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
:
有沒有在其他地方使用“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
回復(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
回復(fù)
我又試了一下:
不是NOP的問題:在我的MPLAB7.3中,ORG 00H后只能有一條語句,多于一條時(shí)上面的中斷程序就會(huì)發(fā)生類似的錯(cuò)誤。
不知是不是我的軟件哪個(gè)地方需要設(shè)置?

7樓: >>參與討論
sdilizj
找到錯(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)暈吧,麻煩大家了,見諒,謝謝大家!

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
寫給初學(xué)者的,關(guān)于動(dòng)態(tài)數(shù)碼管顯示
請(qǐng)問PIC系列芯片中是否有的具有斷電記憶功能?
Light on load
單片機(jī)選型
大家看這樣子行不行
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)