一、首先我们先了解一下51单片机的头文件#include <REG51.H>
为了能看懂REG51.H头文件,下面需了解Keil C51编译器扩展的关键字:
关键字 | 用途 | 说明 |
---|---|---|
bit | 位标量声明 | 声明一个位标量或位类型 |
sbit | 位变量声明 | 声明一个可位寻址变量 |
sfr | 特殊功能寄存器声明 | 声明一个特殊功能寄存器(8位) |
sfr16 | 特殊功能寄存器声明 | 声明一个特殊功能寄存器(16位) |
data | 存储器类型说明 | 直接寻址的8051内部数据存储器 |
bdata | 存储器类型说明 | 可位寻址的8051内部数据存储器 |
idata | 存储器类型说明 | 间接寻址的8051内部数据存储器 |
pdata | 存储器类型说明 | 分页寻址的8051外部数据存储器 |
xdata | 存储器类型说明 | 8051外部数据存储器 |
code | 存储器类型说明 | 8051程序存储器 |
interrupt | 中断函数声明 | 定义一个中断函数 |
reetrant | 再入函数声明 | 定义一个再入函数 |
using | 寄存器组定义 | 定义8051工作寄存器组 |
REG51.H文件主要定义了特殊功能寄存器和可位寻址变量:
如sfr P3 = 0XB0;
sbit RXD = 0XB0;
等.
二、多个工程文件连接的基本方法
多个函数在多个C源文件中,可使用文件包含其它C源文件或在本文件中使用extern关键字。
三、数据类型的隐式转换:
bit -> char -> int -> long -> float
signed -> unsigned
四、变量的定义
在C51中对变量定义的格式:[存储种类] 数据类型 [存储器类型] 变量名表;
存储种类包括auto、extern、static和register,其中auto为默认值。其作用:http://zhidao.baidu.com/
data | 访问速度最快 | 直接访问内部数据存储器(128B) |
bdata | 允许位与字节混合访问 | 可位访问内部数据存储器(16B) |
idata | 允许访问全部内部地址 | 间接访问内部数据存储器(256B) |
pdata | MOVX @Ri指令访问 | 分页访问外部数据存储器(256B) |
xdata | MOVX @DPTR指令访问 | 外部数据存储器(64K) |
code | MOVC @DPTR指令访问 | 程序存储器(64K) |
若忽略存储器类型,则按编译模式SMALL、COMPACT或LARGE所规定的默认存储器类型确定变量的存储器类型。
1.SMALL时,变量被定义在80C51单片机的内部数据存储器(data区)中。
2.COMPACT时,变量被定义在分页外部数据存储器(pdata区)中。
3.LARGE时,变量被定义在外部数据存储器(xdata区)中。
五、可位寻址对象定义
1.sbit 位变量 = 位地址;
sbit RXD = 0XB0;
2.sbit 位变量 = 特殊功能寄存器名^位位置;
sbit RXD = P3^0;
3.sbit 位变量 = 字节地址^位位置;
sbit RXD = 0XB0^0;
同理,当对象为C51内部数据存储器的可寻址区(bdata)时:
int bdata num = 1234;
sbit num_bit15 = num^15;
位位置取决于数据类型在内存中占用的位数。