會員登陸
帳號:

密碼:

記住我



忘記密碼?

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


正在流覽:   1 名訪客





PIC16與PIC18 PC+?
初級會員
註冊日期:
2004/11/26 10:39
所屬群組:
註冊會員
文章: 22
等級: 3; EXP: 41
HP : 0 / 60
MP : 7 / 2603
離線
第一次使用PIC18系列寫程式PIC18F25K80

因為在學習CANBUS

看範例內容



MOVFF CANCON, TempCANCON ; Save CANCON.WIN bits
; This is required to prevent CANCON
; from corrupting CAN buffer access
; in-progress while this interrupt
; occurred
MOVFF CANSTAT, TempCANSTAT ; Save CANSTAT register
; This is required to make sure that
; we use same CANSTAT value rather
; than one changed by another CAN
; interrupt.
MOVF TempCANSTAT, W ; Retrieve ICODE bits
ANDLW B’00001110’
ADDWF PCL, F ; Perform computed GOTO
; to corresponding interrupt cause
BRA NoInterrupt ; 000 = No interrupt
BRA ErrorInterrupt ; 001 = Error interrupt
BRA TXB2Interrupt ; 010 = TXB2 interrupt
BRA TXB1Interrupt ; 011 = TXB1 interrupt
BRA TXB0Interrupt ; 100 = TXB0 interrupt
BRA RXB1Interrupt ; 101 = RXB1 interrupt
BRA RXB0Interrupt ; 110 = RXB0 interrupt


最初看到 ADDWF PCL, F 後覺得奇怪(因為我還停留在PC+1得觀念裡)
所以看 BRA NoInterrupt 沒有錯
但是 BRA ErrorInterrupt 就覺得怎麼會變成這裡?

找一下資料才發現好像PIC18得 PC都是+2的,不同於我之前的PIC12或PIC16是PC+1

為了想避免後續再發生這樣的事情
想問問
1.使用指令集的BRA來判定它是PC+1或PC+2的方式可以嗎?

2.程式編譯完後,叫出Progrom Memory視窗觀看Address欄位是間隔1或是2?

3.強記PIC12或PIC16就是PC+1 PIC18就是+2

請問哪個好?
------------------------------------------------------------
再來關於ADDRESS與PROGRAM FLASH的值問題

例如 PIC16的

ADDRESS OPCODE
0000 3181
0001 297F

這很直覺得讓我知道位址0000放的是 3181
0001放的是 297F


PIC18 的
ADDRESS OPCODE
0000 EF7A
0002 F000

所以0000放的是7A
0001放的是FE
0002放的是00
0003放的是F0

這樣PIC16跟PIC18好像怪怪的....

6月05日 16:19:07
轉換PDF檔 列印


Re: PIC16與PIC18 PC+?
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1028
等級: 28; EXP: 32
HP : 0 / 683
MP : 342 / 24373
離線
個人感覺與看法...

這個應該不是 +1, +2問題...

而是去了解instruction set寬度(幾bits?)才是重點...

PIC12, PIC16, PIC18, PIC24, PIC30, dsPIC33

除了PIC12及PIC16以外,其他的都是
The PC addresses bytes in the program memory. To
prevent the PC from becoming misaligned with word
instructions, the Least Significant bit of PCL is fixed to
a value of ‘0’.
The PC increments by 2 to address
sequential instructions in the program memory

6月06日 14:27:50
轉換PDF檔 列印


Re: PIC16與PIC18 PC+?
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14805
等級: 73; EXP: 53
HP : 1087 / 1813
MP : 4935 / 81106
離線
PIC16F 系列的程式碼是以 14 bits 為一個步進, 所以PC每次都是加1的。
但是 PUC18F 系列是以 16 bits 為指令單位長度,其 PC 是8個bit的指向, 為了能順利提取16bit 的指令,PC 的 b0 永遠是零, 都是指向偶數的位置, 也就是說一般都是加 2 的。 除非是做表格的存取時,才可以有抓奇數的位置。

可以參考 ASP102 的教育訓練那裡面有說明。

6月07日 00:31:35
轉換PDF檔 列印


Re: PIC16與PIC18 PC+?
初級會員
註冊日期:
2004/11/26 10:39
所屬群組:
註冊會員
文章: 22
等級: 3; EXP: 41
HP : 0 / 60
MP : 7 / 2603
離線
感謝 jason680 與 Ryang的回覆

我再參考一下其他資料好了

其他人後續若有見解~也請多指教囉~

謝謝

6月20日 11:25:42
轉換PDF檔 列印






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

[進階搜尋]


搜尋
Microchip連結

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