文档详情

单片机中用编程时头文件解析.ppt

发布:2016-12-07约字共10页下载文档
文本预览下载声明
* 单片机中用c编程时头文件解析 #includeat89x52.h /*包含库函数 */ 单片机中用c编程时头文件reg51.h及reg52.h解析 我们在用c语言编程是往往第一行就是reg52.h或者其他的自定义头文件,我们怎么样来理解呢? 1)“文件包含”处理。 程序的第一行是一个“文件包含”处理。 所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来。程序中包含at89x52.h 文件的目的是为了要使用P1 (还有其他更多的符号)这个符号,即通知C 编译器,程序中所写的P1 是指80C51 单片机的P1 端口而不是其它变量。这是如何做到的呢? 打开reg51.h 可以看到这样的一些内容: (此文件一般在C:/KEIL/C51/INC下 ,INC文件夹根目录里有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。如果我们要使用自己写的头文件,使用的时候只需把对应头文件拷贝到INC文件夹里就可以了。) #ifndef __AT89X52_H__ #define __AT89X52_H__ sfr P0= 0x80; 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 P1= 0x90; sfr SCON= 0x98; sfr SBUF= 0x99; sfr P2 = 0xA0; sfr IE= 0xA8; sfr P3 = 0xB0; sfr IP = 0xB8; sfr T2CON= 0xC8; sfr T2MOD= 0xC9; sfr RCAP2L= 0xCA; sfr RCAP2H= 0xCB; sfr TL2= 0xCC; sfr TH2= 0xCD; sfr PSW= 0xD0; sfr ACC= 0xE0; sfr B = 0xF0; 2)特殊功能寄存器定义(sfr): sfrt 变量名=地址值 这里都是一些符号的定义,即规定符号名与地址的对应关系。 这样定义后,在C程序中可直接用变量名来代替寄存器地址进行各种操作和赋值。如:P0=num[i] | 0x80; IE=0x8a; sfr P0 = 0x90;这样的一行,即定义P0 与地址0x80 对应,P0 口的地址就是0x80,(0x80 是C 语言中十六进制数的写法,相当于汇编语言中写80H)。 sfr 并非标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新的关键词,其用法是: sfrt 变量名=地址值。 sbit P0_0 = 0x80; sbit P0_1 = 0x81; sbit P0_2 = 0x82; sbit P0_3 = 0x83; 2)位或引脚的定义 sbit P0_0 = P0^0; sbit P0_1 = P0^1; sbit P0_0 = 0x80^0; sbit P0_1 = 0x80^1; 在C 语言里,如果直接写P1.0,C 编译器并不能识别,而且P1.0 也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0 是不是就是P1.0呢?你这么认为,C 编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C的关键字sbit 来定义, sbit 的用法有三种: 第一种方法:sbit 位变量名=地址值 第二种方法:sbit 位变量名=SFR 名称^变量位地址值 第三种方法:sbit 位变量名=SFR 地址值^变量位地址值 或 sbit P0_0 = 0x80; sbit P0_1 = 0x81; sbit P0_2 = 0x82; sbit P0_3 = 0x83; sbit P0_4 = 0x84; sbit P0_5 = 0x85; sbit P0_6 = 0x86; sbit P0_7 = 0x87; sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; sbit P1_3 = 0x93; sbit P1_4 = 0x94; sbit P1_5 = 0x95; sbit P1_6 = 0x96; sbit P1_7 = 0x97; sbit P3_0 = 0xB0; sbit P3_1 = 0xB1; sbit P3_2 = 0xB2; sbit P3_3 = 0
显示全部
相似文档