英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
PC操作错误
[打印本页]
作者:
kingman
时间:
2009-4-18 19:45
标题:
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
的值。
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2