C51编程:请问高手:C51编程的一个简单“赋值异常”问题:急切,盼指导!
我用C51: EasyPack仿真器,用keil的编译器,其他的编译器也出现过这种“赋值异常”的
情况:
我这样定义以下三个变量:
data unsigned char AAAAA;
xdata unsigned char BBBB;
data unsigned char MyTmp;
我这样使用:
MyTmp=55; //随便一个小于255的数据
AAAAA = MyTmp;
BBBB = MyTmp;
只要MyTmp是个确定写死的数据,如这里,程序中就固定为55,则这段程序放在任何地方,
执行都正确。
----------------------------------------------------------
如果MyTmp是个从串口接收到的数据,这段程序放在串口中断服务程序中:
则
AAAAA = MyTmp; //执行正确,因为AAAAA定义为片内
BBBB = MyTmp; //执行错误,因为AAAAA定义为片外
我看了汇编代码:
BBBB = MyTmp; 这里2中情况下,竟然完全相同:
mov dptr,#0063
mov A,#MyTmp
movx @dptr,A
但不知道:BBBB我定义为片外:怎么会分配到,#0063呢?
-------------------------
另外
MyTmp 我定义成 data unsigned char 和 xdata unsigned char
情况也不相同!
究竟什么原因呢?
急死我了,盼指点!
发表时间:2002年11月12日11:16:00