单片机C51语言及程序 设计

上传人:f****u 文档编号:128744250 上传时间:2020-04-21 格式:PPT 页数:78 大小:4.67MB
返回 下载 相关 举报
单片机C51语言及程序 设计_第1页
第1页 / 共78页
单片机C51语言及程序 设计_第2页
第2页 / 共78页
单片机C51语言及程序 设计_第3页
第3页 / 共78页
单片机C51语言及程序 设计_第4页
第4页 / 共78页
单片机C51语言及程序 设计_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《单片机C51语言及程序 设计》由会员分享,可在线阅读,更多相关《单片机C51语言及程序 设计(78页珍藏版)》请在金锄头文库上搜索。

1、单片机C51语言基础及C51程序设计 主要内容 C51语言概述C51的标识符与关键字C51的变量及数据类型C51的运算符及表达式C51的程序结构C51开发环境C51编程实例 一 C51语言概述 单片机C51语言是ANSIC的扩展 C51语言除了具有C语言的优点外 同时具有汇编语言的硬件操作能力 运行于单片机平台 支持的微处理器种类繁多 可移植性好 对于兼容的8051系列单片机 只要将一个硬件型号下的程序稍加修改 甚至不加改变 就可移植到另一个不同型号的单片机中运行 具有高级语言的特点 尽量减少底层硬件寄存器的操作 单片机C51语言提供了完备的数据类型 运算符及函数供使用 C51语言代码执行的效

2、率方面十分接近汇编语言 且比汇编语言的程序易于理解 便于代码共享 二 C51的标识符与关键字 标识符即特定的字符或字符串 用来给变量 函数 符号常量 自定义类型等命名 用标识符给C语言程序中各种对象命名时 要用字母 下划线和数字组成的字符序列 并要求首字符是字母或下划线 不能是数字 字母的大小写是有区别的 通常下划线开头的标识符是编译系统专用的 因此在编写C语言源程序时一般不使用以下划线开头的标识符 而将下划线用作分段符 C51编译器规定标识符最长可达255个字符 但只有前32个字符在编译时有效 因此标识符的长度一般不要超过32个字符 关键字是一种已被系统使用过的具有特定含义的标识符 用户不得

3、再用关键字给变量等命名 C语言关键字较少 ANSIC标准一共规定了32个关键字 见表 ANSIC语言的关键字 KeilC51编译器除了有ANSIC标准的32个关键字外 还根据51单片机的特点扩展了相应的关键字 在KeilC51开发环境的文本编辑器中编写C程序 系统可以把保留字以不同的颜色显示 缺省颜色为蓝色 下表为KeilC51编译器扩展的关键字 1 C51的变量 在程序执行过程中 数值可以发生改变的量称为变量 变量名与存储单元地址相对应 变量值与存储单元的内容相对应 例如 三 C51的变量及数据类型 存储类别 数据类型 存储器类型 变量名 标准C 标准C 括号项 可以缺省 但需有缺省值 C5

4、1变量定义的四要素 C51特有 标准C C51 存储类别 数据类型 存储器类型 变量名 共有四个说明符 1 auto 自动型 变量的作用范围在定义它的函数体或语句块内 执行结束后 变量所占内存即被释放 2 extern 外部型 在一个源文件中被定义为外部型的变量 在其它源文件中需要通过extern说明方可使用 3 static 静态型 利用static可使变量定义所在的函数或语句块执行结束后 其分配的内存单元继续保留 4 register 寄存器型 将变量对应的储存单元指定为通用寄存器 以提高程序运行速度 缺省存储种类为auto 自动 型变量 数据的不同格式叫做数据类型 有符号数类型可以忽略s

5、igned标识符 标准C语言的数据类型 存储类别 数据类型 存储器类型 变量名 C51扩充数据类型 bit sfr或sfr16 sbit bit型 关键词bit用于定义一个位变量 语法规则 bitbit name 0或1 例如 bitdoor 0 定义一个叫door的位变量且初值为0 标准C的变量定义举例 inta 5 定义一个初值为5的整形变量a语法规则 intint name 常数 注意 上述变量的物理地址是由编译器分配的 sfr或sfr16型 关键词sfr或sfr16用于定义SFR字节地址变量 语法规则 sfr或sfr16sfr name 字节地址常数 51MCU中有21个SFR 如何定

6、义与这些单元相关的变量 例如 sfrP0 0 x80 定义P0口地址80HsfrPCON 0 x87 定义PCON地址87Hsfr16DPTR 0 x82 定义DPTR的低端地址82H 注意 SFR字节地址变量的物理地址是由MCU资源决定的 sbit型 部分SFR具有位地址 如何定义与这些位地址相关的变量 绝对位地址 相对位地址 字节地址 两种位地址表达形式 绝对位地址 相对位地址 1 将SFR的绝对位地址定义为位变量名sbitbit name 位地址常数 例如 sbitCY 0 xD7 3 将SFR的相对位位置定义位变量名sbitbit name sfr name 位位置 例如 sbitCY

7、 PSW 7 2 将SFR的相对位地址定义为位变量名sbitbit name sfr字节地址 位位置 例如 sbitCY 0 xD0 7 关键词sbit用于定义SFR位地址变量 三种定义形式 C51编译器在头文件 REG51 H 中定义了全部sfr sfr16和sbit变量 用一条预处理命令 include把这个头文件包含到C51程序中 无需重新定义即可直接使用它们的名称 应用举例 存储类别 数据类型 存储器类型 变量名 51单片机的三个逻辑存储空间 片内数据存储器 片外数据存储器和程序存储器 建立C51存储类型与存储空间的对应关系 C51的存储类型与存储空间对应关系表 编译模式 三种编译模式

8、分别对应于三种缺省存储类型 存储类别 数据类型 存储器类型 变量名 C51编译器可根据当前采取的编译模式自动认定默认的存储类型约定 若无特殊声明 一般均为 SMALL编译模式 变量名可以由字母 数字和下划线三种字符组成 且第一个字符必须为字母或下划线 变量名长度随编译系统而定 变量名具有字母大小写的敏感性 如SUM和sum代表不同的变量 存储类别 数据类型 存储器类型 变量名 变量名不得使用标准C语言和C51语言的关键字 unsignedchardatasystem status 0 定义system status为无符号字符型自动变量 该变量位于data区中且初值为0 变量定义举例 变量名为

9、system status 位于片内RAM区 无符号字符型 自动型 初值为零 unsignedcharbdatastatus byte unsignedintcodeunit id 2 0 x1234 0 x89ab staticcharm n 定义status byte为无符号字符型自动变量 该变量位于bdata区 定义unit id 2 为无符号整型自动变量 该变量位于code区中 是长度为2的数组 且初值为0 x1234和0 x89ab 定义m和n为2个位于data区中的有符号字符型静态变量 2 C51的指针 定义了一个指向由 数据类型 说明的变量的指针变量 被指向变量和指针变量位于C编

10、译器默认的内存区域中 标准C语言指针的一般定义形式为 数据类型 指针变量名 例如 inta A int p1 表示 p1是一个指向int型变量的指针变量p1的值是int型变量a的地址a和p1两个变量都位于C编译器默认的内存区域中 在C51里定义指针 需要额外说明两个问题 1 指针变量自身位于哪个存储区域 2 被指向变量位于哪个存储区中 C51指针的一般定义形式 数据类型 存储类型1 存储类型2 指针变量名 数据类型 被指向变量的数据类型 不能缺省存储类型1 被指向变量所在的存储区类型 缺省时根据该变量的定义语句确定存储类型2 指针变量所在的存储区类型 缺省时根据C51编译模式的默认值确定指针变

11、量名 按C51变量名的规则选取 例1charxdataa A char ptr 举例说明C51指针定义的用法 SMALL编译模式下 解 ptr是一个指向char型变量的指针变量 它本身位于SMALL编译模式默认的data存储区里 它的值是位于xdata存储区里的char型变量a的地址 存储类型1 缺省时 靠被指向变量的定义确定存储类型 数据类型 存储类型1 存储类型2 指针变量名 例2charxdataa A char ptr 解 Ptr先指向位于xdata存储区的char型变量a 后指向位于idata存储区的char型变量b 存储类型1 缺省时 ptr指针具有一定随意性 数据类型 存储类型1

12、 存储类型2 指针变量名 例3charxdataa A charxdata ptr 解 a是位于xdata存储区里的char型变量 ptr是固定指向xdata存储区中char型变量的指针变量 存储类型1 存在时 ptr指针具有固定指向性 数据类型 存储类型1 存储类型2 指针变量名 例4charxdataa A charxdata idataptr 解 ptr是固定指向xdata存储区的char型变量的指针变量 它自身存放在idata存储区中 存储类型2 存在时 ptr指针具有明确的存储区域 数据类型 存储类型1 存储类型2 指针变量名 四 C51的运算符及表达式 1算术运算符和算术表达式 1

13、 基本算术运算符 加法运算符 或正值符号 减法运算符 或负值符号 乘法运算符 除法运算符 模 求余 运算符 例11 3 2 结果是11除以3所得余数为2 在上述运算符中 加 减和乘法符合一般的算术运算规则 除法运算时 如果是两个整数相除 其结果为整数 如果是两个浮点数相除 其结果为浮点数 而对于取余运算 则要求两个运算对象均为整型数据 C语言规定了算术运算符的优先级和结合性 优先级 指当运算对象两侧都有运算符时 执行运算的先后次序 按运算符优先级别的高低顺序执行运算 结合性 指当一个运算对象两侧的运算符优先级别相同时的运算顺序 算术运算符中取负运算的优先级最高 其次是乘法 除法和取余 加法和减

14、法的优先级最低 也可以根据需要 在算术表达式采用括号来改变优先级的顺序 如 a b c 该表达式中 除号优先级高于加号 故先运算b c所得结果 之后再与a相加 a b c d e 该表达式中 括号优先级最高 其次是 最后是减号 故先运算 a b 和 c d 然后再将二者结果相乘 最后与e相减 2 自增减运算符自增减运算符的作用是使变量值自动加1或减1 自增运算符 自减运算符 和 运算符只能用于变量 不能用于常量和表达式 如 a 1 是错误的 如 i i在使用i之前 先使i值加 减 1 i i 在使用i之后 再使i值加 减 1 粗略的看 i和i 的作用都相当于i i 1 但 i和i 的不同之处在

15、于 i先执行i i 1 再使用i的值 而i 则是先使用i的值 再执行i i 1 如 若i值原来为5 则j i j的值为6 i的值也为6 j i j的值为5 i的值为6 3 类型转换运算符两侧的数据类型不同时 要转换成同种类型 转换的方法有两种 一是自动转换 是编译系统在编译时自动进行的类型转换 顺序是 bit char int long float signed unsigned 二是强制类型转换 是通过类型转换运算来实现的 其一般形式 类型说明符 表达式 功能 把表达式的运算结果强制转换成类型说明符所表示的类型 如 double a将a强制转换成double类型 int x y 将x y值强

16、制转换成int类型 float 5 3 将模运算5 3的值强制转换成float类型 2关系运算符 关系表达式及优先级 1 C51提供六种关系运算符 小于 小于等于 大于 大于等于 测试等于 测试不等于 2 关系运算符的优先级1 的优先级相同 两种 相同 前4种优先级高于后两种 2 关系运算符的优先级低于算术运算符 3 关系运算符的优先级高于赋值运算符 如 c a b等效于c a b a b c等效于 a b ca b c等效于a b c 3 关系运算符的结合性为左结合如 a 4 b 3 c 1 则f a b c 则a b的值为1 1 c的值为0 故f 0 4 关系表达式用关系运算符和将两个表达式 可以是算术表达式 关系表达式 逻辑表达式 字符表达式 连接起来的式子 5 关系表达式的结果真和假 C51中用0表示假 1表示真 3逻辑运算符和逻辑表达式及优先级 1 C51提供3种逻辑运算符 逻辑 非 NOT 逻辑 与 AND 逻辑 或 OR 和 是双目运算符 要求有两个运算对象 而 是单目运算符 只要求有一个运算对象 2 逻辑运算符的优先级在逻辑运算中 逻辑非的优先级最高 且高于算术运算符

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号