<meta name="keywords" content="必胜时时彩开户,keywords" /> 51单片机头文件reg51.h详解 联系我们

51单片机头文件reg51.h详解

我们在用c语言编程经经常第一行就是头文件,51单片机为reg51.h或reg52.h,51单片机相对来讲较量质朴,头文件外面内容不多,像飞思卡尔、ARM系列的单片机头文件经常内容就异常多,虽然云云,对一些首次接触单片机的同伙来讲,51的头文件照样弄不太清晰,明天详细来诠释一下。
       1
文件网罗处置赏罚赏罚看法

 

所谓文件网罗是指在一个文件内将另外一个文件的内容一切网罗出去。由于被网罗的文件中的一些界说和敕令应用的频率很高,简直每个法式模范模范中都能够要用到,为了前进编程效力,增添编程职员的重得歇息,将这些界说和敕令伶仃组成一个文件,如reg51.h,然后用#include<reg51.h>网罗出去便可以了,这个就相当于工业上的尺度零件,拿来直接用便可以了。
     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=0x80,也可改成A1=0x80,但sfr  和地址值则不克不及更改,否者会编译掉落足。)
   sbit 体现位的意思,它也是非尺度C 语言的要害字,编写法式模范模范时如需操作存放器的某一名(可位寻址的存放器才干用)时,需界说一个位变量,此时就要要到sbit,如sbit deng=P1^0,sbit EA   = 0xAF;须要重视的是,位界说时有些特殊, 用法有三种

第一种措施:sbit 位变量名=存放器位地址值

第二种措施:sbit 位变量名=SFR 称谓^存放器位值(0-7)

第三种措施:sbit 位变量名=SFR 地址值^存放器位值

如:

sbit IT0=0x88 1)诠释:0x88IT0 的位地址值

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软件才干编译经由历程。
 


 
 

 
 

 
 

 

4)REG51.H头文件原文及诠释
   掀开reg51.h 可以看到这样的一些内容(此文件浅易在C:\KEIL\C51\INC ,INC文件夹根目录里有许多头文件,而且外面尚有许多以公司分类的文件夹,外面也都是相关产物的头文件。假定我们要应用自己写的头文件,应用的时间只需把对应头文件拷贝到INC文件夹里便可以了。)

    下面附出头文件的原文,并把注释文件一并附后。 


/*--------------------------------------------------------------------------

 

REG51.H

 

Header file for generic 80C51 and 80C31 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口 此句话的意思是:特殊功效存放器 P0 地址为0x80 ,可位寻址,下同

                          //8位地址总线/数据总线(浅易不用而只作浅易I/O口,重视作I/O口用时,硬件上需接上接电阻)

sfr P1   = 0x90;   //准双向       IO      P1

 


sfr P2   = 0xA0;   //
准双向  IO      P2

                          //8位地址总线,浅易也作浅易I/O用

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; // 可以位寻址(C语言编程时可不推敲此存放器)

                            //法式模范模范状态存放器Program Status WORD  (法式模范模范状态信息)

                            //psw.7(CY)    进位标志

                            //psw.6(AC)赞助进位标志位低四位向高四位进位或借位时   AC=1

                            //主要用于十进制调剂

                            //psw.5(F0)用户可自界说的法式模范模范标志位

                           //psw.4(RS1)

                            //psw.3(RS0)

                            //使命存放器选择位

                            //任一时间只需一组存放器在使命

                            //0 0  0     00H~07H

                            //0 1   1     08H~0fH

                            //1 0   2     10H~17H

                            //1 1   3     18H~1FH

                            //psw.2(OV)    溢出标志位

                            //psw.1(   )      生涯为 ,弗成应用

                            //psw.0(P)              奇偶校验位

 

sfr ACC  = 0xE0;     //累加器A     特殊功效存放器    可位寻址

sfr B    = 0xF0;        //存放器B      主要用于乘除运算

sfr SP   = 0x81;       //客栈指针存放器SP    存放站定栈顶地址、

sfr DPL  = 0x82;      //

sfr DPH  = 0x83;     //数据指针存放器DPTR、//对片外RAM及扩年夜IO阻拦存取用的地址指针

 

sfr PCON = 0x87; //电源控制存放器  、不克不及位寻址             

                           //治理单片机的电源部门网罗上电复位、掉落落电形式、余暇形式等

                           //单片机复位时PCON被一切清0,编程时浅易是用到SMOD位,其它的浅易不用

                          //D7 SMOD该位与串口通讯波特率有关

                          //SMOD=0     串口要领1 2 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;准时器/计数器由TRXx=01)来控制

                            //GATE=1;准时器/计数器由TRXx=01

                            //和外部中止引脚(init01)来合营控制

                            //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;准时器/计数器由TRXx=01)来控制

                            //GATE=1;准时器/计数器由TRXx=01

                            //和外部中止引脚(init01)来合营控制

                            //D2  C/T             准时器、计数器选择位

                            //0  选择准时器形式

                            //1   选择计数器形式

                            //D1       M1        

                            //D0       M0

                            //     M1 M0         使命要领

                            //     0     0     要领0     13位准时器/计数器

                            //     0     1     要领1   16位准时器/计数器

                            //     1     0     要领2   8位自动重装准时器/计数器

                            //     1     1     要领3   仅适用T0      分红两个8位计数器,T1阻拦计数

 

sfr TL0  = 0x8A;    //准时器/计数器08     容器   1 计数器

sfr TL1  = 0x8B;    //准时器/计数器18     容器

sfr TH0  = 0x8C;    //准时器/计数器08     容器

sfr TH1  = 0x8D;    //准时器/计数器18     容器

 

 

 

sfr IE   = 0xA8;                 //中止允许存放器          可以位寻址

                                          //D7  EA         全局中止允许位

                                          //D6       NULL

                                          //D5       ET2        准时器/计数器2中止允许位     interrupt 5

 

                                          //D4  ES          串行口中止允许位        interrupt 4

 

                                          //D3  ET1        准时器/计数器1中止允许位     interrupt 3

 

                                          //D2  EX1        外部中止1中止允许位      interrupt 2

 

                                           //D1  ET0        准时器/计数器0中止允许位  interrupt 1

 

                                           //D0  EX0        外部中止0中止允许位     interrupt 0

  

sfr IP   = 0xB8;        //中止优先级存放器   可阻拦位寻址

                             //D7 NULL

                                //D6 NULL

                                 //D5       NULL

                                                 //D4       PS          串行口中止界说优先级控制位

                                                 //            1            串行口中止界说为高优先级中止

                                                 //            0            串行口中止界说为低优先级中止

                                                 //         

                                                 //D3       PT1       

                                                 //            1     准时器/计数器1中止界说为高优先级中止

                                                 //            0     准时器/计数器1中止界说为低优先级中止

                                                 //D2 PX1

                                                 //            1            外部中止1界说为高优先级中止

                                                 //            0          外部中止1界说为低优先级中止

                                                 //D1       PT0       

                                                 //            1     准时器/计数器0中止界说为高优先级中止

                                                 //            0     准时器/计数器0中止界说为低优先级中止

                                                 //D0 PX0

                                                 //            1            外部中止0界说为高优先级中止

                                                 //            0          外部中止0界说为低优先级中止

 

 

 

sfr SCON = 0x98;   //串行口控制存放器     可以阻拦位寻址          

                              //D7   SM0             

                               //D6       SM1

                               //     SM0      SM1              串行口使命要领

                               //     0           0            同步移位存放器要领

                             //     0         1            10位异步收发(8位数据),波特率可变(准时器1溢出率控制)

                               //   1         0            11位异步收发(9位数据),波特率结实

                               //     1         1            11异步收发(9位数据)  ,波特率可变(准时器1溢出率控制)

                               //D5       SM2            多机通讯控制位    主要用于要领2和要领3

                               //D4       REN            允许串行吸收位

 

                               //D3       TB8        要领23中发送数据的第9

                               //D2       RB8      要领23中吸收数据的第9

 

                               //D1       TI           发送中止标志位

                              //D0       RI         吸收中止标志位

 

 

sfr SBUF = 0x99;    //串行数据缓冲区

 

/*****************************************************************************

                                                        下面是位寻址区

                                          下面做过诠释的就不不才面逐一说清晰了了

******************************************************************************/

/*  BIT Register  */    

/*  PSW   */

sbit CY   = 0xD7;

sbit AC   = 0xD6;

sbit F0   = 0xD5;

sbit RS1  = 0xD4;

sbit RS0  = 0xD3;

sbit OV   = 0xD2;

sbit P    = 0xD0;

 

/*  TCON  */

sbit TF1  = 0x8F;

sbit TR1  = 0x8E;

sbit TF0  = 0x8D;

sbit TR0  = 0x8C;

sbit IE1  = 0x8B;

sbit IT1  = 0x8A;

sbit IE0  = 0x89;

sbit IT0  = 0x88;

 

/*  IE   */

sbit EA   = 0xAF;

sbit ES   = 0xAC;

sbit ET1  = 0xAB;

sbit EX1  = 0xAA;

sbit ET0  = 0xA9;

sbit EX0  = 0xA8;

 

/*  IP   */

sbit PS   = 0xBC;

sbit PT1  = 0xBB;

sbit PX1  = 0xBA;

sbit PT0  = 0xB9;

sbit PX0  = 0xB8;

 

/*  P3  */

sbit RD   = 0xB7;

sbit WR   = 0xB6;

sbit T1   = 0xB5;

sbit T0   = 0xB4;

sbit INT1 = 0xB3;

sbit INT0 = 0xB2;

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;

 

#endif