标题: stc89c52rc单片机内存问题请教 [打印本页]

作者: lyonkon    时间: 2022-10-27 23:36
标题: stc89c52rc单片机内存问题请教
我写1602写指令程序,
…… rs
……rw
mov p0,0x7f;0x7f存放1602指令
……en
使用00h单元到0x7f存放指令都可以正常工作。
用80h到ffh内存单元存放指令,就显示错误。
比如b寄存器地址是f0h,那么我使用f1h到ffh内存单元存放指令,1602就显示不了。
我想问一下,特殊功能寄存器后面的剩余内存单元是什么情况

作者: yzwzfyz    时间: 2022-10-28 08:29
特殊功能寄存器的范围是:80H-FFH。
同是51系列的CPU,型号不同各单元的功能略有不同,但尽可能地统一,以最大可能的让程序通用。
虽然该区域使用的是RAM地址,但硬件结构上与RAM结构还是有区别的。
对于该区域未使用的单元,是禁止使用的(不建议使用),因为它是为后续的CPU的功能扩展预留的。
在你未了解的情况下,使用这些单元,极可能产生不可预期的结果。特别是STC系列的。
STC系列基于标准51,但在特殊功能寄存器区域下足了功夫,例如:扩展了串口2,DPTR指针,CPU运行速率,PWM……。甚至扩充到80H-8FH都不够用了,又借用了部分XRAM区域。
所以STC系列功能远大于标准51。
这也是不同型号CPU之间,程序不能通用的主要原因!
同样一个51系列的C语言程序,烧录到不同的STC系列CPU中,大概率不能通用。
所以编译时,也要告诉编译器,用的是哪种型号的CPU。
作者: 柒柒12    时间: 2022-10-28 10:07
楼主的程序有点没不懂,0x80以上要用间接寻址。听说STC是一对一技术服务,你直接联系厂家技术咨询效率会更高
作者: 188610329    时间: 2022-10-28 10:37
首先, 寄存器(通常意义上的"内存") 和 特殊功能寄存器, 不是同一个概念. 也不是同一个东西。
特殊功能寄存器并不是“内存”, 之所以说 在 0x80~0xff 这个直接地址,是给你一个 访问路径, 让你可以用 MOV指令 对0x80 这个直接地址的读写操作,作用到 P0 总线上,并不是说这个地址的背后,是一个“内存”,你可以把这个直接地址当作是一个电话号码,当特殊寄存器列表没有 列出最终目标,比如 0xf1~0xff  时,它极大的概率是空号。对这些地址的读写是一个无效操作。即无法保存你写入的值,也无法取回你以为已经写入的值。
而正因为给了特殊寄存器“占用”了0x80~0xff的直接地址。 因此,有256字节标准寄存器的51系列单片机对于高位的 80~ff 地址的“内存”,只能使用间接地址@R1方式访问。

作者: coody_sz    时间: 2022-10-28 10:53
LZ可能还不了解51的结构,0x80以上的内存要用简介寻址访问。
作者: matlab?    时间: 2022-10-28 11:20
memcpy函数?
作者: hhdsdy    时间: 2022-10-28 11:55
楼主去了解一下51单片机4组I/O口的地址,就会有所明白了
作者: lyonkon    时间: 2022-10-29 14:18
感谢大家
作者: 大漠孤烟001    时间: 2022-11-1 16:51
楼主这个问题需要注意不同地址空间的访问方式不一样。

11.jpg.png (84.88 KB, 下载次数: 55)

11.jpg.png

作者: lyonkon    时间: 2022-12-24 21:07
请问用MOV A,@RI 对80H到FFH寻址的时候,与片外ram的地址是否冲突
作者: Hephaestus    时间: 2022-12-25 19:50
lyonkon 发表于 2022-12-24 21:07
请问用MOV A,@RI 对80H到FFH寻址的时候,与片外ram的地址是否冲突

片外RAM要用MOVX语句访问,你用MOV语句想访问片外,做梦呢?
作者: hi等你    时间: 2022-12-27 09:40
看楼主的幼儿园级别的问题所写的程序也不是很大,30H到80H这么多的地址也够用了,干嘛非得去自己不知道80H以上的地方踩雷呢,如果真想用,还是多看看51单片机的硬件结构
作者: 大漠孤烟001    时间: 2022-12-28 09:40
STC89C52是绝对的经典、绝对的主流,现在的 STC8H8K64U / STC32G12K128 已是 8051世界 的主流!永远的经典!STC8H8K64U-45I-TSSOP20,@1.9,硬件USB直接仿真,硬件USB直接下载!速度快、抗干扰强。32位8051,STC32G12K128,两组CAN,三组LIN,4组串口,3组SPI, I2C!




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