我想用C语言对单片机的RAM区清0,有人能告诉我个思路吗?

来源:百度知道 编辑:UC知道 时间:2024/05/16 11:13:01
我刚开始也是这么想的,可是指针这个变量也是定义在RAM中的啊!不能对本身也清0吧! 不知道可不可以用POKEB这个函数啊?我用的这个单片机是普林斯顿结构的,ROM和RAM是一片存储器上的!程序不是在ROM中的吗?执行时取出放到一个程序寄存器然后执行的吗?

普林斯顿结构,它采用了不在程序与数据的存储上进行逻辑区分的设计思想,这种设计思想在通用计算机和通用微型计算机中被广泛使用。
mcs-51单片机 就是基于这种结构 MCS-51汇编语言程序的一般格式
与8086不同,没有代码段、数据段等区分,统一编址。
程序由指令行或注释行组成,指令行每行只能写一条指令。
指令前可用“标号:”表示指令地址,以便在指令中引用;标号是符号名,以字母开头。
注释行应以“;”号开头;指令后也可用“;”号分隔,附加注释。
程序由伪指令ORG XXXXH 定位,ORG中的16位地址就是将来写入程序存储器的绝对地址。程序中的ORG应按地址从小到大排列。由ORG定位的程序段可以不连续,汇编程序将会在段间的空地址上填00H,即NOP。因此,每个ORG段的最后一条指令一般应是转移指令。
数据由伪指令DB(字节)或DW(双字节)说明。数值应以数码0-9开头;尾缀说明:B-二进制,D-十进制,H-十六进制。十进制D可缺省。
也就是说你可以想象你的数据空间是从0000-FFFF
因为你在编程时你只能操纵这个区,而程序性指令如JUMP永远不会跳到数据区的
所以一个简单的初始化可以这样来做
MOV R0,#00H
MOV A,#00H
MOV R1,#FFFFH
loop:
MOV@R0,A
INC R0
DANZ R1,loop
将0000-FFFF全置零了

如果用C来写可以这样吧
memset(0000,0000,FFFF) /*add,int val,int count */
如果memset函数可以使用的话.
我总觉的void pokeb(int segment,int offset,int value) 将字节value写到segment:offset处
这个涵数无法使用。因为mcs-51没段概念。

你那么想就不可能了
因为你要执行的指令也是在RAM里的
自己把自己清掉了 难道还能继续下去么……

用指针做个循环好了