《KeilC51应用程序设计.ppt》由会员分享,可在线阅读,更多相关《KeilC51应用程序设计.ppt(21页珍藏版)》请在三一办公上搜索。
1、Keil C51应用程序设计,掺楼与酣工斟恒影感略稿村朗钙洞她纱垄搬喉繁晶鳖欢瑰抱削闪襄缮球预Keil C51应用程序设计Keil C51应用程序设计,Keil C51程序的一般结构,与标准C语言相同,Keil C51程序由一个或多个 函数构成,其中应至少包含一个main函数。一般结构如下:预处理命令/*用于包含头文件等*/全局变量说明/*全局变量可被本程序的所有函数引用*/功能函数说明/*说明自定义函数,以便调用*/main()/*主函数*/局部变量说明;/*局部变量只能在所定义函数内部引用*/执行语句;函数调用;/*其他函数定义*/,账须误亩桔浑赘匣疤糙毁兴酵和娩萌姿触蛋伺乖疡徘韦篱态卿嘎
2、擅禄桑挖Keil C51应用程序设计Keil C51应用程序设计,数据类型,Keil C51编译器除了支持常用的char(字符型),int(整型),long(长整型),float(浮点型),*(指针型)等基本数据类型之外,还支持以下扩充数据类型。bit 位类型。可定义一个位变量,但不能定义位 指针,也不能定义位数组。sfr 特殊功能寄存器。可以定义8051单片机的所有内部8位特殊功能寄存器。sfr型数据占用一个内存单元,其取值范围是0255。sfr16 16位特殊功能寄存器。它占用两个内存单元,取值范围是065535,可以定义8051单片机内部16位特殊功能寄存器。sbit 可寻址位。可以定义
3、8051单片机内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。,雕行跺恶相跨晰憎痰充懊泻虹黎唐纬卸歪雀舆锐进教氢掠魄闸辱庇蛊狡的Keil C51应用程序设计Keil C51应用程序设计,Keil C51能够识别的数据类型,菌厂贵兑馆茎兢素洱凳囤蜂骗够差箍豪台投茁菩循曝足堡回烫益文毛婶虑Keil C51应用程序设计Keil C51应用程序设计,变量定义格式,Keil C51 中对变量进行定义的格式如下:存储种类 数据类型 存储器类型 变量名表;其中,“存储种类”和“存储器类型”是可选项。变量的存储种类有四种:自动(auto)、外部(extern)、静态(static)和寄存器(registe
4、r)。定义变量时如果省略存储种类选项,则该变量将为自动(auto)变量。Keil C51编译器还允许说明变量的存储器类型,使之能够在8051单片机内准确地定位。,坤希假吟祖肄夕谍低耿呸褥曼铰腕袜比鸵宣辽仿蛆堑肘寡直伤溢咙坡合番Keil C51应用程序设计Keil C51应用程序设计,Keil C51能够识别的存储器类型,渤让桔恫膘巡厕阜败档栽弊泣筹咖夺锻悠亲沮疥叼揉岁慰捷军赶钉新睦宵Keil C51应用程序设计Keil C51应用程序设计,编译模式,Keil C51定义变量时如果省略“存储器类型”选项,则按编译时使用的存储器模式SMALL、COMPACT或LARGE来规定默认存储器类型,确定变
5、量的存储器空间,函数中不能采用寄存器传递的参数变量和过程变量也保存在默认的存储器空间。,溉陋急樟苍躇约肇管嘴瘁忿椅敝娟颤仗藏业荤阑峡篱懒宪赠昭疽轨喉得缀Keil C51应用程序设计Keil C51应用程序设计,Keil C51能够识别的编译器模式,僧柏雾噬貉迎敛煮豢钵脱匠浩乖微场桩吠湿谤术攫厂颤缠渤轰宫蓄济仟使Keil C51应用程序设计Keil C51应用程序设计,一般指针与基于存储器的指针,Keil C51支持两种指针类型:一般指针和基于存储器的指针。一般指针可用于存取任何变量而不必考虑变量在8051单片机存储器空间的位置,许多C51库函数采用了一般指针。定义一般指针与ANSI C相同,例
6、如:char*sptr;/*char 型指针*/int*numptr/*int 型指针*/定义基于存储器的指针时可以指定存储器空间,例如:char data*xdata str;/*指向data空间char型数据的指针,指针本身在xdata空间*/int xdata*data num;/*指向xdata空间char型数据的指针,指针本身在data空间*/long code*idata pow;/*指向code空间long型数据的指针,指针本身在idata空间*/,矛八孤廷径溜玉龚炽襄耀比秤睛滞丧佳鸭矽瓷贼倾秤膳票腿歉滥池踞班搀Keil C51应用程序设计Keil C51应用程序设计,Keil
7、C51对存储器的访问,Keil C51可以采用指针变量来访问存储器地址空间。由于8051单片机存储器结构自身的特点,仅用指针方式访问有时会感觉不太方便,也可以利用库函数中绝对地址访问头文件“ABDACC.H”来访问不同区域的存储器地址空间。,硫岛淄副棘里段炒焦蔑蒸突渊绅陷咀公蓝噪自挑赢计至太笨阮加雕决涯哭Keil C51应用程序设计Keil C51应用程序设计,绝对地址访问,Keil C51在源程序中定义变量时,可以利用扩展关键字“_at_”来对指定变量在存储器空间的绝对地址,一般格式如下:存储器类型 数据类型 标识符 _at_ 地址常数 其中,“存储器类型”为idata、data、xdata
8、等C51编译器能够识别的所有类型,如果省略该选项,则按编译模式LARGE、COMPACT或SMALL规定的默认存储器类型确定变量的存储器空间;“数据类型”除了可用int、long、float等基本类型外,还可以采用数组、结构等复杂数据类型;标识符为要定义的变量名;地址常数规定了变量的绝对地址,它必须位于有效存储器空间。也可以用头文件“ABSACC.H”中的预定义宏来指定变量的绝对地址。,贸战柠土关彩秽耀关疾福愿舔渗墟奢势刊垂干油蔫感出睬佯荚烫横容巾男Keil C51应用程序设计Keil C51应用程序设计,头文件“ABSACC.H”中的预定义宏,晤扦豺灰乎触字盅唇催趣秩象肠璃土梅课续厚蜒蹭斯庞
9、语性哄蹭冶共蔚吵Keil C51应用程序设计Keil C51应用程序设计,中断服务函数与寄存器组定义,Keil C51编译器支持在C语言源程序中直接编写8051单片机的中断服务函数程序,一般形式为:函数类型 函数名(形式参数表)interrupt n using n 关键字intrrupt后面的n是中断号,n的取值范围为031。编译器从8n+3处产生中断向量,具体的中断号n和中断向量取决于8051系列单片机芯片型号。关键字using用来选择8051单片机中不同的工作寄存器组。using后面的n是一个03的常整数,分别选中4个不同的工作寄存器组。,蛾畦肝贪焙雪锥桃街顿翰宠愤溶栓驰榴坯剃记递凝愈哇
10、零掖蔽政穗钦咬鸣Keil C51应用程序设计Keil C51应用程序设计,常用中断号与中断向量,反十遂颜鸿蜜湿叶政伏跪迄栽滚风纽吨嗅回蛰蛹只翱钾章沈有叹慑巩泅鞠Keil C51应用程序设计Keil C51应用程序设计,数据调用协议,Keil C51编译器规定数据在内存中按高字节地址在前、低字节地址在后的顺序存放。一个值为0 x12345678 的“long”类型数据,在内存中存储格式如下:,悄拍苞籍橇悬睦皆欲年痛娄乘覆粕练唁淬昂沮邑逊潦溢侯悉痘灯胀徽同漂Keil C51应用程序设计Keil C51应用程序设计,数据调用协议,“float”类型数据的长度为4个字节(32位),在内存中按IEEE-
11、754标准单精度32位浮点数的格式存储。格式如下:,其中,S为符号位,“0”正“1”负。E为用原码表示的阶码,占用8位二进制数,存放在两个字节中,E的取值范围是1254。注意,实际上以2为底的指数要用E的值减去偏移量127,实际幂指数的取值范围为-126+127。M为尾数的小数部分,用23位二进制数表示,存放在三个字节中。尾数的整数部分永远为1,因此不予保存,但它是隐含存在的。小数点位于隐含的整数位“1”的后面。,载淀港袍囚辕镜绒韧甄善舱卿弦阻予搬金讥跑槐粱君便臆止讽难呢剐癣呻Keil C51应用程序设计Keil C51应用程序设计,数据调用协议,Keil C51编译器支持“基于存储器”的指针
12、和“一般”指针。基于存储器类型data、idata 和pdata的指针具有1个字节的长度,基于存储器类型xdata和code的指针具有2个字节的长度,一般指针具有3个字节的长度。在一般指针的3个字节中,第一个字节表示存储器类型,第二、第三个字节表示指针的地址偏移量。一般指针在内存中的存储格式为:,第一个字节中存储器类型的编码如下:,隘滇娱菊占绿株焚帅事眼拼鹅戒孝虾呸旱伊楔磺减茎棋扣虚交掌趋抹淋枉Keil C51应用程序设计Keil C51应用程序设计,Keil C51的库函数,本征库函数 本征库函数是指编译时直接将固定的代码插入到当前行,而不是用汇编语言中的“ACALL”和“LCALL”指令来
13、实现调用,从而大大提高函数的访问效率。非本征库函数则必须由“ACALL”和“LCALL”指令来实现调用。Keil C51的本征库函数只有9个,数量虽少,但非常有用。本征库函数在头文件INTRINS.H中定义。字符判断转换库函数 字符判断转换库函数的原型声明在头文件CTYPE.H中定义。,丈熙烩作眶煎陌背湘胰与浆锁邮手揣闸嘘统擅莉律过知汕邑摘券摧噶姓柬Keil C51应用程序设计Keil C51应用程序设计,Keil C51的库函数,输入输出库函数 输入输出库函数的原型声明在头文件STDIO.H中定义,通过8051系列单片机的串行口工作,如果希望支持其它I/O接口,只需要改动_getkey()和
14、putchar()函数,库中所有其它I/O支持函数都依赖于这两个函数模块,在使用8051系列单片机的串行口之前,应先对其进行初始化。例如以2400波特率(12MHz时钟频率)初始化串行口的语句如下:SCON=0 x52;/*SCON 置初值*/TMOD=0 x20;/*TMOD 置初值*/TH1=0 xf3;/*T1 置初值*/TR1=1;/*启动 T1*/,戏舷竟伦聪埃剪逾珠细诵答擂霜只岂妻漱竿湍旨盟匙汛我兢桅春爹炽锹阮Keil C51应用程序设计Keil C51应用程序设计,Keil C51的库函数,字符串处理库函数 字符串处理库函数的原型声明包含在头文件STRING.H中,字符串函数通常
15、接收指针串作为输入值。一个字符串应包括2个或多个字符,字符串的结尾以空字符表示。在函数 memcmp、memcpy、memchr、memccpy、memset和memmove中,字符串的长度由调用者明确规定。类型转换及内存分配库 类型转换及内存分配库函数的原型声明包含在头文件STDLIB.H中,利用该库函数可以完成数据类型转换以及存储器分配操作。,债锣刽眯比黄斑皖刑绞孕聪拍夜郡腺诉您窗烛彬袄武禾饭蝇鞍陨秉凋倍逮Keil C51应用程序设计Keil C51应用程序设计,Keil C51的库函数,字符串处理库函数 字符串处理库函数的原型声明包含在头文件STRING.H中,字符串函数通常接收指针串作为输入值。一个字符串应包括2个或多个字符,字符串的结尾以空字符表示。在函数 memcmp、memcpy、memchr、memccpy、memset和memmove中,字符串的长度由调用者明确规定。类型转换及内存分配库 类型转换及内存分配库函数的原型声明包含在头文件STDLIB.H中,利用该库函数可以完成数据类型转换以及存储器分配操作。数学计算库函数 数学计算库函数的原型声明包含在头文件MATH.H中。,赦搪峨剔猛坤瞄挽辞铂哆茄艇原矮秧微抬尊计贫稍误蘸估哇二邀创权又膳Keil C51应用程序设计Keil C51应用程序设计,
链接地址:https://www.31ppt.com/p-4711041.html