PIC16與PIC18 PC+?

作者 sakanayy 於 2019年06月05日 16:19:07
第一次使用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好像怪怪的....

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22668&post_id=79697