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

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

   KeyBoard 
KeyBoard发表的帖子 

 初学者:请高手指点:一个奇怪的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

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:硬件:请问,寄存器和锁存器应该是不同的两种东西吧。有没有串行输入并行输出的锁存器?
[下一篇帖子]:http://www.laogu.com/MY/pci6.htm<a href=ht