本帖最后由 ztb 于 2018-8-17 10:03 编辑
双数据指针DPTR,通过AUXR1+1切换指针用于批量数据移动使得程序变得简洁,是增强型51单片机的标配。
近来在使用双DPTR从Code区移动数据到Xdata时发现问题:
Code区地址=3700h,Xdata区地址=280h,移动数量128字节。
一般情况下,默认是DPTR0指向Code区,DPTR1指向XData区。程序很简单却怎么也不能通过,而用模拟
仿真却可以验证程序正确。随后逐步排查摸索规律终于发现是单片机的一个缺陷。
表现是:
dptr0<300h dptr1<300h 一切正常
dptr0<300h dptr1>2ffh 一切正常
dptr0>2ffh dptr1=任意 切换到dptr1时,从Xdata读出的全部=00,也不能写入!
原因找到了,解决的方法就有了。很简单:
在程序最前面插入指令切换到DPTR1为默认指针
orl AUXR1,#1
就一切如常了。因为N76E003的XData最大为2FFh,从此天下太平!
还有注意,如果程序中切换了数据指针,必须恢复到DPTR1为默认。
各位,不知道你们遇到过类似表现莫名其妙的问题吗?
|