第3章_C51语言编程基础.ppt

上传人:资****亨 文档编号:127166376 上传时间:2020-03-30 格式:PPT 页数:78 大小:506.50KB
返回 下载 相关 举报
第3章_C51语言编程基础.ppt_第1页
第1页 / 共78页
第3章_C51语言编程基础.ppt_第2页
第2页 / 共78页
第3章_C51语言编程基础.ppt_第3页
第3页 / 共78页
第3章_C51语言编程基础.ppt_第4页
第4页 / 共78页
第3章_C51语言编程基础.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《第3章_C51语言编程基础.ppt》由会员分享,可在线阅读,更多相关《第3章_C51语言编程基础.ppt(78页珍藏版)》请在金锄头文库上搜索。

1、第3章C51语言编程基础 1 机器语言定义 处理器能直接执行的二进制代码特点 效率高 但不易于使用 10110110000000001011010100000000 ADDA 19 3 1编程语言KeilC51简介 1 编程语言 2 汇编语言定义 以助记符的形式表示机器语言特点 速度快 体积小 但依赖于硬件体系 3 高级语言独立于机器 面向过程的 接近于人的自然语言 语言 FORTRAN C语言特点 与硬件无关 易于交流和使用 运行效率低 X X 1 编译器链接器 X X 1 程序员 1001001010110010 高级语言程序 机器码 单片机如何执行程序指令 KeilC51语言是在标准C的

2、基础上 针对51单片机的硬件特点进行扩展 并向51单片机上移植的高效 简洁的实用高级语言 与汇编语言相比的特点 1 可读性好 2 可模块化开发 3 可移植性好 4 生成的代码效率较低 2 KeilC51语言简介 对于51单片机 目前广泛使用的是KeilC51语言 简称C51语言 3 C51与标准C的区别 1 库函数的不同 例如库函数printf和scanf 在标准C中 这两个函数通常用于屏幕打印和接收字符 而在KeilC51中 主要用于串行口数据的收发 3 C51的变量存储模式与标准C中的变量存储模式不一样 标准C是在通用计算机中只有一个程序和数据统一寻址的内存空间 51单片机存储区可分为内部

3、数据存储区 外部数据存储区以及程序存储区 4 标准C语言没有处理单片机中断的方法 C51中有专门处理中断的中断函数 2 数据类型有一定的区别 在标准C的基础上又扩展了4种类型 5 头文件的不同 51头文件把单片机内部的硬件资源如定时器 中断 I O等所相应的功能寄存器写入头文件内 6 程序结构的差异 由于51单片机硬件资源有限 编译系统不允许太多的程序嵌套 其次 C51语言不支持标准C的递归特性 4 KeilC51的开发工具 Keil Vision3 Keil Vision3是德国Keilsoftware公司开发的C51语言开发软件 这个软件集成了文件编辑处理 编译链接等功能 3 2C51语言

4、程序设计基础 1 数据类型与存储类型 1 数据类型 2 C51扩展的数据类型 4种扩展的数据类型 1 位变量bitbit的值可以是1 true 或0 false bit变量名 格式 例如 bitflag flag 0 2 特殊功能寄存器sfr地址单元80H FFH之间的片内数据存储区 sfr 数据类型占用一个内存单元 利用它可以访问51单片机内部的所有特殊功能寄存器 sfrP1 0 x90 定义了P1为片内的P1口寄存器 P1 0 xff 把P1口的所有输出引脚设置为高电平 例如 sfr寄存器变量名 字节地址常数 格式 sfrSBUF 0 x99 习题 往串行发送数据缓冲寄存器SBUF写入80

5、 SBUF 80 习题 从P0口寄存器读取数据 存放到任意一个变量X sfrP0 0 x80 intx x P0 例如 3 特殊功能寄存器sfr16 sfr16 数据类型占两个内存单元 用于操作占两个字节的特殊功能寄存器 sfr16DPTR 0 x82 定义了片内16位数据指针寄存器DPTR 低8位字节地址为82H 高8位字节地址为83H DPTR 0 x1234 sfr16寄存器变量名 字节地址常数 格式 字节地址为82H 83H存放的数据分别是多少 4 特殊功能位sbit片内特殊功能寄存器的可寻址位 前是特殊功能寄存器的名字 的后面数字是特殊功能寄存器可寻址位在寄存器中的位置 取值必须是0

6、 7 sbit位变量名 特殊功能寄存器 位位置 格式 sfrPSW 0 xd0 定义PSW寄存器地址为0 xd0sbitFO PSW 5 定义F0位为PSW 5F0 0 例如 习题 片内I O口P1口的P1 0寻址位置成高电平 sfrP1 0 x90 sbitP1 0 P1 0 P1 0 1 习题 从P2口的P2 7读取数据 存放到任意一个位变量X sfrP2 0 xA0 sbitP2 7 P2 7 bitx x P2 7 sbit位变量名 位地址常数 sbitCY 0 xD7 CY位地址为0 xD7 sbitOV 0 xD2 OV位地址为0 xD2 if CY 1 例如 格式 习题 片内I

7、O口P1口的P1 0寻址位置成低电平 sbitP1 0 0 x90 P1 0 0 在头文件AT89X51 h中定义了常用的特殊功能寄存器和可寻址位 include sfrP1 0 x90 sbitP1 0 0 x90 两者区别 6 3 数据存储类型 数据存储类型是指数据存放在51单片机的哪一个存储器空间 bdata data idata pdata xdata code 1 DATA区 DATA区指片内RAM的低128字节的空间 可直接寻址 寻址是最快的 应该把经常使用的变量放在DATA区 unsignedchardatasystem status 0 unsignedintdataunit

8、id 8 例如 格式 数据类型 存储类型 变量名 2 BDATA区 BDATA区是内部RAM可位寻址的16字节存储区 字节地址为20H 2FH 中的128个位 在这个区中声明变量就可进行位寻址 例如 unsignedcharbdatastatus byte unsignedintbdatastatus word sbitstat flag status byte 4 if status word 15 stat flag 1 3 IDATA区 IDATA区是片内RAM的0 256字节的存储区 只能间接寻址 速度比直接寻址慢 unsignedcharidatasystem status 0 fl

9、oatidatavalue 例如 4 PDATA区和XDATA区 PDATA区和XDATA区位于片外存储区 PDATA区指的是外部数据存储区0 256字节 XDATA区指的是外部数据区64KB内的任何地址 unsignedcharxdatasystem status 0 unsignedintpdataunit id 8 例如 5 程序存储区CODE CODE区是程序存储区 储存的数据是不可改变的 unsignedcharcodea 9 0 x00 0 x01 0 x02 0 x03 0 x04 0 x05 0 x06 0 x07 0 x08 例如 4 数据存储器模式C51编译器设定的存储器模

10、式 SMALL COMPACT和LARGE三种模式 若声明charvar1 在SMALL模式下 var1被定位在data存储区 在COMPACT模式下 var1被定位在idata存储区 在LARGE模式下 var1被定位在xdata存储区中 2 C51语言的绝对地址访问 C51语言提供了两种比较常用的访问绝对地址的方法 对片内RAM 片外RAM及I O进行访问 绝对地址 1 绝对宏C51编译器提供了一组宏定义对code data pdata和xdata空间进行绝对寻址 这组宏定义放在absacc h头文件中 CBYTE以字节形式对code区寻址 CWORD以字形式对code区寻址 DBYTE以

11、字节形式对data区寻址 DWORD以字形式对data区寻址 XBYTE以字节形式对xdata区寻址 XWORD以字形式对xdata区寻址 PBYTE以字节形式对pdata区寻址 PWORD以字形式对pdata区寻址 define变量名绝对宏 字节地址 格式 绝对宏 例 片内RAM 片外RAM定义的程序如下 include definePORTEXBYTE 0 xFFC0 将PORTE定义为外部I O 地址为0 xFFC0 defineNRAMDBYTE 0 x40 将NRAM定义为片内RAM 地址为0 x40 main PORTE 0 x3D NRAM 0 x01 数据3DH写入地址0 xF

12、FC0的外部I OPORTE 将数据01H写入片内RAM的40H单元 习题使用绝对宏将片内RAM20H的字节地址单元全部置1 include defineMDBYTE 0 x0020 将M定义为外部RAM 地址为0 x0020 main M 0 xff 习题 使用绝对宏读取片外RAMF000H字节地址单元的内容 include defineWRAMXBYTE 0 xF000 main charx x WRAM 7 2 at 关键字使用关键字 at 可对指定的存储器空间的绝对地址进行访问 格式 存储类型 数据类型变量名 at 地址常数 地址常数 指定变量的绝对地址 位于存储器空间之内 使用 at

13、 定义的变量必须为全局变量 例 使用关键字 at 实现绝对地址的访问 dataunsignedchary1 at 0 x50 在data区定义字节变量y1 地址为50H xdataunsignedinty2 at 0 x4000 在xdata区定义字变量y2 地址为4000H voidmain void y1 0 xff y2 0 x1234 while 1 习题 使用关键字 at 读取片内RAM60H单元的内容 dataunsignedcharM at 0 x60 voidmain void unsignedchary y M 例 使用关键字 at 将片外RAM2000H开始的连续20个字节

14、单元清0 voidmain void unsignedchari for i 0 i 20 i buffer i 0 xdataunsignedcharbuffer 20 at 0 x2000 dataunsignedcharbuffer 8 at 0 x40 voidmain void unsignedcharj for j 0 j 8 j buffer j 0 习题 使用关键字 at 把片内RAM40H单元开始的8个单元内容清0 8 C51语言的基本运算与标准C类似 主要包括算术运算 关系运算 逻辑运算 位运算和赋值运算及其表达式等 1 算术运算符 3 C51的基本运算 2 关系运算符 关

15、系表达式 intx 3 inty 6 intR R x y 3 逻辑运算符 逻辑表达式 intx 0 inty 1 intR R x 4 位运算符 01001000 11111111 00001000 2 01001001 11111111 01001000 00110111 01000000 11111111 00001000 3 习题 例 以字节操作方式对I O口P1的P1 5清0 P1 1置为1 其他位保持不变 P1 5 P1 1 sfrP1 0 x90 P1 P1 P1 0 sfrP2 0 xA0 P2 P2 0 x10 习题 以字节操作方式 把P2口的P2 4位置成1 其它位保持不变

16、 sfrP0 0 x80 charflag flag P0 习题 以字节操作方式 读取P0口的P0 6位是否为1 4 C51的分支与循环程序结构 程序结构分为三类 顺序结构 分支结构 循环结构 1 分支结构控制语句 格式 二分支if语句 if 表达式 语句 if x y max x 比较变量x和变量y 如果x y 则把x赋给变量max 习题 比较变量x和变量y 如果x和y相等 则把0赋给变量max if x y max 0 格式 if 表达式 语句1 else 语句2 if x y max x else max y 比较变量x和变量y 如果x y 则把x赋给变量max 否则把y赋给变量max 习题 比较变量x和变量y 把二者最小值赋给变量min if x y min y else min x 习题 如果变量x满足关系10 x 20 则把变量y置成1 否则把y置成0 if x 10 9 voidmain sfrP2 0 xA0 sfrP1 0 x90 sbitP24 P2 4 sbitP10 P1 0 习题 如果读取P2口的P2 4位为1 则把P1口的P1 0置成0 if P24 1 P

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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