jwd 发表于 2024-11-20 16:12:04

VCC 发表于 2024-11-20 13:30
我虽然没点开楼主的程序,但是结合他的截图,和你的修改,我就知道问题出在哪里了




{:4_250:},stc32就没有这种问题吧

VCC 发表于 2024-11-20 16:23:38

jwd 发表于 2024-11-20 16:12
,stc32就没有这种问题吧
是的,80251指令集允许单指令加载16位数据。也就是将内存数据mov到WRj

但是似乎没有找到32位数据的加载指令(将内存数据mov到DRj)





bkeuqoaq 发表于 2024-11-20 16:43:26

本帖最后由 bkeuqoaq 于 2024-11-20 16:44 编辑

VCC 发表于 2024-11-20 16:23
是的,80251指令集允许单指令加载16位数据。也就是将内存数据mov到WRj

但是似乎没有找到32位数据的加载指 ...
有32位的加载指令dir8,和dir16都可以加载到双字寄存器里
只能直接寻址,不能间接寻址


VCC 发表于 2024-11-20 17:14:38

bkeuqoaq 发表于 2024-11-20 16:43
有32位的加载指令dir8,和dir16都可以加载到双字寄存器里
只能直接寻址,不能间接寻址



这是立即数的加载指令吧?

能否把内存地址里的连续4字节加载到寄存器里呢?

bkeuqoaq 发表于 2024-11-20 17:28:50

本帖最后由 bkeuqoaq 于 2024-11-20 17:30 编辑

VCC 发表于 2024-11-20 17:14
这是立即数的加载指令吧?

能否把内存地址里的连续4字节加载到寄存器里呢? ...
这不是立即寻址,是直接寻址,标准的51只能8位地址直接寻址,251扩展到16位地址了

可以把内存地址里的连续4字节加载到寄存器里,只能直接地址,但不能间接地址,如果能间接就NB了

ercircle 发表于 2024-11-25 10:11:58

小飞侠 发表于 2024-11-20 12:25
变量定义时不赋初值,在主程序中赋值,结果就正常了,再请问一下,局部变量也是这样吗? ...

请问是中断的问题,那这里在变量定义时赋值又是什么问题?

zhx 发表于 2024-11-25 10:25:23

STC 是 8位单片机,中断中尽量不用8位以上的比较,用也要先赋值一个临时变量再用,复制后还要比较一下有没有变化:
a=b;
if (a==b)
{
}

llyymm 发表于 2024-11-25 10:36:18

经典案例,大有收获 感谢分享{:4_250:}

wlhet 发表于 2024-11-25 16:58:57

确实经典 一般没遇到还真想不到这个方面去

专业理工男 发表于 2024-11-25 21:22:42

在使用AI8051U单片机时定义了float型数据,放在edata就是正常的,放在xdata就出现了莫名奇妙的问题,原来是原子操作的问题,长见识了!
页: 1 2 [3] 4 5
查看完整版本: 发现一个bug不知道是单片机还是Keil的问题 | 是细节问题,大家必须看下,原子操作