初学者:请高手指点:一个奇怪的C51“赋值异常”现象 (EasyPack仿真器):
请高手指点:一个奇怪的C51“赋值异常”现象 (EasyPack仿真器):
我用C51: EasyPack仿真器,用keil的编译器,其他的编译器也出现过这种“赋值异常”的
情况:
往常这种情况,仿真器观察赋值异常,但多数情况下,写片子后正常。
但今天,写片子也不对。
过去遇到此种情况,我一般能绕过去,今天怎么也绕不过去了。
那位朋友指点一下:
子函数中这样一句:
RX_BUF[sio_buf_cnt] = MyTmp;
MyTmp的当前值是0x61 即0110,0001;
但立刻赋值给RX_BUF[sio_buf_cnt] 就变成了 0x41 即0100,0001;
就从高数第3位,有1变成了0,今天我许多从串口收到的数都是这样。
应该与外部中线的从高数第3位没有关系。
因为我外部RAM,整体填充读写都正确!
也不大可能是其他环节,更改了这个数据,因为观察当前值之后,立刻赋值。此期间确实没
有做别的事情!
其中定义如下:我这三个都定义成全局变量了。
xdata unsigned char RX_BUF[50];
data unsigned char sio_buf_cnt = 0;
data unsigned char MyTmp;
我看翻译成的汇编,观察CPU窗口的当前值是对的,但把这个值赋给指定的地址是,则错了
(从data窗口看)
它的2个窗口的内容明显就矛盾!
怎样解决,急死我了。关键这段程序,过去是对的!正确执行过!
听朋友说:他们也遇到过此问题,说是编译选项的问题。
谢谢!
希望高手指点。
发表时间:2002年11月12日8:55:00