很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的

sfr P1  = 0x90;

  也就是说,到底大写,还是小写,就是在这里面决定的。这就说明,如果你要用小写,就得在头文件中改为小写。其实它都是为了编程序方便才这样写的,在程序编译时,就会变成相应的地址(如P1就变成了0x90)。

  下面是一个标准的C51头文件REG52.H:

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

/*         BYTE Registers         */
sfr P0           = 0x80;
sfr P1           = 0x90;
sfr P2           = 0xA0;
sfr P3           = 0xB0;
sfr PSW          = 0xD0;
sfr ACC          = 0xE0;
sfr B            = 0xF0;
sfr SP           = 0x81;
sfr DPL          = 0x82;
sfr DPH          = 0x83;
sfr PCON         = 0x87;
sfr TCON         = 0x88;
sfr TMOD         = 0x89;
sfr TL0          = 0x8A;
sfr TL1          = 0x8B;
sfr TH0          = 0x8C;
sfr TH1          = 0x8D;
sfr IE           = 0xA8;
sfr IP           = 0xB8;
sfr SCON         = 0x98;
sfr SBUF         = 0x99;

/*         8052 Extensions         */
sfr T2CON         = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2           = 0xCC;
sfr TH2           = 0xCD;

/*         BIT Registers         */
/*         PSW         */
sbit CY           = PSW^7;
sbit AC           = PSW^6;
sbit F0           = PSW^5;
sbit RS1          = PSW^4;
sbit RS0          = PSW^3;
sbit OV           = PSW^2;
sbit P            = PSW^0; //8052 only

/*         TCON         */
sbit TF1          = TCON^7;
sbit TR1          = TCON^6;
sbit TF0          = TCON^5;
sbit TR0          = TCON^4;
sbit IE1          = TCON^3;
sbit IT1          = TCON^2;
sbit IE0          = TCON^1;
sbit IT0          = TCON^0;

/*         IE         */
sbit EA           = IE^7;
sbit ET2          = IE^5; //8052 only
sbit ES           = IE^4;
sbit ET1          = IE^3;
sbit EX1          = IE^2;
sbit ET0          = IE^1;
sbit EX0          = IE^0;

/*         IP         */
sbit PT2          = IP^5;
sbit PS           = IP^4;
sbit PT1          = IP^3;
sbit PX1          = IP^2;
sbit PT0          = IP^1;
sbit PX0          = IP^0;

/*         P3         */
sbit RD            = P3^7;
sbit WR           = P3^6;
sbit T1            = P3^5;
sbit T0            = P3^4;
sbit INT1         = P3^3;
sbit INT0         = P3^2;
sbit TXD          = P3^1;
sbit RXD          = P3^0;

/*         SCON         */
sbit SM0          = SCON^7;
sbit SM1          = SCON^6;
sbit SM2          = SCON^5;
sbit REN          = SCON^4;
sbit TB8          = SCON^3;
sbit RB8          = SCON^2;
sbit TI           = SCON^1;
sbit RI           = SCON^0;

/*         P1         */
sbit T2EX         = P1^1; // 8052 only
sbit T2           = P1^0; // 8052 only
             
/*         T2CON         */
sbit TF2           = T2CON^7;
sbit EXF2          = T2CON^6;
sbit RCLK          = T2CON^5;
sbit TCLK          = T2CON^4;
sbit EXEN2         = T2CON^3;
sbit TR2           = T2CON^2;
sbit C_T2          = T2CON^1;
sbit CP_RL2 = T2CON^0;

 

还有一点就是,现在有很多改进型的单片机,它们有很多新增的特殊功能寄存器在标准的reg51.h或reg52.h中没有定义,这就需要自己加进头文件(相关厂家已经把它们定义好了),当然也可以直接在程序中定义。

如STC传统51单片机,要使用新增的特殊功能寄存器要include头文件<stcmcu.h>,具体定义如下:

http://space.ednchina.com/Upload/2009/4/8/aef22653-a6aa-42ed-9019-8ffe4f074c6e.rar

sfr AUXR = 0x8e;

sfr AUXR1 = 0xa2;

sfr P4 = 0xe8;

sfr XICON = 0xc0;

sfr IPH = 0xb7;

sfr WDT_CONTR = 0xe1;

sfr ISP_DATA = 0xe2;

sfr ISP_ADDRH = 0xe3;

sfr ISP_ADDRL = 0xe4;

sfr ISP_CMD = 0xe5;

sfr ISP_TRIG = 0xe6;

sfr ISP_CONTR = 0xe7;

sbit PX3 = XICON^7;

sbit EX3 = XICON^6;

sbit IE3 = XICON^5;

sbit IT3 = XICON^4;

sbit PX2 = XICON^3;

sbit EX2 = XICON^2;

sbit IE2 = XICON^1;

sbit IT2 = XICON^0;

头文件 STC12C5A60S2系列双串口1T 8051单片机

头文件 STC12C5A60AD系列高速1T 8051单片机

头文件 STC12C5201AD系列高速1T 8051单片机

头文件 STC11F60XE高速总线系列1T 8051单片机

头文件 STC10F08XE高速总线系列1T 8051单片机

参考资料:

1)51单片机C语言头文件及其使用——徐学军单片机工作室

http://hi.baidu.com/xxjmcu/blog/item/6f77308dc53bf013b31bbaa7.html/cmtid/6aaaf78f561073e7f01f36a7

2)单片机中用c编程时头文件reg51.h及reg52.h解析

http://blog.csdn.net/benben85/archive/2009/03/03/3951522.aspx

51单片机C语言学习笔记6:51单片机C语言头文件及其使用的更多相关文章

  1. 51单片机C语言学习笔记8:单片机C51编程规范

    1.单片机C51编程规范- 前言  为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范. 2.单片机C51编程规范-范围 本标准规定了程序设计人员进行程序设计时必须遵循的规范.本 ...

  2. c语言学习笔记(1)——c语言的特点

    一.c语言概述 1.为什么学习c语言? (1)c的起源和发展 第一代语言:机器语言  1101 第二代语言:汇编语言  add ax,bx; 第三代语言:高级语言  a+b; 结构化:c fortra ...

  3. Haskell语言学习笔记(51)Comonad

    Comonad class Functor w => Comonad w where extract :: w a -> a duplicate :: w a -> w (w a) ...

  4. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  5. R语言学习笔记(十五):获取文件和目录信息

    file.info() 参数是表示文件名称的字符串向量,函数会给出每个文件的大小.创建时间.是否为目录等信息. > file.info("z.txt") size isdir ...

  6. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  7. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  8. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  9. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

随机推荐

  1. 3D效果导航代码

    *, *:before, *:after { padding:; margin:; box-sizing: border-box; } .menu { list-style: none; width: ...

  2. 你需要知道的九大排序算法【Python实现】之插入排序

    三.插入排序 基本思想:插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算 ...

  3. Mac下phpstorm 浏览器出现 502 bad gateway 解决办法

    问题: 在网上搜了好久,都没有合适的解决办法,于是决定分享下自己鼓捣好久解决了的办法,希望能帮到大家. 出现上述情况,一般在phpstorm里都会出现这个提示 我们只需要点击蓝色的进去,或者点phps ...

  4. BitmapFactory.decodeByteArray() 返回null,分析与解决

    问题描述:用android自带的Camera获取图片,上传至远程数据库中(mysql),以BLOB格式存储, 但在提取图片时,始终无法在android界面显示,示例代码如下: .....  .... ...

  5. CSS3之渐变Gradient

    渐变是CSS3中比较好玩的属性,学会了渐变,那么可以做出非常炫的东东哟.CSS3 中渐变——Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). ...

  6. Android学习笔记(十一)——从意图返回结果

    从意图返回结果 startActivity()方法调用还有一个活动,但并没有返回结果给当前活动.此时如想从一个活动中回传数据,就要使用startActivityForResult()方法. 点此获取完 ...

  7. PowerDesigner 生成带凝视SQL 各个版本号通用10(12、15)

    做数据库是设计时最苦恼的事就是用PowerDesigner工具设计完数据库运行SQL文件后没有凝视.那么怎么才干让PowerDesigner设计完有凝视呢,下边教你一个笨的方法,方法尽管笨,可是能实现 ...

  8. linux系统中中断已连接的用户

    1.用w命令查看当前系统登录的用户 [root@rhel7 ~]# w :: up :, users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOG ...

  9. 一个好用的Python备份mysql的脚本

    前几天打算用Python写一个mysql脚本,上Google看了下老外写的,写的挺好的,原地址在http://tecadmin.net/python-script-for-mysql-database ...

  10. SqlServer 查看数据库锁,解除锁,此种情况一般常见都是由于事务所造成

    检查数据库锁 SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableNameFROM sys.dm ...