Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
版主
|
可以這麼說,但善用 Access Bank 會更好。
用 C18 寫更好....
發表於: 2005/4/10 15:58
|
|||
|
Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
資深會員
|
嗯嗯
就是指副程式的變數放到另一個bank裡 呼叫之後再切bank 執行完之後回到主程式再切回bank0 而主副程式間運算參數的傳遞 就用movff這個不必切bank的指令來做是吧~~
發表於: 2005/4/10 9:44
|
|||
|
Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
資深會員
|
我剛剛翻了一下規格書
好像只有movff這個指令的定址方式是12位元 其他都是8位元 這麼說來幾乎所有的指令都必須要切換bank了?! 看來改天有空時把我的程式都全部修改算了 管他變數在哪一個位址 全部都切換bank 免得程式出錯在那邊除錯到死還不知道問題出在哪...
發表於: 2005/4/9 11:16
|
|||
|
Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
版主
|
PIC18Fxxxx 使用的變數超過 128 個 Access Bank的容量時就必須使用一般的 RAM 來儲存變數,這時候就有切 BANK 的要求,這是用 ASM 的限制;用C18寫就沒有BANK切換的問題。
從Data Sheet 抄下一段有關 BANK 的說明 : BSR<3:0> holds the upper 4 bits of the 12-bit RAM address. The BSR<7:4> bits will always read ’0’s, and writes will have no effect. A MOVLB instruction has been provided in the instruction set to assist in selecting banks.
發表於: 2005/4/9 9:44
|
|||
|
Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
高級會員
|
定義變數時的位址 , 利用CBLOCK是OK的 , 並不會因為ACCESS BANK有問題 , 有問題的是BANKO , 當定義變數大於256時 , 會需要修改LKR的BANK區間定義 , ACCESS只是BANK0的一半 , 你的變數也沒超出256 , 試試看再加一個陣列讓它超過256 , 相信就有問題了 , 另外 , 在程式中使用的指令 , 利用MOVFF並不用切BANK , 但MOVWF就要動用到BSR來切換到變數所在的BANK
發表於: 2005/4/8 9:32
|
|||
|
Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
資深會員
|
我目前是沒有用FSR跟INDF來定址
上面那個程式只是拿來測試自動定址製表的 我目前使用 CBLOCK ENDC 來定變數位址 照FAE的說法是如果變數超過ACCESS RAM的位址 使用普通指令時就必須像PIC16那樣切換BANK 但我整個程式中完全沒去切換,也沒動到FSR 到目前為止執行起來就都沒問題 (我是用組合語言寫的) 所以我不確定到底需不需要切換BANK 也不知道變數再多一點會不會出問題 前一陣子怕會出問題還砍掉一堆變數 儘量都共用變數 但算一算也還有兩百個左右... 既然板主說沒問題 那就相信專業 繼續這樣寫下去吧
發表於: 2005/4/8 0:42
|
|||
|
Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
版主
|
其實,所謂的「切bank」 ,就是當一個指令中所含、代表address的位元不足以定址到所要的位址時,必須事先將額外需要的address位元,利用別的register,先設定好,再執行您真正要執行的指令。
如果使用FSR,配合INDF,就PIC18而言,FSR中所存放的address位元數,足以定址到全部RAM的位址,自然就不用「切bank」了。 如果您現在就可以存取到正確的位置,那就一直可以存取到正確位置。沒有什麼過一陣子就會不行了這類事情。 至於BSR的使用法,請參考右方W400的workshop教材,及PIC18 data sheet中的指令說明。
發表於: 2005/4/7 22:21
|
|||
|
Re: 直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
新會員
|
我也在用18F系列来ACCESS RAM,我没有切换BANK,没有发现什么问题。如果你只需要用256位以下的地址,直接INCRESE FSR就可以了,但是如果要用到FSR0H的话,最好还是用POSTINCn,POSTDECn,PREINCn 和 PLUSWn。这样当FSR0L到0XFF的时候,FSR0H就会自动INCRESE了。
發表於: 2005/4/7 5:56
|
|||
|
直接定址需要切換bank嗎?
|
||||
---|---|---|---|---|
資深會員
|
使用PIC18F4320
剛剛寫個小程式測試直接定址存取暫存器
START
如此一來我只要INCF FSR1L就可以連續寫入256個值製表 我想請問一下 由於這不是屬於直接存取暫存器ACCESS RAM 那我要讀寫這個表時需要改BSR來切換BANK嗎? 還是說只要改FSR1H跟FSR1L這兩個值就好?! 我程式裡的變數兩三百個 已經超過005FH 代理商的FAE跟我說18系列也是需要切BANK 但我直接使用沒有切換BANK也沒出問題.. 上面那一段使用到0600H沒切換也沒出問題 所以想問問 18系列如果不切換BANK 程式執行久了以後會出問題嗎?
發表於: 2005/4/6 16:48
|
|||
|