英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3667|回复: 0
打印 上一主题 下一主题

bank的出错问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-18 19:44:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 STATUSRP0”,使BANK=1
经过改动,运行后发现程序仍然不正常。同样使用设置断点和观察变量的手段来分析程序,发现同样由于BANK设置的错误,单片机并未对位于BANK0PORTD PORTDB操作。因此,在该语句前要加上一句“bcf STATUSRP0”,使BANK=0。经过这样的调整后,程序运行正常了。
实际上,这样的错误很容易发生,在编写比较复杂的需要常常切换BANK的程序时更是如此。建议初学者在写程序时在有可能的情况下,在每次对BANK0以外的寄存器操作完成后都将BANK切换回BANK0。这样做虽然会麻烦一些,但会减少错误的发生,使调试更为简单一些。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-11-1 10:26 , Processed in 0.056951 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表