2024年4月10日发(作者:沙文君)
51单片机C语言头文件及其使用
2007-05-29 16:33
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚
至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这样的问
题,看过本文后,就会明白。其实这个是在头文件中用sfr定义的,现在定义好了
的是这样的sfr P1 = 0x90;,也就是说,到底大写,还是小写,就是在这里面
决定的。这就说明,如果你要用小写,就得在头文件中改为小写。其实它都是为
了编程序方便才这样写的,在程序编译时,就会变成相应的地址(如P1就变成
了0x90)。
还有一点就是,现在有很多改进型的单片机,它们有很多新增的特殊功能寄
存器在标准的reg51.h或reg52.h中没有定义,这就需要自己加进头文件(相关
厂家已经把它们定义好了),当然也可以直接在程序中定义。下面是一个标准的
C51头文件:
(此文件一般在C:KEILC51INC下 ,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
sbit OV
sbit P
/*
sbit TF1
sbit TR1
sbit TF0
sbit TR0
sbit IE1
sbit IT1
sbit IE0
sbit IT0
/*
sbit EA
sbit ET2
sbit ES
sbit ET1
sbit EX1
sbit ET0
sbit EX0
/*
sbit PT2
sbit PS
sbit PT1
sbit PX1
sbit PT0
sbit PX0
/*
sbit RD
sbit WR
sbit T1
= PSW^3;
= PSW^2;
= PSW^0; //8052 only
*/
= TCON^7;
= TCON^6;
= TCON^5;
= TCON^4;
= TCON^3;
= TCON^2;
= TCON^1;
= TCON^0;
*/
= IE^7;
= IE^5; //8052 only
= IE^4;
= IE^3;
= IE^2;
= IE^1;
= IE^0;
*/
= IP^5;
= IP^4;
= IP^3;
= IP^2;
= IP^1;
= IP^0;
*/
= P3^7;
= P3^6;
= P3^5;
TCON
IE
IP
P3
2024年4月10日发(作者:沙文君)
51单片机C语言头文件及其使用
2007-05-29 16:33
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚
至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这样的问
题,看过本文后,就会明白。其实这个是在头文件中用sfr定义的,现在定义好了
的是这样的sfr P1 = 0x90;,也就是说,到底大写,还是小写,就是在这里面
决定的。这就说明,如果你要用小写,就得在头文件中改为小写。其实它都是为
了编程序方便才这样写的,在程序编译时,就会变成相应的地址(如P1就变成
了0x90)。
还有一点就是,现在有很多改进型的单片机,它们有很多新增的特殊功能寄
存器在标准的reg51.h或reg52.h中没有定义,这就需要自己加进头文件(相关
厂家已经把它们定义好了),当然也可以直接在程序中定义。下面是一个标准的
C51头文件:
(此文件一般在C:KEILC51INC下 ,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
sbit OV
sbit P
/*
sbit TF1
sbit TR1
sbit TF0
sbit TR0
sbit IE1
sbit IT1
sbit IE0
sbit IT0
/*
sbit EA
sbit ET2
sbit ES
sbit ET1
sbit EX1
sbit ET0
sbit EX0
/*
sbit PT2
sbit PS
sbit PT1
sbit PX1
sbit PT0
sbit PX0
/*
sbit RD
sbit WR
sbit T1
= PSW^3;
= PSW^2;
= PSW^0; //8052 only
*/
= TCON^7;
= TCON^6;
= TCON^5;
= TCON^4;
= TCON^3;
= TCON^2;
= TCON^1;
= TCON^0;
*/
= IE^7;
= IE^5; //8052 only
= IE^4;
= IE^3;
= IE^2;
= IE^1;
= IE^0;
*/
= IP^5;
= IP^4;
= IP^3;
= IP^2;
= IP^1;
= IP^0;
*/
= P3^7;
= P3^6;
= P3^5;
TCON
IE
IP
P3