没有合适的资源?快使用搜索试试~ 我知道了~
首页51单片机头文件reg51.h详解
资源详情
资源评论
资源推荐

51单片机头文件单片机头文件reg51.h详解详解
我们在用c语言编程时往往第一行就是头文件,51单片机为reg51.h或reg52.h,51单片机相对来说比较简单,头文
件里面内容不多,像飞思卡尔、ARM系列的单片机头文件往往内容就非常多,尽管如此,对一些初次接触单片
机的朋友来说,51的头文件还是搞不太清楚,今天具体来说明一下。
1)“文件包含”处理概念
所谓“文件包含”是指在一个文件内将另外一个文件的内容全部包含进来。因为被包含的文件中的一些定义和命令使用的频率很
高,几乎每个程序中都可能要用到,为了提高编程效率,减少编程人员的重得劳动,将这些定义和命令单独组成一个文件,如
reg51.h,然后用#include包含进来就可以了,这个就相当于工业上的标准零件,拿来直接用就可以了。
2)寄存器地址及位地址声明的原因
reg51.h里面主要是一些特殊功能寄存器的地址声明,对可以位寻址的,还包括一些位地址的声明,如果如sfr P1=0x80;sfr
IE=0xA8;sbit EA=0xAF等。
sfr P1 = 0x90这句话表示:P1口所对应的特殊功能寄存器P1在内存中的地址为0x80,sbit EA=0xAF这句话表示EA这一位的地
址为0xAF。
注意这里出现了一个使用很频繁的sfr和sbit。
sfr 表示特殊功能寄存器的意思,它并非标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新的关键
词,其用法是:sfr 特殊功能寄存器名=地址值(注意对于头文件里“特殊功能寄存器名”,用户实际上也可以修改的,如P1=0
x80,也可改为A1=0x80,但sfr 和地址值则不能更改,否者会编译出错。)
sbit 表示位的意思,它也是非标准C 语言的关键字,编写程序时如需操作寄存器的某一位(可位寻址的寄存器才能用)时,需
定义一个位变量,此时就要要到sbit,如sbit deng=P1^0,sbit EA = 0xAF;需要注意的是,位定义时有些特殊,用法有三种:
第一种方法:sbit 位变量名=寄存器位地址值
第二种方法:sbit 位变量名=SFR 名称^寄存器位值(0-7)
第三种方法:sbit 位变量名=SFR 地址值^寄存器位值
如:
sbit IT0=0x88 (1)说明:0x88是IT0 的位地址值
sbit deng=P1^2 (2)说明:其中P1 必须先用sfr 定义好
sbit EA=0xA8^7 (3)说明:0xA8 就是IE寄存器的地址值
以上三种定义方法需注意的是 IT0 deng EA可由用户随便定义,但必须满足C语言对变量名的定义规则。除些外其它的则必须
按照上面的格式写,如“名称^变量位地址值”中“^”,它是由keil软件的规定的,不能写成其它的,只能这样能才编译通过。
以上是对寄存器地址和位地址的定义和声明作了解释,大家需要牢牢记住:只有对寄存器及相关位进行声明地址后,我们才能
对其进行赋相关的值,keil软件才能编译通过。至于说为什么,这可能一句话两句话也说不清楚。
3)内存、SFR、位、地址等的通俗解释
前面讲到了寄存器地址和位地址(前提能位寻址)声明的目的是为告诉C编译器相应寄存器及其位在内存中的地址,这样我们
对寄存器及一些位赋的变量和数值才能正确保存,然后才能供CPU正确的调用,完成相应的功能。
上段文字出现了寄存器(SFR)、位,地址、内存等,单片机学习过程中还会出现ROM、RAM等名词,可能大家觉得不是很
好理解,这里可以通俗的解释一下,如下面三个图所示。
我们把内存比作宾馆,ROM、RAM、SFR相当于宾馆里具体的有三种不同功能楼层(具体这个宾馆多少层即多少ROM、
RAM、SFR,视各个宾馆或者每种单片机而不同),每层8个房间相当于8位,每个房间要么住男人要么住女人相当于每位要
么放入数字1要么放入数字0,keil编译器就相当于宾馆的工作人员,旅客去住旅馆相当写程序的过程,住宾馆的人必须事先要
给工作人员说你是哪一层哪一个房间(即声明寄存器地址和位地址,)宾馆工作人员才能把你带到你的房间里去(这里假设这
个宾馆可以由旅客自己决定住哪个房间)。即:只有对寄存器及相关位进行声明地址后,我们才能对其进行赋相关的值,keil
软件才能编译通过。


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0