标题: 关于单片机存储器单元成功赋值但没写进去数据 [打印本页]

作者: c语言    时间: 2018-8-18 09:12
标题: 关于单片机存储器单元成功赋值但没写进去数据
请帮我看看 关于存储器的一个问题 急 谢谢 谢谢
执行完毕后 r0 与0x85 两个单元成功赋值,但是A这个单元怎么没有写进去数据呢 为什么

image.jpg (93.07 KB, 下载次数: 31)

image.jpg

作者: c语言    时间: 2018-8-18 09:14
mov R0,#0x85
mov 0x85,#0x22
mov A,@R0

image.jpg (91.31 KB, 下载次数: 27)

image.jpg

作者: xuyaqi    时间: 2018-8-18 10:45
c语言 发表于 2018-8-18 09:14
mov R0,#0x85
mov 0x85,#0x22
mov A,@R0

把 mov 0x85,#0x22 改为 mov @R0,#0x22; 就可以了。
作者: ahshmj    时间: 2018-8-18 12:34
你是用的是什么单片机?有没有0x85(0x7f以上的)RAM?AT89c51就没有。只有128字节最高到0x7f。
作者: c语言    时间: 2018-8-18 16:52
ahshmj 发表于 2018-8-18 12:34
你是用的是什么单片机?有没有0x85(0x7f以上的)RAM?AT89c51就没有。只有128字节最高到0x7f。

我用的是因特尔公司的80c52芯片 有256b内ram 如果按照狭义的说就是只有低128b 实际上高128b的sfr也是可以直接寻址的 0x85这个属于高ram区 高ram区的除了sfr剩下的比如0x85单元应该怎么寻址 书上漏了这种情况

image.jpg (83.85 KB, 下载次数: 27)

image.jpg

image.jpg (74.07 KB, 下载次数: 28)

image.jpg

作者: c语言    时间: 2018-8-18 17:10
xuyaqi 发表于 2018-8-18 10:45
把 mov 0x85,#0x22 改为 mov @R0,#0x22; 就可以了。

大哥 谢谢你啊 那为什么这样就可以了
我想问高128b内除了21个离散分布的sfr 剩下的比如0x85这个单元属于内ram 还是外ram
第一种 如果根据芯片介绍来看 明确写了256字节的片上ram 那0x85要不是内ram 那就好像凑不齐256个了
第二种 根据实验结果看 根据你的实验后 A单元确实赋值进去了 但是data区里的0x85这个单元22h没写进去 而我发现在idata区也就是间接寻址片内ram里的0x85单元值变成了22h
哦 我明白了 这两种情况是一致的 我先前把第二种里的间接寻址片内ram看成了 间接寻址片外ram
0x85单元属于片内ram 对这类单元格赋值用间接寻址方式
写进来以帮助其他看到可能不会的人

image.jpg (100.23 KB, 下载次数: 29)

image.jpg

作者: c语言    时间: 2018-8-18 17:16
xuyaqi 发表于 2018-8-18 10:45
把 mov 0x85,#0x22 改为 mov @R0,#0x22; 就可以了。

那么这书上画线的地方 寄存器间接寻址是不是少写了一点 就是片内ram高128字节中出去sfr的字节地址也应该是寄存器间接寻址?还想问的是0x85这个地址的单元格也属于寄存器吧?谢谢哈

image.jpg (69.97 KB, 下载次数: 22)

image.jpg

作者: ahshmj    时间: 2018-8-18 20:16
51单片机的高128位(80H~0FFH)是和特殊功能寄存器地址相重合的,可以直接寻址,不可以使用R1、R0间接寻址的。
如 mov R0,#0x80
    mov 0x80,#0x22
    mov A,@R0
是不可以的。
  而:mov R0,#0x7F
         mov 0x7F,#0x22
         mov A,@R0     
是可以的。
作者: zl2168    时间: 2018-8-18 21:14
对于80c52单片机(属增强型),访问(包括写入和读出)高128B(80H~FFH)均应采用寄存器间接寻址方式。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1