[問題] PIC18F6527 Bank 轉換問題

看板ASM (組合語言)作者 (雪特拉)時間14年前 (2010/11/19 00:53), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
各位板大好 小弟最近用PIC18F6527這款晶片控制太陽能充電器 使用的語言是 Assembly 程式裡面的變數一開始全部是存在 Access Bank (Bank0, 000h~05Fh) 還有Bank 1 (100h~1FFh) 由於我需要不斷地監測電池電壓電流和溫度 我需要定義類似像這樣的變數 V_OUT1, V_OUT2, I_OUT1, I_OUT2, TEMP1, TEMP2 每一個都是 2 Bytes 這些變數都存在 Bank 1 裡面 程式會做一些簡單的加減法來判斷電壓電流是否過大, 這是在 BSR = Bank 1 的時候執行的。 現再我遇到一個問題, 由於Bank 1的容量有限,我需要使用Bank 2來存放新定義的變數, 舉例,我定義一個 2 Bytes變數 "PREF_50W"在Bank 2中, 當我要把一個參考值 H'C800' 填到PREF_50W 裡面,我加入了以下的程式碼: ...... ; ......下一行以前 BSR = Bank 1 banksel PREF_50W ; BSR = Bank 2 (跳到 Bank 2) movlw 0x00 ; PREF_50W = 0xC800 movwf PREF_50W movlw 0xC8 movwf PREF_50W+1 banksel V_OUT2 ; BSR = Bank 1 (跳回Bank 1) ...... 結果問題就出現了, 沒有加入這一段程式碼,原本 ADC 出來的值(ADRESH:ADRESL)都是對的, 舉例,V_OUT2 = H'0304'(等同於電池電壓12V) 加了之後,ADC 出來的值就是錯的, 舉例,有時出現 V_OUT2 = H'01FC' 有時出現 V_OUT2 = H'0000' 用ICD3 debugger 去一步一步檢查,就發現ADC做完以後的 ADRESH:ADRESL根本就是錯的。 不知道有沒有人遇過這種情形呢? 感謝各位板大不吝賜教。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 76.118.160.200

11/22 22:41, , 1F
注意BSR Bank 0 1 2之間差異 看起來是資料被扔到Bank2了
11/22 22:41, 1F
文章代碼(AID): #1CvLdqx0 (ASM)
文章代碼(AID): #1CvLdqx0 (ASM)