《51单片机头文件reg51.h详解》由会员分享,可在线阅读,更多相关《51单片机头文件reg51.h详解(11页珍藏版)》请在金锄头文库上搜索。
1、我们在用 c 语言 编程 时往往第一行就是头文件, 51 单片机 为 reg51.h 或reg52.h,51 单片机相对来说比较简单,头文件里面内容不多,像飞思卡尔、 ARM系列的单片机头文件往往内容就非常多, 尽管如此, 对一些初次接触单片机的朋友来说, 51 的头文件还是搞不太清楚,今天具体来说明一下。1) “ 文件包含 ” 处理概念所谓 “ 文件包含 ” 是指在一个文件内将另外一个文件的内容全部包含进来。因为被包含的文件中的一些定义和命令使用的频率很高, 几乎每个程序中都可能要用到, 为了提高编程效率,减少编程人员的重得劳动,将这些定义和命令单独组成一个文件 , 如 reg51.h ,然
2、后用 #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 语言的关键字
3、,而是 Keil 为能直接访问 80C51 中的 SFR 而提供了一个新的关键词,其用法是: sfr 特殊功能寄存器名 =地址值 ( 注意 对于头文件里“特殊功能寄存器名”,用户实际上也可以修改的,如 = x80, 也可改为 = x80, 但 sfr 和地址值则不能更改,否者会编译出错。 ) sbit 表示位的意思,它也是非标准 C 语言的关键字,编写程序时如需操作寄存器的某一位(可位寻址的寄存器才能用)时,需定义一个位变量,此时就要要到 sbit ,如 sbit deng=P10, sbit EA = 0xAF; 需要注意的是,位定义时有些特殊, 用法有三种 :第一种方法: sbit 位变量
4、名寄存器位地址值第二种方法: sbit 位变量名 SFR 名称 寄存器位值()第三种方法: sbit 位变量名 SFR 地址值 寄存器位值如 :sbit IT0=0x88 ( 1)说明: 0x88 是 IT0 的位地址值sbit deng=P12 ( 2)说明:其中 P1 必须先用 sfr 定义好sbit EA=0xA87 ( 3)说明: 0xA8 就是 IE 寄存器的地址值以上三种定义方法需 注意的是 IT0 deng EA 可由用户随便定义,但必须满足 C语言对变量名的定义规则。除些外其它的则必须按照上面的格式写,如 “ 名称 变量位地址值 ”中“ ”,它是由 keil 软件的规定的 ,不
5、能写成其它的,只能这样能才编译通过。以上是对寄存器地址和位地址的定义和声明作了解释, 大家需要牢牢记住: 只有对寄存器及相关位进行声明地址后,我们才能对其进行赋相关的值, keil软件才能编译通过。至于说为什么,这可能一句话两句话也说不清楚。3)内存、 SFR 、位、地址等的通俗解释前面讲到了寄存器 地址 和 位 地址 (前提能位寻址)声明的目的是为告诉 C编译器相应寄存器及其位在内存中的地址,这样我们对寄存器及一些位赋的 变量和数值才能正确保存,然后才能供 CPU正确的调用,完成相应的功能。上段文字出现了寄存器( SFR)、 位, 地址、 内存等,单片机学习过程中还会出现 ROM、RAM等名
6、词,可能大家觉得不是很好理解,这里可以通俗的解释一下,如下面三个图所示。我们把 内存比作宾馆 , ROM、 RAM、 SFR相当于 宾馆里具体的有三种不同功能 楼层 (具体这个宾馆多少层即多少 ROM、 RAM、 SFR,视各个宾馆或者每种 单片机 而不同),每层 8 个房间相当于 8 位 , 每个房间 要么住男人要么住女人 相当于每位 要么放入数字 1 要么放入数字 0,keil 编译器 就相当于 宾馆 的工作人员 , 旅客去住旅馆相当写程序的过程 ,住 宾馆 的人必须事先要给工作人员说你是哪一层哪一个房间 (即声明寄存器地址和位地址, ) 宾馆工作人员才能把你带到你的房间里去(这里假设这个
7、宾馆可以由旅客自己决定住哪个房间) 。 即:只有对寄存器及相关位进行声明地址后, 我们才能对其进行赋相关的值,keil 软件才能编译通过。4) REG51.H头文件原文及解释打开 reg51.h 可以看到这样的一些内容 (此文件一般在 C:KEILC51INC下 ,INC 文件夹根目录里有不少头文件, 并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。如果我们要使用自己写的头文件,使用的时候只需把对应头文件拷贝到 INC 文件夹里就可以了。)下面附出头文件的原文,并把注释文件一并附后。/*-REG51.HHeader file for generic 80C51 and 80C3
8、1 microcontroller.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved. -*/#ifndef _REG51_H_#define _REG51_H_/* BYTE Register */sfr P0 = 0x80; /三态双向 IO 口 P0 口 此句话的意思是: 特殊功能寄存器 地址为 x80 , 可位寻址 , 下同/低 8 位地址总线 /数据总线(一般不用而只作普通 / 口,注意作 / 口用时,硬件上需接上接 电阻 )sfr P1 = 0x90; /准
9、双向 IO 口 P1 口sfr P2 = 0xA0; /准双向 IO 口 P2 口/高 8 位地址总线,一般也作普通 /用sfr P3 = 0xB0; /双功能/1.准双向 IO 口 P3 口/2. P30 RXD 串行数据接受/ P31 TXD 串行数据发送/ P32 外部中断 0 信号申请/ P33 外部中断 1 信号申请/ P34 定时 /计数器 T0 外部计数脉冲输入/ P35 定时 /计数器 T1 外部计数脉冲输入/ P36 WR 片外 RAM 写脉冲信号输入/ P37 RD 片外 ram 读脉冲信号输入sfr PSW = 0xD0; / 可以位寻址(语言 编程 时可不考虑此寄存器)
10、/ 程序状态寄存器 Program Status WORD (程序状态信息)/psw.7(CY) 进位标志/psw.6(AC) 辅助进位标志位低四位向高四位进位或借位时 AC=1/ 主要用于十进制调整/psw.5(F0) 用户可自定义的程序标志位/psw.4(RS1)/psw.3(RS0)/ 工作寄存器选择位/ 任一时刻只有一组寄存器在工作/0 0 0 区 00H07H /0 1 1 区 08H0fH/1 0 2 区 10H17H/1 1 3 区 18H1FH/psw.2(OV) 溢出标志位/psw.1( ) 保留为 ,不可使用/psw.0(P) 奇偶校验位sfr ACC = 0xE0; /
11、累加器 A 特殊功能寄存器 可位寻址sfr B = 0xF0; / 寄存器 B 主要用于乘除运算sfr SP = 0x81; / 堆栈指针寄存器 SP 存放站定栈顶地址、sfr DPL = 0x82; /sfr DPH = 0x83; / 数据指针寄存器 DPTR、 /对片外 RAM 及扩展 IO 进行存取用的地址指针sfr PCON = 0x87; /电源控制寄存器 、不能位寻址/ 管理单片机的电源部分包括上电复位、掉电模式、空闲模式等/ 单片机 复位时 PCON 被全部清 0, 编程 时一般是用到位,其它的一般不用/D7 SMOD 该位与串口通信波特率有关/SMOD=0 串口方式 1 2
12、3 波特率正常/SMOD=1 串口方式 1 2 3 波特率加倍sfr TCON = 0x88; /定时器 /计数器 控制寄存器 可以位寻址/D7 TF1 定时器 1 溢出标志位/D6 TR1 定时器 1 运行控制位/D5 TF0 定时器 0 溢出标志位/D4 TR0 定时器 0 运行控制位/D3 IE1 外部中断 1 请求标志/D2 IT1 外部中断 1 触发方式选择位/D1 IE0 外部中断 0 请求 标志/D0 IT0 外部中断 0 触发方式选择位sfr TMOD = 0x89; /定时器 /计数器 工作方式寄存器 不能位寻址/ 确定工作方式和功能/D7 GATE 门控制位/GATE=0
13、;定时器 /计数器由 TRX ( x=0 , 1)来控制/GATE=1 ;定时器 /计数器由 TRX ( x=0 , 1)/ 和外部中断引脚( init0 , 1)来共同控制/D6 C/T 定时器、计数器选择位/ 0 选择定时器模式/ 1 选择计数器模式/D5 M1 /D4 M0/M1 M0 工作方式/0 0 方式 0 13 位定时器 /计数器/0 1 方式 1 16 位定时器 /计数器/1 0 方式 2 8 位自动重装定时器 /计数器/1 1 方式 3 仅适用 T0 分成两个 8 位计数器, T1 停止计数/D3 GATE 门控制位/GATE=0 ;定时器 /计数器由 TRX ( x=0 , 1)来控制/GATE=1 ;定时器 /计数器由 TRX ( x=0 , 1)/ 和外部中断引脚( init0 , 1)来共同控制/D2 C/T 定时器、计数器选择位/0 选择定时器模式/1 选择计数器模式/D1 M1 /D0 M0/ M1 M0 工作方式/ 0 0 方式 0 13 位定时器 /计数器/