keilc51特有的包文件名|keil c51的所有头文件其作用

keilc51特有的包文件名|keil c51的所有头文件其作用的第1张示图

1. keil c51 v95

Proteus6.94、95与keilC51联调设置方法1、将KeilC51(u2、u3均可)、Proteus6(94、95均可)都安装好;2、下载两个软件,一个是Proteu的Vdmagdi.exe,另一个是授权后的Prospice.dll(两个文件链接地址看下面)3、先运行Vdmagdi.exe安装Keil接口,然后将Prospice.dll覆盖在Proteus的安装文件夹下的Bin中如:D:\Program Files\Labcenter Electronics\Proteus 6 Professional\BIN;4、打开Proteus,在【菜单】【Debug】下拉菜单中选【User Remote Debug Monitor】(在该项前打勾);5、打开KeilC51,点击【菜单】【工程】【为目标'XX'设置选项】,在【调试】标签下选择右边的【使用U】单选,并在下拉框中选【Proteus VSM Simulator】仿真设备;6、在Proteus侧做好硬件连线,Keil侧写好软件,点击Keil【调试】【运行】,您可以欣赏联调了。proteus6.9 sp4与keil联调几点发现:在这里联调的一些基本操作就不再赘述了1,一定要把keil的工程和Proteus的文件放到同一个目录下(这里所说的Keil的工程指工程的目录, 即Proteus的工程Design文件(后缀名.DSN)要和包含Keil工程所有文件的那个文件夹在同一层目录下) ; 经过操作发现: Keil的工程目录文件夹一定要命名为keil(可能与路径设置有关,目前还不清 楚),否则proteus报错:Unable to open HEX file 'Keil\DS1302.hex'. keil报错: target dll has been cancelled debugger aborted!),另外 针对其他版本的联调,以上两点原则也要遵守2,6.9以上版本需要添加与Keil联调补丁Vdmagdi.exe,其作用就是添加在程序目录keil/c51/bin目录 下添加Vdm51.dll,(注意:与其他版本不同,6.9以上版本Proteus 6 Professional\MODELS\目录下没 有 VDM51.dll)并且修改keil目录下tools配置文件,添加两行文本:TDRV8=BIN\VDM51.DLL ("Proteus VSM Simulator") BOOK2=HLP\VDMAGDI.HLP ("Proteus VSM AGDI Driver"),经过实际 操作证明,不一定要安装补丁Vdmagdi.exe,手动操作也可成功实现联调功能,其中第二行非必需3,至于Proteus 6 Professional\BIN目录下Prospice.dll的作用,有网友说与授权有关,有网友说与授权有关,确有可能。默认安装的版本是早于2006.6.26的版本,好像是2006.6.17,替换时没记清,联调失败。当用 2006.6.26版本代替后,联调才成功,但是用更新的2006.8.18版本替换时,联调又会失败。

2. 关于KEIL C51的头文件的问题

头文件里一般不用来定义变量,只用来声明变量。你在这个头文件里定义的话,如果头文件被多次包含,编译时就会重复定义而出错的。好好加油咯。

3. KEIL C51在编辑单片机程序时,文件后缀名是什么

程序文件是.c,C语言的

4. keil c51的所有头文件,其作用。

我来回答你的问题吧,前几天对这个方面有一定的深入了解,也写下了大量的笔记 虽然C编程的时候,对于不同的芯片,有不同的头文件,但是,万变不离其宗。 只要学会了写自己的头文件,就可以应付各类型号单片机了,就算你用的是AT89C2052,还是AT89C51,STC12C等等,都可以用一个头文件reg51.h 不过要做相应的修。以下是我对reg51.h个人的见解:(对于你很有用的) 后面带上了在编写C51时带用的头文件,及其内部函数和宏定义的详细解说。 想了解如下方面的知识来来邮[email protected] 一, C51内存结构深度剖析 二, reg51.头文件剖析 三, 浅淡变量类型及其作用域 四, C51常用头文件 五, 浅谈中断 六, C51编译器的限制 七, 小淡C51指针////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// reg51.头文件剖析 我们平时写单片机应用程序的时候,所使用的头文件大多都是用的的reg51.h或是用reg52.h。会写C51的人都会用,但对其头文件内部的定义有所了解的人确并不多。下面对其内部做详细解释,方便读者作进一步的了解,并能运用各类型号的单片机。因为增强型号的单片机的增强功能都是通过特殊功能寄存器控制。 打开 reg52.h 头文件,会发现是由大量的 sfr ,sbit的声明组成,甚至于还有sfr16.其实这样的声明都是与单片机内部功能寄存器(特殊功能寄存器)联系起来的,下面对其做出详细解释sfr: 声明变量 SFR 声明一个变量,它的声明与其它的C变量声明基本相同,唯一的区别,SFR在声明的同时为其指定特殊功能寄存器作为存储地址,而不同于C变量声明的整型,字符型等等由编译器自动分配存储空间。 如reg52.h头文件,第一条声明就是sfr P0 = 0x80; 此处声明一个变量P0,并指定其存储地址为特殊功能寄存器0x80;,在加入reg52.h头文件后。编写应用程序时P0就可以直接使用而无需定义,对P0的操作就是,对内部特殊功能寄存器(0x80对应用MCU的P0口)的操作,可进行读写操作。如果将第一条声明改为sfr K0 = 0x80; 那么,如果要把单片机的P0口全部拉低,则不能写P0=0x00;而应保存后再在应用程序中写成K0=0x00;否则编译器会提示“P0为未定义标识符” 使用方法: sfr [variable] = [address] //为变量分配一个特殊功能寄存器。 1 等号右边,只能是十进制,十六进制整型的数据常量,,不允许带操作符的表达式 经典的8051内核支持的SFR地址从0x80H~0xFF 飞利浦80C51MX系列0x180H~0x1FF 2 SFR不能声明于任何函数内部,包括main函数。只能声明于函数外。 3 用SFR声明一个变量后,不能用取地址运算符&获取其地址, 编译无法通过,编译器会提示非法操作。 4 有一点须特别注意,51内核0x80~0xff,为特殊功能寄存器地址区间,但并不是所有的地址都有定义,如果说你所用的MCU芯片上对于某个地址没有定义,那么用sfr在定义变量的时候,不要把变量的地址分配到未定义的特殊功能寄存器上,虽然编译时能通过,用KEIL仿真时貌似是没有问题,但下载到芯片里运行时,是会出问题的。比如说,向一个未定义的特殊功能寄存器执行读操作,读出来的就是一个未知的数。(读者可自行测试,先把串口通信调通,然后做一个简单的人机交互。读出一个数后,再发给计算机,用串口调试助手或是串口监控查看。这用方法在仿真的时候很有用。)所以具体那些特殊功能寄存器能够用,就要查看你使用的芯片手册。5 若遇到增强性的单片机,只要知道其扩展的特殊功能寄存器的地址,用SFR定就可以很方便进行编程。sbit: 声明变量 sbit 同样是声明一个变量,和SFR 使用方法类似,但是SBIT是用来声明一个位变量,因为,在51系列的应用中,非常有必要对SFR的单个位进行存取,而通过bit 数据类型,使其具备位寻址功能。 如,在reg52.h中有如下声明 sfr IE = 0xA8; 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; 所以,对EA的操作即是对IE最高位的操作。但如果想让 SP DPL DPH PCON TMOC TL0 TL1 TH0 TH1 SBUF这些特殊功能寄存器具备位寻址,采用上述如IE类似的定义,是不行的,虽然修改后,在编译的时候不会出现错误,但只要用到你定义的位变量名时就会出错。原因是,只有特殊功能寄存器的地址是8的倍数(十六进制以0或8结尾)才能进行位寻址。 打开reg52.h头文件可以看到,所有用sbit声明了的特殊功能寄存器的地址均是以0或8结尾如硬要达到上述要求,可用带参的宏定义来完成。此处不做详细说明(意义并不大)。下面对sbit的使用做详细介绍:随着8051的应用,非常有必要对特殊功能寄存器的单个bit位进行存取,C51编译器通过sbit 数据类型,提供了对特殊功能寄存器的位操作。 以下是sbit的三种应用形式:一, sbit name = sfr-name^bit-position; sfr PSW =0xD0; sfr IE =0xA8; sbit OV= PSW^2; sbit CY=PSW^7; sbit EA= IE^7;二, sbit name= sft-address^bit-position; sbit OV =0xD0^2; sbit CY =0xD0^7; sbit EA =0xA8^7;三, sbit name= sbit-address; sbit OV =0xD2; sbit CY =0xD7; sbit EA =0xAF;现对上述三种形式的声明做必要的说明 第一种形式sbit name = sfr-name^bit-position;如sbit OV= PSW^2; 当中的这个特殊功能寄存器必须在此之前已经用sfr 定义,否则编译会出错。bit-position范围从0~7; 第二种形式 sbit name= sft-address^bit-position如sbit OV =0xD0^2; 与第一种形式不同之外在于,此处直接使用PSW的地址.第一种形式须先定义PSW 第三种形式. sbit name= sbit-address 如sbit OV =0xD2 是直接用的OV的地址OV的地址计算方式,是OV所在的寄存器地址加上OV的bit-position 注意: 不是所有的SFR都可位寻址。只有特殊功能寄存器的地址是8的倍数(十六进制以0或8结尾)才能进行位寻址,并且sbit声明的变量名,虽可以是任意取,但是最好不要以下划线开头,因为以下划线开头的都保留给了C51的头文件做保留字。sfr16: 声明变量 许多8051的派生型单片机,用两个连续地址的特殊功能寄存器,来存储一个16bit的值。例如,8052就用了0xCC和0xCD来保存定时/计数寄存器2的高字节和低字节。编译器提供sfr16这种数据类型,来保存两个字节的数据。虚拟出一个16bit的寄存器。 如下: sfr16 T2 = 0xCC 存储方面为小端存储方式,低字节在前,高字节在后。定义时,只写低字节地址,如上,则定义T2为一个16位的特殊功能寄存器。 T2L= 0CCh, T2H= 0CDh 使用方法: sfr [variable] = [low_address] 1 等号右边,只写两个特殊功能寄存器的低地址,且只能是十进制,十六进制的整型数据常量,不允许带操作符的表达式 2 SFR不能声明于任何函数内部,包括main函数。只能声明于函数外。 3 用SFR声明一个变量后,不能用取地址运算符&获取其地址, 编译无法通过,编译器会提示非法操作。 4 当你向一个sfr16写入数据的时候,KEIL CX51 编译器生成的代码,是先写高字节,后写低字节,(可通过返汇编窗口查看)在有些情况下,这并非我们所想要的操作顺序。使用时,须注意。 5 当你所要写入sfr16的数据,当是高字节先写还是低字节先写非常重要的时候,就只能用sfr 这个关键字来定义,并且任意时刻只保存一个字节,这样操作才能保证写入正确。//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////C51常用头文件在KEIL 中,对于单片机所使用的头文件,除了reg51 reg52以外,还有一些从各芯片制商的官网下载与reg51,reg52功能类似的头文件,需了解透外,还要对各类型单片机均可通用且相当有用的的头文件,做相应的了解。因为,内部所包含的函数与宏定义,可以及大的方便我们编写应用程序。1字符函数 ctype.h 1 extern bit isalpha(char); 功能:检查参数字符是否为英文字母,是则返回12 extern bit isalnum(char) 功能:检查字符是否为英文字母或数字字符,是则返回13 extern bit iscntrl(char) 功能:检查参数值是否在0x00~0x1f 之间或等于0x7f,是则返回14 extern bit isdigit(char) 功能: 检查参数是否为数字字符,是则返回15 extern bit isgraph(char) 功能: 检查参数值是否为可打印字符,是则返回1,可打印字符为0x21~0x7e6 extern bit isprint(char) 功能:除了与isgraph相同之外,还接受空格符0x207 extern bit ispunct(char) 功能:不做介绍。8 extern bit islower(char) 功能:检查参数字符的值是否为小写英文字母,是则返回19 extern bit isupper(char) 功能:检查参数字符的值是否为大写英文字母,是则返回110 extern bit isspace(char) 功能:检查字符是否为下列之一,空格,制表符,回车,换行,垂直制表符和送纸。如果为真则返回111 extern bit isxdigit(char) 功能:检查参数字符是否为16进制数字字符,是则返回112 extern char toint(char) 功能:将ASCII字符0~9 a~f(大小写无关)转换成对应的16进制数字,返回值00H~0FH13 extern char tolower(char) 功能:将大写字符转换成小写形式,如字符变量不在A~Z之间,则不作转换而直接返回该字符14 extern char toupper(char) 功能:将小写字符转换成大写形式,如字符变量不在a~z之间,则不作转换而直接返回该字符15 define toascii(c) ((c)&0x7f)功能:该宏将任何整形数值缩小到有效的ASCII范围之内,它将变量和0x7f相与从而去掉第7位以上的所有数位16 #define tolower(c) (c-‘A’+’a’)功能:该宏将字符与常数0x20 逐位相或17 #define toupper(c) ((c)-‘a’+’A’)功能:该宏将字符与常数0xdf 逐位相与2数学函数 math.hextern int abs (int val);extern char cabs (char val);extern long labs (long val);extern float fabs (float val);功能:返回绝对值。上面四个函数,除了形参和返回值不一样之外,其它功能完全相同。extern float exp (float val);extern float log (float val);extern float log10 (float val); 功能: exp 返回eval log 返回 val 的自然对数 log10 返回 以10为底,val的对数 extern float sqrt (float val); 功能: 返回val的正平方根 extern int rand(); extern void srand(int n); 功能: rand返回一个0到32767之间的伪随机数,srand用来将随机数发生器初始化成一个已知的(期望)值。 Keil uVision3中的math.h库中,不包含此函数。 extern float sin (float val);extern float cos (float val);extern float tan (float val); 功能: 返回val的正弦,余弦,正切值。val为弧度 fabs(var) <=65535extern float asin (float val);extern float acos (float val);extern float atan (float val);extern float atan2 (float y, float x); 功能: asin 返回val的反正弦值。acos 返回val的反余弦值。 atan 返回val的反正切值。 asin atan acos的值域均为 -π/2~+π/2 atan2返回x/y,的反正切值,其值域为-π~+πextern float sinh (float val);extern float cosh (float val);extern float tanh (float val); 功能:cosh返回var的双曲余弦值,sinh返回var的双曲正弦值, tanh返回var的双曲正切值。extern float ceil (float val); 功能: 向上取整,返回一个大于val的最小整数。extern float floor (float val); 功能: 向下取整,返回一个小于val的最大整数。extern float pow (float x, float y); 功能: 计算计算xy的值。当(x=0,y<=0)或(x<0.y不是整数)时会发生错误。extern void fpsave(struct FPBUF *p)extern void fprestore(struct FPBUF *p) 功能:fpsave 保存浮点了程序的状态,fprestore恢复浮点子程序的原始状态,当中断程序中需要执行浮点运算时,这两个函数是很有用的。 注: Keil uVision3中的math.h库中,不包含此函数。3绝对地址访问 absacc.h#define CBYTE ((unsigned char volatile code *) 0)#define DBYTE ((unsigned char volatile data *) 0)#define PBYTE ((unsigned char volatile pdata *) 0)#define XBYTE ((unsigned char volatile xdata *) 0) 功能:CBYTE 寻址 CODE区 DBYTE 寻址 DATA区 PBYTE 寻址 XDATA(低256)区 XBYTE 寻址 XDATA区 例: 如下指令在对外部存储器区域访问地址0x1000 xvar=XBYTE[0x1000]; XBYTE[0x1000]=20;#define CWORD ((unsigned int volatile code *) 0)#define DWORD ((unsigned int volatile data *) 0)#define PWORD ((unsigned int volatile pdata *) 0)#define XWORD ((unsigned int volatile xdata *) 0) 功能:与前面的一个宏相似,只是它们指定的数据类型为unsigned int .。 通过灵活运用不同的数据类型,所有的8051地址空间都是可以进行访问。 如DWORD[0x0004]=0x12F8;即内部数据存储器中(0x08)=0x12; (0x09)=0xF84 内部函数 intrins.h extern unsigned char _cror_ (unsigned char var, unsigned char n);extern unsigned int _iror_ (unsigned int var, unsigned char n);extern unsigned long _lror_ (unsigned long var, unsigned char n); 功能:将变量var 循环右移 n 位。上三个函数的区别在于,参数及返回值的类型不同extern unsigned char _crol_ (unsigned char var, unsigned char n);extern unsigned int _irol_ (unsigned int var, unsigned char n);extern unsigned long _lrol_ (unsigned long var, unsigned char n); 功能:将变量var 循环左移 n 位。上三个函数的区别在于,参数及返回值的类型不同 例如: #include<intrins.h> void main() { unsigned int y; y=0x0ff0; y=_irol_(y,4); //y=0xff00 y=_iror_(y,4); //y=0x0ff0}void _nop_(void); 功能:_nop_产生一个8051单片机的NOP指令,C51编译器在程序调用_nop_ 函数的地方,直接产生一条NOP指令。

5. KEIL软件下51汇编文件的后缀名有哪些

.asm.51.S 因为汇编源文件是纯文本的,所以只要输入时输入完整的扩展名,起什么都可以,但是作为惯例,使用.asm比较符合习惯。

6. keil c51的开发工具包

支持8051微控制器的PK51专业开发工具,支持所有的8051系列的芯片,包括那些具有扩展存储器和指令集的新设备(比如 Dallas 390/5240/400,Philips 51MX以及Analog Devices MicroConverters),经典设备以及具有IP核的设备,即来自以下公司的设备:Analog Devices,Atmel,Cypress Semiconctor, Dallas Semiconctor,Goal,Hynix,Infineon,Intel,NXP,OKI,Silicon Labs,SMSC,STMicroelectronics,Synopsis,TDK,Temic,Texas Instruments及Winbond。使用PK51专业开发套件,你可轻松访问8051系列的片上外设和其他关键功能。μVision集成开发环境调试器模拟器Keil扩展8051编译工具AX51 宏汇编器CX51 ANSI C 编译器LX51链接器/定位器OHX51 Object-HEX 转换器Keil经典8051编译工具A51 宏汇编器C51 ANSI C 编译器BL51 Code Banking 链接器/定位器OH51 Object -HEX转换器OC51 Banked Object 转换器目标调试器FlashMON51目标监控器MON51目标监控器MON390(Dallas 390)目标监控器MONADI(Analog Devices 812)目标监控器ISD51 In-System调试器RTX51小实时内核

7. 有关keil51的STARTUP.A51的问题

别用所谓的汉化版、并不是所有工程都必须使用用户自定义的startup.a51的。如果项目中没有,则Keil亦会通过库中的启动代码实现标准化的启动流程。

Keil C51是美国Keil Software公司(ARM公司之一)出品的51系列兼容单片机C语言软件开发系统。

与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

系统介绍:

支持8051微控制器体系结构的Keil开发工具,适合每个阶段的开发人员,不管是专业的应用工程师,还是刚学习嵌入式软件开发的学生。

Keil C51目前由ARM国内授权代理商提供技术支持和销售等相关服务。

产业标准的Keil C编译器、宏汇编器、调试器、实时内核、单板计算机和仿真器,支持所有的251系列微控制器,帮助你如期完成项目进度。

以下图表显示Keil的开发工具以及它们相互之间的接口。

8. 如何使用KeilC51创建一个工程文件

如何使用KeilC51创建一个工程文件建立一个项目: 点击工程菜单中选择弹出的下拉式菜单中的新建 工程…,接着弹出一个标准Windows文件对话窗口,在"文件名"中输入您的第一个程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。"保存"后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。这时会弹出让你选择单片机型号的对话框,我们选择ATMEL—AT89C51 然后点击Target 1前面的“+”,出现Source Group 1,选中右键点选“增加文件到组 Source Group 1”这时选择文件类型为Asm 源文件,再选中001.asm文件,再按添加,在随后出现的提示框中按“确定” 仿真器采用Mon51协议,在使用之前应必须对软件项目进行如下设置: 1、单击工程菜单,再在下拉菜单中单击"目标target 1属性" 在下图中,单击"Target"输入仿真器的工作频率(11.0592MHz)。 2、在调试菜单中点选"Keil Monitor-51 Driver",即选择了STC89C516RD硬件仿真器。 3、单击“R外围设备”选Target Setup设置选项选择您要使用串口(必须和实际相符合),波特率 38400。 如果被仿真的目标板使用12MHZ或者是11.0592MHZ晶振时波特率选择38400,如果被仿真的目标板使用6MHZ晶振时波特率选择18400。4、如果需要生成HEX代码给编程器烧写芯片的话,需要选中“生成 HEX 文件”的选项,按钮“选择OBJ文件夹…”是用来选择最终HEX文件的存放目录的。5、按F7快捷键可以进行编译,编译成功后如会出现上图红箭头所指的文字,表示编译成功! 然后可以进行硬件仿真了,将仿真器放入51单片机试验开发板的40脚活动插座中,这时仿真器的电源由实验开发板提供。现在按Ctrl+F5可以进入仿真,这时再按F5全速运行状态。 这时你会看到实验板开发板P1的八个红色LED,轮流点亮,表示运行成功,你可以查看相关的变量和参数,非常方便,这里我们完整演示一个汇编语言的仿真过程,其实KEIL C最擅长的还是C语言,建议有基础的网友尽量采用C语言。 当首次使用一新的工程调试时可能出现下面的界面,说明KEIL软件和仿真器之间通讯失败,原因是你尚未设定好串口及波特率。请按选Settings然后按下图设好串口(根据你的实际使用端口,以下假定为COM1)及波特率。 然后按F7,进行通讯连接,再按Ctrl+F5可以进入仿真,这时再按F5全速运行状态。

未经允许不得转载:山九号 » keilc51特有的包文件名|keil c51的所有头文件其作用

赞 (0)