- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C51程序设计
C51程序设计 §1 C51语言的特点及其程序结构 §2 一个简单的C51例子 §3 C51的数据定义 §4 C51的常量 运算符 表达式 基本语句 数组 §5 C51的函数 §6 用typedef重新定义数据类型的名称 §7 绝对地址访问 §8 C51程序设计举例 §1 C51语言的特点及其程序结构 一、C51语言的特点 1.语言简洁、紧凑,使用方便、灵活; 2.运算符极其丰富; 3.生成的目标代码质量高,程序执行效率高(比汇编语言编写程序低10%-20%); 4.可移植性好; 5.可以直接操作硬件。 C-51与ASM-51相比,有如下优点: 二、C的程序结构 #include main() {数据定义; 执行部分; } 函数类型 函数名(形参类型 形参名,…) {函数体} §2 一个简单的C51例子 例1 #include reg51.h //单片机特殊功能寄存器的说明 #includestdio.h //keil 提供的输入输出函数是通过8051的串行口来实现,若不是用串口来输入输出,则必须自己编写输入输出函数。 #includeintrins.h /*部分特殊指令说明*/ void main( void ){ P0=0x00; P1=0x01; P2=0x02; P3=0x03; //P0,P1,P2,P3已在reg51.h文件中说明 } §3 C51的数据定义 一、存储空间定义 表1 C51定义的存储器类型与存储空间 二、C51数据类型 常用的数据类型有: 1.bit:位型 int bdata ibase; char bdata bary[4]; sbit mybit0=ibase^0; //bit 0 of ibase sbit mybit15=ibase^15; sbit ary07=bary[0]^7; sbit ary37=bary[3]^7; 2.sfr:特殊功能寄存器 sfr P0=0x80; //P0口,address 80h 3.sfr16:16位特殊功能寄存器 sfr16 T2=0xCC; //T2L 0CCh, T2H 0CDh sfr16 RCAP2=0xCA; //RCAP2L 0Cah, RCAP2H 0CBh 4.sbit:可寻址位型 sfr PSW=0xD0; sbit CY=PSW^7; 例: 数据类型 存储类型 变量 char data var1; bit data flags; unsigned char xdata vextor[10]; §4 C51的常量、运算符、表达式、基本语句、数组 一、C51的常量 与标准C相同 二、C51常用运算符 与标准C基本一致 三、C51表达式 与标准C基本一致 四、C51的基本语句 与标准C基本一致 五、C51的数组 与标准C基本一致 §5 C51的函数 一、C51函数的定义 与标准C基本一致 二、中断服务函数与寄存器组的定义 1.一般形式: 函数类型 函数名(形式参数表)[interrupt n] [using n] interrupt 为关键字,n是中断号,是常量,取值范围为0-31。编译器从8n+3处产生中断向量 using 为关键字,专门用来选择8051单片机中不同的工作寄存器组。n取值范围为0-3,是常量。 2.关键字using对函数目标代码的影响如下: 在函数的入口处将当前工作寄存器组保护到堆栈中;指定的工作寄存器内容不会改变;函数返回之前将被保护的工作寄存器组从堆栈中恢复。 使用关键字using在函数中确定一个工作寄存器组时必须十分小心,要保证任何寄存器组的切换都只在控制的区域内发生。另外,带using属性的函数,原则上不能返回bit类型的值,并且不允许用于外部函数。 3.关键字interrupt也不允许用于外部函数,它对中断函数目标代码的影响如下: 在进入中断函数时,特殊功能寄存器ACC、B、DPH、DPL、PSW将被保存入栈;如果不使用寄存器组切换,则将中断函数中所用到的全部工作寄存器都入栈;函数返回之前,所有的寄存器内容出栈。 4.编写8051单片机中断函数时应遵循以下规则: (1)中断函数不能进行参数传递。 (2)中断函数没有返回值。 (3)在任何情况下都不能直接调用中断函数。 (4)如果中断函数中用到浮点运算,必须保存浮点寄存器的状态。在math.h中,提供了保存浮点寄存器的状
文档评论(0)