Keil_C51中C语言编程的头文件包含方法
- 格式:pdf
- 大小:3.00 MB
- 文档页数:7
51单片机C语言头文件及其使用2007-05-29 16:33很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这样的问题,看过本文后,就会明白。
其实这个是在头文件中用sfr定义的,现在定义好了的是这样的sfr P1 = 0x90;,也就是说,到底大写,还是小写,就是在这里面决定的。
这就说明,如果你要用小写,就得在头文件中改为小写。
其实它都是为了编程序方便才这样写的,在程序编译时,就会变成相应的地址(如P1就变成了0x90)。
还有一点就是,现在有很多改进型的单片机,它们有很多新增的特殊功能寄存器在标准的reg51.h或reg52.h中没有定义,这就需要自己加进头文件(相关厂家已经把它们定义好了),当然也可以直接在程序中定义。
下面是一个标准的C51头文件:(此文件一般在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;/* 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 onlysbit 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 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 onlysbit 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中没有定义,这就需要自己加进头文件(相关厂家已经把它们定义好了),当然也可以直接在程序中定义。
C51常用头文件C51常用头文件1.字符处理函数本类别函数用于对单个字符进行处理,包括字符的类别测试和字符的大小写转换头文件 ctype.h函数列表<>函数类别函数用途详细说明字符测试是否字母和数字 isalnum是否字母 isalpha是否控制字符 iscntrl是否数字 isdigit是否可显示字符(除空格外) isgraph是否可显示字符(包括空格) isprint是否既不是空格,又不是字母和数字的可显示字符 ispunct是否空格 isspace是否大写字母 isupper是否16进制数字(0-9,A-F)字符 isxdigit字符大小写转换函数转换为大写字母 toupper转换为小写字母 tolower2.地区化本类别的函数用于处理不同国家的语言差异。
头文件 local.h函数列表函数类别函数用途详细说明地区控制地区设置 setlocale数字格式约定查询国家的货币、日期、时间等的格式转换localeconv3.数学函数本分类给出了各种数学计算函数,必须提醒的是ANSI C标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51)头文件 math.h函数列表函数类别函数用途详细说明错误条件处理定义域错误(函数的输入参数值不在规定的范围内)值域错误(函数的返回值不在规定的范围内)三角函数反余弦 acos反正弦 asin反正切 atan反正切2 atan2余弦 cos正弦 sin正切 tan双曲函数双曲余弦 cosh双曲正弦 sinh双曲正切 tanh指数和对数指数函数 exp指数分解函数 frexp乘积指数函数 fdexp自然对数 log以10为底的对数 log10浮点数分解函数 modf幂函数幂函数 pow平方根函数 sqrt整数截断,绝对值和求余数函数求下限接近整数 ceil绝对值 fabs求上限接近整数 floor求余数 fmod4.本分类函数用于实现在不同底函数之间直接跳转代码。
keilC中嵌入汇编程序的方法1. C语言中直接嵌入汇编程序段1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:#pragma ASM; Assembler Code Here#pragma ENDASM2、在Project 窗口中包含汇编代码的C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;3、根据选择的编译模式,把相应的库文件(如Small 模式时,是Keil\C51\Lib\C51S.Lib)加入工程中, 该文件必须作为工程的最后文件;4、这点也是本人要重要说明的!即一定要将c:\keil\C51下的STARTUP.A51文件加入项目4、编译,即可生成目标代码。
来个实例吧:#i ncludevoid main(void){P2=1;#pragma asmMOV R7,#10DEL:MOV R6,#20DJNZ R6,$DJNZ R7,DEL#pragma endasmP2=0;}2 . 无参数传递的函数调用C51调用汇编函数1.无参数传递的函数调用先来个例子:其中example.c和example.a51为项目中的两个文件***********************example.c***************************** ******************extern void delay100();main(){delay100;}***********************example.a51*************************** ********************PR?DELAY100 SEGMENT CODE; // 在程序存储区中定义段PUBLIC DELAY100; //声明函数RSEG ?PR?DELAY100; //函数可被连接器放置在任何地方DELAY100:MOV R7,#10DEL:MOV R6,#20DJNZ R6,$DJNZ R7,DELRETEND在example.c文件中,先声明外部函数,然后直接在main中调用即可。
intrins.h在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便.内部函数描述_crol_ 字符循环左移_cror_ 字符循环右移_irol_ 整数循环左移_iror_ 整数循环右移_lrol_ 长整数循环左移_lror_ 长整数循环右移_nop_ 空操作8051 NOP 指令_testbit_ 测试并清零位8051 JBC 指令函数名: _crol_,_irol_,_lrol_原 型: unsigned char _crol_(unsigned char val,unsigned char n);unsigned int _irol_(unsigned int val,unsigned char n);unsigned int _lrol_(unsigned int val,unsigned char n);举例:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_testbit_: 相当于JBC bitvar测试该位变量并跳转同时清除。
_chkfloat_: 测试并返回源点数状态。
就是汇编中的子函数。
_crol_,_cror_:如国二进制数为01010101 那么_crol_(1) 左移1位后将高位补低位。
结果10101010。
功 能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。
例:#include <intrins.h>main(){unsigned int y;C-5 1 程序设计 37y=0x00ff;y=_irol_(y,4);}函数名: _cror_,_iror_,_lror_原 型: unsigned char _cror_(unsigned char val,unsigned char n);unsigned int _iror_(unsigned int val,unsigned char n);unsigned int _lror_(unsigned int val,unsigned char n);功 能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令相关,上面几个函数不同于参数类型。
Keil C51中C语言编程的头文件包含方法一、首先摘抄一写keil官方网站的说明,了解其系统自带的头文件在哪里及如何预处理。
1、译文:主页/µVision4用户手册文件夹结构主页»关于µVision»文件夹结构安装程序复制开发工具到基础文件夹的子文件夹。
默认的基础文件夹包含:C:\Keil。
下面的表格列出了所有uVision开发工具的文件夹结构。
安装结果可能根据您安装的产品和组件有所变化。
译文:C51开发工具(为经典8051和其扩展种类)文件夹内容C:\KEIL\C51\ASM Assembler Source Template and Include files for the Macro Assembler.C:\KEIL\C51\BIN Executable files of theµVision/C51toolchain.C:\KEIL\C51\Examples Example programs.C:\KEIL\C51\FlashMon Configuration files for Flash Monitor and pre-configured versions.C:\KEIL\C51\HLP Online documentation forµVision/C51.C:\KEIL\C51\INC为C编译器的包含文件C:\KEIL\C51\ISD51Files for ISD51In-System Debugger and pre-configured versions.C:\KEIL\C51\LIB Run-time libraries and CPU startup files.C:\KEIL\C51\Mon51Configuration files for Monitor-51(for Classic8051Devices).C:\KEIL\C51\Mon390Configuration files for Monitor-390(for Dallas Contiguous Mode).C:\KEIL\C51\RtxTiny2RTX51Tiny Version2Real-Time Operation System.2、译文:头文件主页»预处理器»头文件头文件或包含文件被预处理器包含和处理。
在Keil中使用#include指令来包含头文件,其用法如下:
```c
#include "header.h"
```
这里的"header.h"就是需要包含的头文件的名称。
您也可以使用尖括号<>来包含标准库的头文件,如下所示:
```c
#include <stdio.h>
```
这将包含标准输入输出库的头文件。
注意,当使用#include指令时,Keil会搜索其默认的头文件路径来找到相应的头文件。
如果您需要包含的头文件不在默认路径中,您需要使用相对路径或绝对路径来指定头文件的路径。
例如:
```c
#include "myfolder/myheader.h"
```
这将包含位于"myfolder"目录下的"myheader.h"头文件。
此外,您还可以使用条件编译指令#ifdef和#ifndef来根据特定条件包含头文件。
例如:
```c
#ifdef DEBUG
#include "debug.h"
#endif
```
这将仅在定义了DEBUG宏时包含"debug.h"头文件。
C51中头文件的写法一、头文件位置#include ; 优先在系统默认路径查找头文件#include“xxx.h”有现在项目路径查找头文件二、#ifndef和#endif通常形式为#ifndef _xxxx_h_#define _xxxx_h_.........(头文件具体内容)#endif这样的写法表示,如果_xxxx_h_还没有被定义,那么头文件内容将被执行,如果已经定义过了,那么头文件内容就不执行了。
作用在于,如果某头文件被不同c文件同时调用,那么里面的内容不至于因为重复定义而出错,因为不管调用几次头文件,其内容只有在第一次出现时被执行,同时定义一个_xxxx_h_,以后再次调用时,头文件内容被忽略。
三、函数和宏假设有如下文件 main.caaa.caaa.h其中,,aaa.c里面有一个宏X,一个函数Y,且函数Y 中使用了Xaaa.h里面申明了函数Ymain.c里包含了aaa.h文件,调用了函数Y,但没有定义宏X那么,编译时不会出错,这表示,函数Y中出现宏X 时,它会在自身所在的c文件,即aaa.c里面查找宏变化1:如上情况不变,但是在main.c里面将整个函数Y重新写一遍编译出错,提示 “error C202: 'X': undefined identifier”说明此时函数Y在main.c文件中找不到宏X,因此提示为未定义的符号变化2:将aaa.c中的宏剪切到main.c,其余情况不变编译出错,同样提示“error C202: 'X': undefined identifier”结论:函数中如果出现宏,那么该函数能且只能在其自身所在的c文件中查找该宏,如果二者不在同个c 文件,必然出错。
51单片机c语言教程在本教程中,我们将学习如何在51单片机上使用C语言进行编程。
无论您是初学者还是有一定经验的开发者,本教程都将对您有所帮助。
首先,我们需要了解一些基本概念。
51单片机是一种基于哈弗微电子公司的MCS-51架构的微控制器。
它采用了Harvard结构,即将程序存储器和数据存储器分开。
它具有各种功能和接口,可以满足不同的应用需求。
在使用C语言进行51单片机编程之前,必须安装相应的开发工具。
这里我们推荐使用Keil C51开发环境。
安装完成后,我们就可以开始编写第一个程序了。
#include <reg51.h>void main(){// 在这里编写您的代码}以上是一个简单的C语言程序模板。
我们使用了reg51.h头文件,该文件包含了与51单片机相关的寄存器定义和常量。
接下来,我们可以开始编写具体的功能代码了。
例如,如果我们想要在LED灯上闪烁一个简单的模式,可以使用以下代码:#include <reg51.h>sbit LED = P1^0;void main(){while(1){LED = 0; // 点亮LEDdelay(1000); // 延时1秒LED = 1; // 熄灭LEDdelay(1000); // 延时1秒}}在这个程序中,我们首先定义了一个LED的控制引脚,然后通过循环实现了闪烁的功能。
在每次循环中,我们先点亮LED,然后通过调用延时函数延时1秒,再将LED熄灭,再次延时1秒。
这样就形成了一个简单的LED闪烁效果。
除了控制IO口外,51单片机还可以实现其他各种功能,如定时器、串口通信等。
这些功能的实现也都可以通过C语言来完成。
希望通过本教程,您可以对51单片机的C语言编程有一个基本的了解。
在以后的学习中,您可以深入研究这些知识,并通过实践来提升自己的能力。
祝您学习愉快!。
单片机答案第1章思考题及习题1参考答案一、填空1. 除了单片机这一名称之外,单片机还可称为或。
答:微控制器,嵌入式控制器.2.单片机与普通微型计算机的不同之处在于其将、、和三部分,通过内部连接在一起,集成于一块芯片上。
答:CPU、存储器、I/O口、总线3. AT89S51单片机工作频率上限为 MHz。
答:24MHz。
4. 专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低和提高。
答:成本,可靠性。
二、单选1. 单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便B.受器件的物理性能限制C.为了通用性D.为了提高运算速度答:B2. 在家用电器中使用单片机应属于微计算机的。
A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用答: B3. 下面的哪一项应用,不属于单片机的应用范围。
A.工业控制 B.家用电器的控制 C.数据库管理 D.汽车电子设备答:C三、判断对错1. STC系列单片机是8051内核的单片机。
对2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、11个中断源、1个定时器(且具有捕捉功能)。
对3. 单片机是一种CPU。
错4. AT89S52单片机是微处理器。
错5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能。
对6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。
对7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。
对8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。
对第2章思考题及习题2参考答案一、填空1. 在AT89S51单片机中,如果采用6MHz晶振,一个机器周期为。
答:2µs2. AT89S51单片机的机器周期等于个时钟振荡周期。
Keil C51中C语言编程的头文件包含方法
一、首先摘抄一写keil官方网站的说明,了解其系统自带的头文件在哪里及如何预处理。
1、
译文:主页/µVision4用户手册
文件夹结构
主页»关于µVision»文件夹结构
安装程序复制开发工具到基础文件夹的子文件夹。
默认的基础文件夹包含:C:\Keil。
下面的表格列出了所有uVision开发工具的文件夹结构。
安装结果可能根据您安装的产品和组件有所变化。
译文:C51开发工具(为经典8051和其扩展种类)
文件夹内容
C:\KEIL\C51\ASM Assembler Source Template and Include files for the Macro Assembler.
C:\KEIL\C51\BIN Executable files of theµVision/C51toolchain.
C:\KEIL\C51\Examples Example programs.
C:\KEIL\C51\FlashMon Configuration files for Flash Monitor and pre-configured versions.
C:\KEIL\C51\HLP Online documentation forµVision/C51.
C:\KEIL\C51\INC为C编译器的包含文件
C:\KEIL\C51\ISD51Files for ISD51In-System Debugger and pre-configured versions.
C:\KEIL\C51\LIB Run-time libraries and CPU startup files.
C:\KEIL\C51\Mon51Configuration files for Monitor-51(for Classic8051Devices).
C:\KEIL\C51\Mon390Configuration files for Monitor-390(for Dallas Contiguous Mode).
C:\KEIL\C51\RtxTiny2RTX51Tiny Version2Real-Time Operation System.
2、
译文:头文件
主页»预处理器»头文件
头文件或包含文件被预处理器包含和处理。
它们为你提供了一个方便的方式去声明全局变量、函数原型、声明限制、和宏定义,这些通常在大型的开发工作中贯通始终使用。
#include指令指定要半含的头文件的名字。
3、
#include
主页»预处理器»预处理器指令»#include
#include指令使得C预处理器在编译中包含指定文件的内容,然后继续处理当前文件剩下的内容。
#include指令可能用于指定两种类型的头(或包含)文件:系统头文件和用户头文件。
系统头文件如下被包含:
#include<filename>
这些包含文件被包含在\INC\文件夹下。
它们是keil开发工具的一部分,且不应该被修改。
当一个系统头文件被指定,编译器从下列文件夹按序搜索。
∙INCDIR指令指定的路径。
∙C51INC环境变量指定的路径.
用户头文件如下被包含:
#include"filename"
这些包含文件是用户创建的,可能存在于电脑的任何位置。
当一个用户头文件被指定,编译器按照如下次序搜索文件夹:∙当前文件夹。
∙源文件夹。
∙INCDIR指令指定的路径。
∙C51INC环境变量指定的路径.
注意:
∙包含文件常常有一个.H的后缀表明它们是头文件。
我们推荐你为你的用户头文件使用这套标准。
∙通常,包含文件仅包含变量声明(而不是定义)、宏定义,特殊功能寄存器(Special Function Registers)定义.
∙包含文件可能包含变量定义。
然而,你必须确保这样的头文件只包含在你工程的一个C文件里。
否则,重复的相同名称的变量可能会被定义,从而导致连接器错误。
我们推荐你不要在包含文件里面定义变量或者函数。
∙可能一个函数开始或者结束在一个包含文件内。
还有可能把函数和变量定义放置在包含文件内。
由于这样的事情可能发生,它们非常混乱,不是养成良好的编写代码习惯。
所以,我们不推荐你这样做。
参考Header Files如何在C程序中使用包含文件的完整说明。
二、实例(以STC单片机为例)
1、使用STC-ISP软件,添加MCU型号到keil。
2、打开keil安装目录,找到INC文件夹,里面查找是否有STC文件夹,正常会出现。
如图:
3、修改STC文件夹内各个头文件内容,添加防止重复包含的语句,主要就是每个文件前加入判断,文件结束加入结束判断。
每个文件都要保证有这几句,可以防止重复包含。
4、在keil编辑界面,编写包含语句。
如下:
5、设置头文件包含路径。
在工程视图浏览窗口,右键点击工程名,选择options,再点击C51标签。
设置路径。
如下:
完成!
编者:LuWenjun
燕山大学
2013年8月16日星期五。