[問題] PIC18F6527 Bank 轉換問題
各位板大好
小弟最近用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
11/22 22:41, 1F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章