英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
bank的出错问题
[打印本页]
作者:
kingman
时间:
2009-4-18 19:44
标题:
bank的出错问题
1
、
BANK
设置错误:
先来看一段程序:
include <p16f877.inc>
PORTDB EQU 20H
……
START
movlw b‘11110000’
movwf PORTDB
clrf TRISD
MAIN
bcf STATUS,C
rlf PORTDB,1
btfsc STATUS,C
bsf PORTDB,0
movf PORTDB,W
movwf PORTD
call DELAY
goto MAIN
上面的是一个将
D
口的发光二极管循环点亮的小程序,实际运行发现并不能达到点亮的效果。通过设置断点和观察变量的手段发现,单片机在执行
“clrf TRISD”
这一语句后,
TRISD
寄存器的值为
0FFH
,而
PORTD
的值被清成了
0
。这是因为未设置
BANK
的缘故,此时
BANK=0
,而
TRISD
寄存器却是位于
BAKN1
的。因此,在该语句前要加上一句
“bsf STATUS
,
RP0”
,使
BANK=1
。
经过改动,运行后发现程序仍然不正常。同样使用设置断点和观察变量的手段来分析程序,发现同样由于
BANK
设置的错误,单片机并未对位于
BANK0
的
PORTD
、
PORTDB
操作。因此,在该语句前要加上一句
“bcf STATUS
,
RP0”
,使
BANK=0
。经过这样的调整后,程序运行正常了。
实际上,这样的错误很容易发生,在编写比较复杂的需要常常切换
BANK
的程序时更是如此。建议初学者在写程序时在有可能的情况下,在每次对
BANK0
以外的寄存器操作完成后都将
BANK
切换回
BANK0
。这样做虽然会麻烦一些,但会减少错误的发生,使调试更为简单一些。
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2