reg51.h头文件详解
更新时间:2023-07-20 19:29:01 阅读量: 实用文档 文档下载
“reg51.h”头文件详解
北方蓝芯科技()
我们在学习单片机时,在程序的开始都会包含一个头文件“reg51.h”,初学者一般都对该文件存在一些疑惑。例如在我们实验教程第一个实验“点亮 一个发光二极管”中,程序如下:
#include "reg51.h" //包含头文件
sbit led=P1^0; //表示用led等效于P1^0,
//P1^0就是指头文件里定义的P1寄存器的第 0 BIT void main() //主函数 {
led=0; //低电平驱动发光二极管
while(1) //进入while死循环 { } }
我们可以看到,程序的第一行便是一个“文件包含”处理。所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来,这个程序中包含REG51.h头文件的目的是为了要使用P1 这个符号,即通知C 编译器,程序中所写的P1 是指80C51 单片机的P1 端口而不是其它变量。这是为什么呢?我们可以将鼠标放到包含头文件这行,点击鼠标右键打开REG51.h文件,我们可以看到以下内容。
/* BYTE Register */ //特殊功能寄存器定义(字节) sfr P0 = 0x80; //P0口地址定义 sfr P1 = 0x90; //P1口地址定义 sfr P2 = 0xA0; //P2口地址定义 sfr P3 = 0xB0; //P3口地址定义
sfr PSW = 0xD0; //程序状态字,具体位意义见位定义 sfr ACC = 0xE0; //累加器,程序员最常用的 sfr B = 0xF0; //寄存器,主要用于乘除 sfr SP = 0x81; //堆栈指针,初始化为07;先加1后压栈,先出栈再减1, sfr DPL = 0x82; // DPTR寄存器的低八位 sfr DPH = 0x83; // DPTR寄存器的高八位
sfr PCON = 0x87; //电源控制寄存器,最高位为SMOD位 sfr TCON = 0x88; //Timer/Counter控制寄存器
sfr TMOD = 0x89; //Timer/Counter方式控制寄存器 sfr TL0 = 0x8A; //定时器0低8位 sfr TL1 = 0x8B; //定时器1低8位 sfr TH0 = 0x8C; //定时器0高8位 sfr TH1 = 0x8D; //定时器1高8位 sfr IE = 0xA8; //中断控制寄存器
sfr IP = 0xB8; //中断优先级控制寄存器
ww w.wwhrw.bnhrbcbn.cbcom.c/bombs
sfr SCON = 0x98; //串口控制寄存器 sfr SBUF = 0x99; //串口缓冲寄存器
/* BIT Register */ //位地址寄存器 /* PSW */
sbit CY = 0xD7; //进位或借位,有就是1,没有就是0 sbit AC = 0xD6; //辅助进借位
sbit F0 = 0xD5; //没有具体用途,可以由用户决定他的意义 sbit RS1 = 0xD4; //工作寄存器选择位 sbit RS0 = 0xD3; //工作寄存器选择位
sbit OV = 0xD2; //over!溢出,有是1,没有是0 sbit P = 0xD0; //奇偶校验,奇数个1是1
/* TCON */
sbit TF1 = 0x8F; //T1溢出中断申请标志 sbit TR1 = 0x8E; //Timer 1 running,
sbit TF0 = 0x8D; // T0溢出中断申请标志 sbit TR0 = 0x8C; //把上面两个1换成0 sbit IE1 = 0x8B; //外中断1请求标志 sbit IT1 = 0x8A; //外中断1触发方式 sbit IE0 = 0x89; //外中断0请求标志 sbit IT0 = 0x88; //外中断0触发方式
/* IE */
sbit EA = 0xAF; //使能全部中断 sbit ES = 0xAC; //串口中断使能位 sbit ET1 = 0xAB; //定时器1使能位 sbit EX1 = 0xAA; //外中断1使能位 sbit ET0 = 0xA9; //定时器0使能位 sbit EX0 = 0xA8; //外中断1使能位
/* IP */
sbit PS = 0xBC; //串行中断优先级 sbit PT1 = 0xBB; //T1优先级
sbit PX1 = 0xBA; //外部中断1优先级 sbit PT0 = 0xB9; // T0优先级
sbit PX0 = 0xB8; //外部中断0优先级
/* P3 */ //控制寄存器 sbit RD = 0xB7; //读 sbit WR = 0xB6; //写 sbit T1 = 0xB5; //T/C1 sbit T0 = 0xB4; //T/C0
sbit INT1 = 0xB3; //外中断1
ww w.wwhrw.bnhrbcbn.cbcom.c/bombs
sbit INT0 = 0xB2; //外中断0 sbit TXD = 0xB1; //串行发送 sbit RXD = 0xB0; //串行接收 /* SCON */
sbit SM0 = 0x9F; //
sbit SM1 = 0x9E; //串口工作方式
sbit SM2 = 0x9D; //什么鬼特征位,要用查书,或者等我以后解释,啊哈 sbit REN = 0x9C; //串行接收允许 sbit TB8 = 0x9B; //收到的第九位 sbit RB8 = 0x9A; //要发的第九位
sbit TI = 0x99; //哇,熟悉吧,发送完成中断标志 sbit RI = 0x98; //接收完成中断标志
当然,注释是加上去的,这里都是一些符号的定义,即规定符号名与地址的对应关系。下面理解一下sfr和sbit这两个符号:
1)sfr
注意到 sfr P0 = 0x80;
这一行,就是定义P0 与地址0x80 对应,P0 口的地址就是0x80
sfr 这个词并不是标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR(特殊功能寄存器) 而提供了一个新的关键词,其用法是:
sfrt 变量名=地址值。
2)sbit
注意到sbit EA = 0xAF; 这一行,就是定义EA与地址0xAF 对应,EA中断使能这一位的地址就是0xaf。 关于sbit,也不是标准的C关键字。而是Keil 为能直接访问80C51寄存器而提供了一个新的关键词,其用法是:
sbit X="A"^n。其中A是一个可位寻址的变量,而n表示该变量的第几位,而X就是一个位变量,它就是A中的第n位。这里的符号^已经不再是标准C语言中的异或操作符了,这里有它自己独特的意思,只能是这样的写法。
例如:sbit P15=P1^5; 就是定义用符号P15 来表示P1.5 引脚,如果你愿意也可以用其它名字,只要下面程序中也随之更改就行了。
另外,在培训过程中,发现有不少学生对上面定义存在这样一个疑惑,看下面两行
sfr SP = 0x81;
sbit P0_1 = 0x81; //P0^1=0x81;
这两行共用一个地址,岂不冲突了。 解答如下:
当然不会冲突,sfr跟sbit是两个不同的意义,sfr是给一个字节的地址起一个变量名,传给变量名的是该字节的首地址,如sfr P0=0x80,P0(8位IO口)已经代表了0x80到0x87整整8位的地址;而sbit定义的仅仅是一个位,如P0_1=0x80,P0_2=0x81 P0_7=0x87,他们是P0的具体表现,即是给0x80到0x87各起一个变量名。
ww w.wwhrw.bnhrbcbn.cbcom.c/bombs
编译器会根据sfr和sbit两个指令来分辨出0x80到底代表的是一个字节的首地址还是一个位。
举个通俗一点的例子:假设一果园有很多果树,编号分别从1-100,然后每棵果树上又有很多果子,果子编号也分别从1-100,这时,果树的编号为8和果子编号8一样吗?字节地址和位地址意思和这相似。
ww w.wwhrw.bnhrbcbn.cbcom.c/bombs
正在阅读:
reg51.h头文件详解07-20
环境评价—电子教案与讲义学习09-20
我学会了踢足球作文300字07-05
银行实习日记(优秀6篇)03-23
后危机时代的改革与发展研讨会暨第四届亚洲经济合作与创新论坛综述_叶德珠06-11
中国人民大学新闻与传播考研 招生人数 参考书 报录比 复试分数线 考研真题 考研经验 招生简章09-24
关于解决电梯质量问题消除安全隐患的函告01-10
XX年工信局局长民主生活会剖析发言材料07-10
说课大赛活动策划书11-14
采矿工程 论文12-05
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 详解
- 文件
- reg
- 51
- 尹盛ok开题报告1(音乐播放器)
- 人教版四年级下册语文主题丛书学习
- 对开发高职英语校本课程的几点思考
- 6.8余角和补角(浙教)
- 2014年普通高等学校招生全国统一考试文综政治(北京卷)
- 2013中考数学选择、填空压轴题精选
- 【精品】单片机设计自行车里程速度计
- 【备战2015】2015届高考地理 试题汇编 E1地壳物质循环
- 施工组织设计研究现状
- 教师健全人格及其塑造
- 珠海百强企业名录
- 幕墙和钢结构实测实量操作标准
- 2011全国教育学研究生考试真题及详解
- Large N gauge theories -- Numerical results
- 水利部预算项目储备管理暂行办法
- 轻叩诗歌的大门知识竞赛(实用)
- 文言语法知识全文
- 五年级上册综合实践活动教学计划
- 中煤九鑫捣固配煤炼焦技术浅析
- 微型计算机组装与维护试题与答案