网站大量收购独家精品文档,联系QQ:2885784924

[工学]ch04 C51及编程.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]ch04 C51及编程

C51程序设计语言 为什么使用C C51与ANSI C的区别 Keil C51的实现与编程环境 C51的应用 C语言的特点和应用 编译型程序设计语言 兼有高级语言之特点,汇编语言之功能 结构化,模块化支持 可读性强,便于维护,缩短开发周期 代码可重用,可移植 已成为嵌入式系统开发的主流选择 可以与汇编混合编程 C语言的优点 广泛的支持 非常方便 编译,集成开发环境 可移植 源代码不依赖特定的硬件体系(指令系统) 源代码另行编译就可支持其它系列的CPU 库函数丰富 内部函数支持C语言的运算 数学函数、特别是浮点运算库 字符串处理 嵌入式操作系统 简化的程序开发 向平台应用靠拢 C-51与ASM-51对比 只要求了解,不要求彻底掌握指令系统 寄存器分配、不同存贮器的寻址由编译器管理; 通过库函数,支持更多数据类型,甚至浮点数; 程序结构化:即函数调用函数; 代码效率高,可读性好; C51与ANSI C的区别 要求掌握MCS-51系列的存贮器组织; 变量的定义必须具体指出存储空间,否则编译器不能正确地分配和定位。 增加了位变量 增加了特殊功能寄存器 增加了中断函数的支持 如果你对C已经忘掉,就应该复习一下。 考不及格的都是不肯接受该建议,也不肯好好做实验的。 C-51数据的存储类型 存储类型的变量的定义 一般格式 数据类型 存储类型 变量名; 带存储类型的变量定义举例 char data var1; bit bdata flags; float idata x,y,z; unsigned int pdata var2; unsigned char vector[3][4]; char data var1; bit flags; unsigned char xdata vector[10]; 存储模式 SMALL 默认的存储类型是data COMPACT 默认的存储类型是pdata LARGE 默认的存储类型是xdata 开发环境默认的初始状态是SMALL 可以修改 C51的基本数据类型 浮点型变量(float) 4个字节(32位),IEEE-754标准 含数符、阶码和尾数三部分 1位符号位: “0正1负” 8位阶码(2的指数):偏移0x7F 24位尾数。最高位始终为“1”,实际不占位,只保存23位。具有24位精度 例:浮点数 -12.5的存储形式是: 0xC1480000 C51的数据类型扩充定义——SFR sfr: 特殊功能寄存器声明 sfr sfr-name = 地址; sfr16: 16位sfr的寄存器声明 例:sfr SCON = 0x98; // 串口通信方式字地址 sfr TMOD = 0x89;// 定时/计数器方式字地址 sfr P0 = 0x80 ; // 定义P0口地址 sfr P1 = 0x90 ; // 定义P1口地址 sfr16 T2 = 0xCC; 用法:头文件reg51.h预定义所有SFR,只要加includereg51.h到源程序头部即可。 C51的数据类型扩充定义——bit bit: 位变量声明 sbit: 特殊功能寄存器的位声明 例:sbit OV = PSW^2; 已声明bdata型8位或16位变量的按位定义 例:unsigned char bdata x1; sbit Motor = x1^5; C-51的常用头文件 reg51.h 定义特殊功能寄存器和位寄存器 math.h 浮点运算库 ctype.h 字符函数 stdio.h 标准输入输出 stdlib.h 标准库函数 absacc.h 辅助宏,支持绝对地址说明 例:I/O口定义 #include absacc.h #define port XBYTE[0x1000] C51的运算符(与ANSI C相同) C51查找零的个数程序 #include reg51.h main ( ) { unsigned char xdata *p = 0x2000; //指针p指向2000H单元 int n=0,i; for (i=0;i16;i++) { if(*p==0) n++; // 若该单元内容为零,则n+1 p++; // 指针指向下一单元 } p = 0x2100; // 指针p指向2100H单元 *p = n; // 把个数放在2100H单元中 } C51-程序开发环境

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档