单片机的C51语言课件

上传人:我*** 文档编号:145457431 上传时间:2020-09-20 格式:PPT 页数:119 大小:9.73MB
返回 下载 相关 举报
单片机的C51语言课件_第1页
第1页 / 共119页
单片机的C51语言课件_第2页
第2页 / 共119页
单片机的C51语言课件_第3页
第3页 / 共119页
单片机的C51语言课件_第4页
第4页 / 共119页
单片机的C51语言课件_第5页
第5页 / 共119页
点击查看更多>>
资源描述

《单片机的C51语言课件》由会员分享,可在线阅读,更多相关《单片机的C51语言课件(119页珍藏版)》请在金锄头文库上搜索。

1、第4章 单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章单片机的C51语言,51汇编语言能直接操作单片机的系统硬件,指令执行速度快。但其程序可读性差,且编写、移植困难。,51单片机操作数的简记符,实验2汇编源代码,第4章单片机的C51语言,C51是为51系列单片机设计的一种C语言,其特点:,C51语言已成为

2、51系列单片机程序开发的主流软件方法。,结构化语言,代码紧凑效率可与汇编语言媲美 接近真实语言,程序可读性强易于调试、维护 库函数丰富,编程工作量小产品开发周期短 机器级控制能力,功能很强适合于嵌入式系统开发 与汇编指令无关,易于掌握在单片机基础上上手快,第4章单片机的C51语言,C51与标准C语言对比 相同之处:语法规则、程序结构、编程方法,举例:LED闪烁控制功能,;汇编程序 LOOP: CLR P1.0 ACALL DEL50 SETB P1.0 SJMP LOOP DEL50: MOV R7,#200 DEL1: MOV R6,#125 DJNZ R6,$ DJNZ R7,DEL1 R

3、ET END,第4章单片机的C51语言,预处理命令-,函数说明-,全局变量定义-,主函数-,自定义函数-,局部变量定义-,函数体,函数体-,/C51程序,第4章单片机的C51语言,C51与标准C语言对比 不同之处: 数据结构(第4章)、中断处理(第5章)、端口扩 展(第8章) 教学思路: 学习C51的数据结构知识(理论部分) 学习C51软件开发方法(Keil C软件用法) 学习I/O口典型应用编程(入门与进阶两个层次),第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章

4、单片机的C51语言,1. C51的变量,在C语言编程中,数值可以发生改变的量称为变量。,变量名与存储单元地址相对应,变量值与存储单元的内容相对应。,例如,在51单片机多存储空间中如何确定变量与地址的关系?,第4章单片机的C51语言,【存储种类】数据类型【存储类型】 变量名,(标准C),(标准C),* 括号项可以缺省(但需有缺省值),C51变量定义的四要素:,(C51特有),(标准C+C51),第4章单片机的C51语言,【存储种类】数据类型【存储类型】变量名,存储种类用于说明变量的作用范围: 1、auto(自动型)变量的作用范围在定义它的函数体或语句块内。执行结束后,变量所占内存即被释放。 2、

5、extern(外部型) 在一个源文件中被定义为外部型的变量,在其它源文件中需要通过extern说明方可使用。 3、static(静态型) 利用static可使变量定义所在的函数或语句块执行结束后,其分配的内存单元继续保留。 4、register(寄存器型) 目前已不推荐使用。,缺省存储种类为auto (自动)型变量,第4章单片机的C51语言,数据类型用于表示数据存放格式,* 有符号数类型可以忽略signed标识符,标准C语言的数据类型,【存储种类】数据类型 【存储类型】变量名,除上述常规格式外,51单片机还有三种新的存储格式:,第4章单片机的C51语言,bit型存储格式,sfr型存储格式,sf

6、r bit型存储格式,bit、sfr或sfr16、sbit,C51扩充的3种数据类型:,bit 型,关键词bit用于定义一个位变量,语法规则:,bit bit_name = 0或1;,例如:bit door = 0 ; /定义一个叫door的位变量且初值为0,与标准C的数据类型声明的语法规则是一致的,如: int int_name = 常数;,第4章单片机的C51语言,sfr或sfr16型,关键词sfr或sfr16用于定义SFR字节地址变量,语法规则: sfr sfr_name = 字节地址常数; sfr16 sfr_name = 字节地址常数;,第4章单片机的C51语言,例如, sfr P0

7、 = 0 x80; /定义P0口地址80H sfr PCON = 0 x87; /定义PCON地址87H sfr16 DPTR=0 x82; /定义DPTR的低地址82H,注意:C语言中十六进制整数是数值前加0 x或0X前缀,sbit型,绝对位地址,相对位地址,字节地址,位地址表达形式:绝对位地址、相对位地址,第4章单片机的C51语言,关键词sbit用于定义SFR位地址变量,1)将SFR的绝对位地址定义为位变量名 sbit bit_name = 位地址常数; 例如, sbit CY = 0 xD7;,3)将SFR的相对位位置定义位变量名 sbit bit_name = sfr_name 位位置

8、; 例如, sbit CY = PSW7;,2)将SFR的相对位地址定义为位变量名 sbit bit_name = sfr字节地址 位位置; 例如, sbit CY = 0 xD07;,可用三种定义形式:,sbit型,第4章单片机的C51语言,C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。,用一条预处理命令#include 把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。,第4章单片机的C51语言,第4章单片机的C51语言,编程举例:,【存储种类】数据类型【存储类型】变量名,存储类型体现了变量的存放区域。51系列单片机共有6个存储类型(

9、分布在3个逻辑存储空间中)。,第4章单片机的C51语言,不同存储类型的特点,编译模式,第4章单片机的C51语言,三种编译模式分别对应于三种缺省存储类型:,约定:若无特殊声明,一般均为“SMALL编译模式”,变量名可以由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度随编译系统而定。,变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。 强调:头文件中定义的变量都是大写的,若程序采取小写变量则需要重新定义。,【存储种类】数据类型【存储类型】变量名,第4章单片机的C51语言,C51扩展的若干关键字一览表,变量名不得使用标准C语言和C51语言的关键字。,第4章单片

10、机的C51语言,unsigned char data system_status = 0;,/定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。,数据结构定义举例,变量名为system_status,位与片内RAM区,无符号字符型,自动型,初值为零,第4章单片机的C51语言,unsigned char bdata status_byte;,unsigned int code unit_id2=0 x1234, 0 x89ab;,static char m, n;,/定义status_byte为无符号字符型自动变量,该变量位于bdata区,/定义unit_i

11、d2为无符号整型自动变量,该变量位于code区中,是长度为2的数组,且初值为0 x1234和0 x89ab。,/定义m和n为2个位于data区中的有符号字符型静态变量。,第4章单片机的C51语言,2. C51的指针,C语言指针的一般定义形式为: 数据类型 *指针变量名 = 这表示p1是一个指向int型变量的指针变量,此时p1的值为int型变量a的地址,而a和p1两个变量都位于C编译器默认的内存区中。,第4章单片机的C51语言,对于C51,除了数据类型外,指针定义中还应能说明: 1)指针变量自身位于哪个存储区中? 2)被指向变量位于哪个存储区中?,C51指针的一般定义形式: 数据类型 存储类型1

12、 * 存储类型2 变量名 = char *ptr = ,解:ptr是一个指向char型变量的指针,它本身位于SMALL编译模式默认的data存储区里,此时它指向位于xdata存储区里的char型变量a的地址。,数据类型 存储类型1 * 存储类型2 变量名 = char *ptr = ,解:以char *ptr形式定义的指针变量,既可指向位于xdata存储区的char型变量a的地址,也可指向位于idata存储区的char型变量b的地址(由赋值操作关系决定)。,前两句与例1相同 char xdata a = A; char *ptr = ,第4章单片机的C51语言,例3:试解释以下指针定义的含义

13、char xdata a = A; char xdata *ptr = 【解】ptr是位于data存储区且固定指向xdata存储区的char型变量的指针变量,此时ptr的值为变量a的地址(不能像例2那样再将idata存储区的char型变量b的地址赋予ptr)。,第4章单片机的C51语言,例4:试解释以下指针定义的含义 char xdata a = A; char xdata *idata ptr = 【解】ptr是固定指向xdata存储区的char型变量的指针变量, 它自身存放在idata存储区中,此时ptr指向位于xdata存储区中的char型变量a的地址。,第4章单片机的C51语言,第4章

14、单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章单片机的C51语言,C51语言编程可胜任单片机的基本测量与控制任务。 对于某些特殊的I/O 接口处理、中断处理、强调程序执行速度等场合,仍希望采用汇编程序。 C51 编译器提供了与汇编语言程序的接口规则,可方便地实现C51 与汇0编语言程序的相互调用。 本节仅讨论在C51中调用汇编函数和在C51中嵌入汇编代码两种方法。,概要,第4章单片机的C51语言,1. 在C51中调用汇编程序,1)程序的寻址,main.c中调用的max函数

15、,如何与汇编文件中的相应代码对应起来;,2)参数传递,main.c中传递给max()函数的参数a和b,存放在何处可使汇编程序能够获取到它们的值;,3)返回值传递,汇编语言计算得到的结果,存放在何处可使C语言程序能够获取到。,C51程序中调用汇编语言,需要解决三个问题:,第4章单片机的C51语言,举例:在两个数据中选出较大的数据,并赋值给变量c。其中,要求选数任务采用汇编子程序完成。,1)程序的寻址问题,第4章单片机的C51语言,通过在汇编文件中定义同名的“函数”来实现。,第4章单片机的C51语言,2)参数传递问题,第4章单片机的C51语言,3)返回值传递问题,2. C51中嵌入汇编代码,程序中

16、需要用到一些简短的汇编指令时,可以通过语句 “# pragma”嵌入汇编代码的办法实现。,第4章单片机的C51语言,#include void main(void) unsigned char i=0; /定义变量i #pragma asm/嵌入汇编代码 MOV R0,#0AH LOOP:INC A/累加器循环加1 DJNZ R0,LOOP #pragma endasm i=+ACC;/输出累加结果 ,说明: 汇编代码必须放在两条预处理命令#pragma asm和#pragma endasm之间,预处理命令必须用小写字母,汇编代码则大小写不限。 本实例可实现用汇编语句进行累加器A循环加1和将累加结果传递给C51变量的功能。,实例:,第4章单片机的C51语言,嵌入汇

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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