导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:请高手指点:一个奇怪的C51“赋值异常”现象 (Ea[KeyBoard]

 *第6195篇: 初学者:请高手指点:一个奇怪的C51“赋值异常”现象 (EasyPack仿真器):

  
楼 主:KeyBoard 2002年11月12日08:55
 初学者:请高手指点:一个奇怪的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个窗口的内容明显就矛盾!

怎样解决,急死我了。关键这段程序,过去是对的!正确执行过!
听朋友说:他们也遇到过此问题,说是编译选项的问题。


谢谢!

希望高手指点。


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:硬件:请问,寄存器和锁存器应该是不同的两种东西吧。有没有串行输入并行输出的锁存器?

[下一篇主题]:初学者:test