:::


Browsing this Thread:   1 Anonymous Users






PIC16與PIC18 PC+?
#1
初級會員
初級會員


查看用戶資訊
第一次使用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好像怪怪的....

發表於: 2019/6/5 16:19
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16與PIC18 PC+?
#2
資深會員
資深會員


查看用戶資訊
個人感覺與看法...

這個應該不是 +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

發表於: 2019/6/6 14:27
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16與PIC18 PC+?
#3
版主
版主


查看用戶資訊
PIC16F 系列的程式碼是以 14 bits 為一個步進, 所以PC每次都是加1的。
但是 PUC18F 系列是以 16 bits 為指令單位長度,其 PC 是8個bit的指向, 為了能順利提取16bit 的指令,PC 的 b0 永遠是零, 都是指向偶數的位置, 也就是說一般都是加 2 的。 除非是做表格的存取時,才可以有抓奇數的位置。

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

發表於: 2019/6/7 0:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16與PIC18 PC+?
#4
初級會員
初級會員


查看用戶資訊
感謝 jason680 與 Ryang的回覆

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

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

謝謝

發表於: 2019/6/20 11:25
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]