访问电脑版页面

导航:老古开发网手机版Pic单片机PIC单片机经验总结

PIC单片机的bank和PC的出错问题

导读:
关键字:
bank,PC,PIC单片机,

  1、 BANK设置错误:

  先来看一段程序:

  include

  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。这样做虽然会麻烦一些,但会减少错误的发生,使调试更为简单一些。

  2、 PC操作错误:

  在进行查表操作时需要对PCL进行操作,这项操作也比较容易出错。举个例子来说:

  ……

  00CA bcf PCLATH,0

  00CB movf RTCCSIG,W

  00CC addwf PCL,1

  00CD goto main

  00CE goto RtccS1

  00CF goto RtccS2

  00D0 goto Rtccs3

  00D1 goto Rtccs4

  ……

  0130 bsf PCLATH,0

  0131 movf RTCCSIG1,W

  0132 addwf PCL,1

  0133 goto SetHour

  0134 goto SetMins

  ……

  上面的程序是高奇ICD教学实验套件的演示程序CLKTEST.ASM编译完成之后的List文件中的一段,前面的4位数据是16进制数,代表了该程序行在单片机内程序存储器的装载位置。其中00CA句和0130句保证了执行“addwf PCL,1”语句后PC能跳转到正确的位置,感兴趣的朋友可以将这两句屏蔽后看一下结果。

  在PIC16F877单片机中PCLATH寄存器是一个低5位有效的寄存器,单片机在执行“addwf PCL,1”语句时,会将PCLATH和PCL寄存器的值(PCLATH:PCL)一起送入程序计数器PC。以上面的程序0132H句为例,此时PCL=32H如果此时PCLATH=00H,RTCCSIG1=1则执行完该句后PC=PCLATH:PCL=0033H,这样在下一个指令周期到来时就发生了错误。本来该执行第0134H句的,却变成了执行第0034H句。同样的,我们能够知道第00CAH句的作用。避免发生这样错误的方法是:在调试程序的时候调出List文件,特别关注一下有这类操作的语句,再根据实际的情况来决定PCLATH的值。

 

来源:电子发烧友   作者:Spring  2011/4/26 10:19:00
栏目: [ PIC单片机经验总结]

相关阅读

减少空间提高效率:PIC单片机A/D转换数据打包

PIC单片机软件异步串行口实现技巧

如何解决PIC单片机硬件死锁的问题

PIC单片机低功耗系统的设计

为什么PIC单片机的另一个为外部中断进不去

在对PIC单片机进行程序设计时应注意的四个问题

影响PIC单片机功耗主要有以下几个因素

PIC单片机电平变换中断的那些坑

PIC单片机抗静电处理解决方案

PIC单片机红外遥控编码与解码的问题分享

PIC单片机开发的一些经验和技巧解析

PIC单片机选用存储体0或1的方法

PIC单片机低功耗系统的设计方法介绍

在处理PIC单片机的中断服务程序时需要注意哪些问题

PIC单片机的程序设计经验分享

PIC单片机在线调试中的一些问题

PIC单片机A/D转换数据存储效率的提升

PIC单片机软件开发技巧

PIC单片机存储体0或1的选用说明(程序)

PIC单片机开发的经验、技巧总结分享