前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单片机c51头文件的解释

单片机c51头文件的解释

作者头像
黑泽君
发布2018-10-12 10:33:24
2.4K0
发布2018-10-12 10:33:24
举报
文章被收录于专栏:黑泽君的专栏

#include <reg51.h>是 c51(用于单片机开发的一种c语言)的头文件。   类似于头文件 AT89X51.h。   这两个头文件基本是一样的,只是在使用时对位的定义不一样,   at89x51.h 文件中对 P1.1的操作是写成 P1_1;   reg51.h 文件中的操作则写成 P1^1。

打开 reg51.h 可以看到这样的一些内容:   此文件一般在 C:\KEIL\C51\INC 下 ,INC 文件夹根目录里有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。   如果我们要使用自己写的头文件,使用的时候只需把对应头文件拷贝到 INC 文件夹里就可以了。

  sfr 并非标准C语言的关键字,而是 Keil 为能直接访问 80C51 中的 SFR 而提供了一个新的关键词,其用法是:sfrt 变量名=地址值。   符号 P1_0 来表示 P1.0 引脚。   在C语言里,如果直接写 P1.0,C编译器并不能识别,而且 P1.0 也不是一个合法的语言变量名,所以得给它另起一个名字,这里起的名为 P1_0, 可是 P1_0 是不是就是 P1.0呢?   你这么认为,C 编译器可不这么认为,所以必须给它们建立联系,这里使用了 Keil C 的关键字 sbit 来定义,

sbit 的用法有三种:   第一种方法:sbit 位变量名=地址值   第二种方法:sbit 位变量名=SFR 名称^变量位地址值   第三种方法:sbit 位变量名=SFR 地址值^变量位地址值 如定义 PSW 中的 OV 可以用以下三种方法:   sbit OV=0xd2 (1)说明:0xd2 是 OV 的位地址值   sbit OV=PSW^2 (2)说明:其中 PSW 必须先用 sfr 定义好   sbit OV=0xD0^2 (3)说明:0xD0 就是 PSW 的地址值 因此这里用 sfr P1_0=P1^0;就是定义用符号 P1_0 来表示 P1.0 引脚,如果你愿意也可以起 P10 一类的名字,只要下面程序中也随之更改就行了。

1)“文件包含”处理概念   所谓“文件包含”是指在一个文件内将另外一个文件的内容全部包含进来。因为被包含的文件中的一些定义和命令使用的频率很高,几乎每个程序中都可能要用到,为了提高编程效率,减少编程人员的重得劳动,将这些定义和命令单独组成一个文件,如 reg51.h 然后用#include<reg51.h>包含进来就可以了,这个就相当于工业上的标准零件,拿来直接用就可以了。

2)寄存器地址及位地址声明的原因   reg51.h 里面主要是一些特殊功能寄存器的地址声明,对可以位寻址的,还包括一些位地址的声明,如果如 sfr P1=0x80; sfr IE=0xA8; sbit EA=0xAF 等。   sfr P1 = 0x90 这句话表示:P1 口所对应的特殊功能寄存器,P1在内存中的地址为0x90。   sbit EA=0xAF 这句话表示:EA 这一位的地址为 0xAF。   程序状态寄存器 Program Status WORD=PSW (程序状态信息)

3)内存、SFR、位、地址等的通俗解释   前面讲到了寄存器地址和位地址(前提能位寻址)声明的目的是为告诉 C 编译器相应寄存器及其位在内存中的地址,这样我们对寄存器及一些位赋的变量和数值才能正确保存, 然后才能供 CPU 正确的调用,完成相应的功能。上段文字出现了寄存器(SFR)、位、地址、内存等,单片机学习过程中还会出现ROM、RAM 等名词,可能大家觉得不是很好理解,这里可以通俗的解释一下。   我们把内存比作宾馆,ROM、RAM、SFR 相当于宾馆里具体的有三种不同功能楼层(具体这个宾馆多少层即多少 ROM、RAM、SFR,视各个宾馆或者每种单片机而不同),每层 8个房间相当于8位,每个房间要么住男人要么住女人相当于每位要么放入数字1要么放入数字0,keil 编译器就相当于宾馆的工作人员,旅客去住旅馆相当写程序的过程,住宾馆的人必须事先要给工作人员说你是哪一层哪一个房间(即声明寄存器地址和位地址,)宾馆工作人员才能把你带到你的房间里去(这里假设这个宾馆可以由旅客自己决定住哪个房间)。 即:只有对寄存器及相关位进行声明地址后,我们才能对其进行赋相关的值,keil 软件才能编译通过。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档