作者shela (雪特拉)
看板ASM
标题[问题] PIC18F6527 Bank 转换问题
时间Fri Nov 19 00:53:05 2010
各位板大好
小弟最近用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
1F:→ kikiqqp:注意BSR Bank 0 1 2之间差异 看起来是资料被扔到Bank2了 11/22 22:41