會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



(1) 2 »


PC程式位址-位移問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 106
等級: 9; EXP: 30
HP : 0 / 207
MP : 35 / 7664
離線
各位好~
目前撰寫程式發現一個問題


movlw    .2
    brw
    goto    test1
    goto    test2
    goto    test3

or

    
movlw    .2
    addwf    PCL
, F
    goto    test1
    goto    test2
    goto    test3


當程式執行到brw或addwf PCL,F時,發生中斷
在中斷執行完跳回時
brw..................會執行test1(錯誤)
addwf PCL, F.... 會執行test3(正確)

目前比較想要使用brw指令來做
因為使用addwf PCL, F來做,還要考慮PCLATH進位問題

可以給我一些些建議嗎?

2018/12/11 17:12
轉換PDF檔 列印


Re: PC程式位址-位移問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14598
等級: 73; EXP: 21
HP : 1083 / 1805
MP : 4866 / 77702
離線
PIC16F1xxx 加強型的中階 PIC 的架構,在查表上有很大的改變。

如需作 PAGE 的切換可以使用新指令 MPVLP來取代 PAGESEL 的巨集。當然查表也更加容易了。
我有些了一份關於 PIC16F1xxxx 架構上的教材可以參考一下 Page 11 ~ Page 37 裡的說明。

http://www.microchip.com.tw/Data_CD/
8-Bits MCU 相關課程 -->
W301 Advance PICC Application

2018/12/11 17:34
轉換PDF檔 列印


Re: PC程式位址-位移問題
資深會員
註冊日期:
2006/02/10 09:49
所屬群組:
註冊會員
文章: 296
等級: 16; EXP: 9
HP : 0 / 377
MP : 98 / 14274
離線
由你的敘述看起旯問題很嚴重,請問你是用Simulator 還是真的燒到IC 去實作,若是真的如此我建議BRW 前先關掉中斷完成後再開中斷,避免BRW 後中斷產生。

2018/12/14 11:17
轉換PDF檔 列印


Re: PC程式位址-位移問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14598
等級: 73; EXP: 21
HP : 1083 / 1805
MP : 4866 / 77702
離線
X IDE 下的 Soft Simulation 對 MPASM 做的軟體分析。

BRW 應該不受中斷影響吧!

指令 BRW
􀂄 直接听到目前 PC + W (unsigned)
􀂄 做為快速查表功能或 State Machines
􀂄 PC + W總長度為1 5 bit 位址,所以沒有換頁的問題


中斷發生時會自動啟用背景儲存功能(Shadow) 獎只要的暫存器存到 Bank 31 裡。返回時使用 RETFIE 的指令。

􀂄 W --> WREG_SHAD
􀂄 STATUS --> STATUS_SHAD
􀂄 BSR --> BSR_SHAD
􀂄 FSR0 --> FSR0_SHAD
􀂄 FSR1 --> FSR1_SHAD
􀂄 PCLATH --> PCLATH_SHAD

2018/12/14 11:41
轉換PDF檔 列印


Re: PC程式位址-位移問題
資深會員
註冊日期:
2006/02/10 09:49
所屬群組:
註冊會員
文章: 296
等級: 16; EXP: 9
HP : 0 / 377
MP : 98 / 14274
離線
hsien0212 樓主:
我真的花了一段時間重作你的問題,
PIC12F1501 TMR0 設定 每一個指令中斷一次

並沒有你沒有你所說的問題。
PIC16F core 被設計成 若有寫入PC 這個指令將不會被中斷
不清楚你的問題是怎來的

2018/12/14 15:24
轉換PDF檔 列印


Re: PC程式位址-位移問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 106
等級: 9; EXP: 30
HP : 0 / 207
MP : 35 / 7664
離線
謝謝Ryang,Dginlon的回覆
我查了一下spec.我也覺得應該不會被影響才對
但經過MCU燒錄產品實測與debug mode模擬確實都發生了

提供更多資訊給各位,再幫我看看
MCU:PIC16LF1786、燒錄器:PICkit3、軟體:MPLAB X IED v5.05

在debug mode,我故意將TIMR0的中斷旗標設為1

Test
:
  
pagesel    Test
  movlw    .2
  bsf    INTCON
, TMR0IF
  brw
  goto    test1
  goto    test2
  goto    test3


我查看PCLATH與WREG在retfie後,回復的值都是正確
但執行位置卻在test1,並非test3

我測試了PIC16LF1786的Simulator就沒有這個問題
我也測試了PIC16F18345、PIC16F1827也沒有這個問題了
到底為什麼會發生這個問題???

2018/12/18 09:49
轉換PDF檔 列印


Re: PC程式位址-位移問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14598
等級: 73; EXP: 21
HP : 1083 / 1805
MP : 4866 / 77702
離線
我當新的是:你強制設定 TMR0IF 進入中斷,這時 Timer0 有因溢時也要產生中斷,這時可能就會有問題發生了。

1. 不在除錯模式下,程式查表跳躍的執行是否正常。

2. 採用設定斷點的方式來除錯。

3. 善用 "Set Course at Here" 的功能,將 PC 設定道你想要執行程式的地方開始錯。

2018/12/19 10:26
轉換PDF檔 列印


Re: PC程式位址-位移問題
資深會員
註冊日期:
2004/07/23 16:25
所屬群組:
註冊會員
文章: 1189
等級: 30; EXP: 8
HP : 0 / 727
MP : 396 / 30802
離線
除非是最新未上市的ic到手,才有機會發現樣品bug

量產品,不大會有這樣的情況。

所以程式亂跳,一定是程式碼的問題

查表,進出中斷,都是很成熟的東西,

這種問題就別叫大家牽線把脈,當每個人是神醫

將 list file 丟出來看看,熟 asm 的大概一看就知道鬼在那了

別丟這種片段程式。

2018/12/19 10:48
轉換PDF檔 列印


Re: PC程式位址-位移問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 106
等級: 9; EXP: 30
HP : 0 / 207
MP : 35 / 7664
離線
謝謝Ryang的建議
你說的方法,我都試過了,程式燒錄到MCU的時候也會有相同問題發生。
謝謝Eigen的回覆
我也知道量產品應該不會有這種問題發生,但我卻發生了,試過很多方法找問題,如果一開始把一大堆的程式碼丟出來,應該會有更多人gg叫吧,我想要在這邊找到不同的意見,不同的方式,我自己再去試,可以學到解決問題的方法,麻煩你回應也注意一下言語好嗎

我把我的程式縮減測試如下,在錯誤會將LATC,4 pull-High
不管是debug或燒錄MCU還是會發生brw位移錯誤問題


__CONFIG _CONFIG1
, _FOSC_INTOSC&_WDTE_OFF&_PWRTE_OFF&_MCLRE_ON&_CP_OFF&_CPD_OFF&_BOREN_ON&_CLKOUTEN_OFF&_IESO_OFF&_FCMEN_OFF&0x3FFF
  __CONFIG _CONFIG2
, _WRT_OFF&_PLLEN_ON&_STVREN_ON&_BORV_HI&_LPBOR_ON&_LVP_OFF&0x3FFF
    
#include    p16lf1786.inc

    
ORG        0x00
    goto    PowerUp

    ORG        0x04
    pagesel    TimeCounterHi
    btfsc    INTCON
, TMR0IF
    goto    TimeCounterHi
    retfie


    ORG        0x15
PowerUp
:
    
banksel    OSCCON
    movlw    0x78
    movwf    OSCCON
    clrf    OSCSTAT
    clrf    OSCTUNE
    movlw    0xC0
    movwf    BORCON
    btfss    OSCSTAT
, PLLR
    goto    
$-1    

    banksel    TRISA
    clrf    TRISC

    banksel    OPTION_REG
    movlw    B
'00000001'
    
movwf    OPTION_REG
    banksel    TMR0
    movlw    .56
    movwf    TMR0
    bsf        INTCON
, TMR0IE
    bsf        INTCON
, GIE
Main
:
    
clrwdt
    movlw    .2
    brw    
    goto    test1
    goto    test2
    goto    test3
    goto    test4

test1
:
    
banksel    LATC
    bsf        LATC
, 4
    NOP
    goto    Main
test2
:
    
NOP
    goto    Main
test3
:
    
NOP
    goto    Main
test4
:
    
NOP
    goto    Main


    ORG            0x0800
TimeCounterHi
:
    
banksel    TMR0
    movlw    .62
    movwf    TMR0
    bcf        INTCON
, TMR0IF
    retfie

    END

2018/12/19 19:00
轉換PDF檔 列印


Re: PC程式位址-位移問題
資深會員
註冊日期:
2004/07/23 16:25
所屬群組:
註冊會員
文章: 1189
等級: 30; EXP: 8
HP : 0 / 727
MP : 396 / 30802
離線
你買到庫存品~~ 有bug

新的就沒這問題~~

2018/12/20 00:55
轉換PDF檔 列印



(1) 2 »



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2019 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project