开发51单片机,您使用什么语言呢?不出意外的哈,90%以上的人会选择C吧。那么您知道C语言为了适应51单片机的开发,做了哪些改变吗?下面我们就聊一聊这方面的事儿。
一、有关数据类型的
1、bit
这个是为了适应51单片机的位操作而增加的关键字
2、sbit
这个是为了方便操作51单片机IO而增加的关键字,用于声明位变量
3、sfr
声明8位寄存器
4、sfr16
声明16位寄存器
二、和函数有关的关键字
1、using
指定函数使用寄存器组
2、interrupt
中断函数指定中断号
3、reenttrant
声明函数为可重入函数
三、存储类型
1、bdata
可位寻址的区域(16字节,供128bit)
2、data
内部直接寻址区域(128字节地址空间)
3、idata
内部间接寻址区域(256字节地址空间)
4、pdata
xdata中的一页空间(8bit间接寻址,共256字节地址空间)
5、xdata
外部16bit间接寻址区域(64K字节地址空间)
5、code
代码区,存放指令以及常量的地方(64K字节地址空间)
四、存储模式
1、small
小模式,默认使用data区空间。访问速度快,但空间小。
2、compact
紧凑模式,默认使用pdata空间。
3、large
大模式,默认使用xdata空间
以上设置,可以在Keil的开发环境中配置
声明变量时,可以使用idata,xdata,bdata,data,code关键字,来设置存储位置
对于指针型变量,这个时候就一定要注意声明时使用的关键字,因为使用了不同关键字,意味着使用的不是同种类型的空间。这个时候,有数据交换、传送之类的操作,可就完全不一样了。这个懂汇编语言的,一定会很清楚。
例如以下声明:
char data * xdata p;
data * 表示指针p指向的是存储在data区域的指针
xdata 表示p的数据,是保存在xdata区域