关于51C语言的

来源:百度知道 编辑:UC知道 时间:2024/05/27 10:52:10
如果用51单片机C语言写unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}
用keil c编译后,以上数据是保存在51单片机里的数据存储器中吗?
是的话,它是保存在具体什么位置呢,哪个地址里呢?
在书上看at89s52里有256b的数据存储单元,但好像它们都各自有了用途的

在small模式下,变量默认存储在data区,可以用idata,pdata,xdata,code制定变量的存储位置。
256b的ram中前128b是data区(00H-0FFH)。
4个工作寄存器区R0-R7(00H-1FH),一般函数默认使用using 0即工作寄存器0,中断函数使用剩下的3个,比如t0中断使用using 1,t2用using 2,ex0用using 3。
80H-FFH是难理解的部分,因为特殊功能寄存器的地址(注意只是地址)也在这个范围内。那么单片机是怎么区分是ram还是寄存器呢?答案是通过寻址方式。这就是80H-FFH只能用寄存器间接寻址的原因。
举个列子,80H是P0的地址。
mov 80H,#10H (把P0口置为16)

mov R0, 80H
mov @R0 #10H (把ram中的80H置为16)

如果你的程序没定义其他变量,并且没有使用using 1、using 2、using 3,那么tab[]的地址是08H-11H。剩下的是堆栈,所以复位后sp的地址是11H。

编译时自动安排地址 数组的话就一定是连续地址 没写类型的话默认是 data类 即通用RAM