单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9

上传人:E**** 文档编号:89493573 上传时间:2019-05-25 格式:PPT 页数:29 大小:532KB
返回 下载 相关 举报
单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9_第1页
第1页 / 共29页
单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9_第2页
第2页 / 共29页
单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9_第3页
第3页 / 共29页
单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9_第4页
第4页 / 共29页
单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9》由会员分享,可在线阅读,更多相关《单片机原理及应用教程 第3版 教学课件 ppt 作者 刘瑞新 9(29页珍藏版)》请在金锄头文库上搜索。

1、第9章 Cx51程序设计及Proteus仿真 9.1 Keil C简介与环境设置 9.2 Cx51简介 9.3 Cx51开发工具简介 9.4 Cx51应用程序设计举例,随着单片机应用的深入发展和强盛的社会需求,应用高级语言进行单片机程序设计、使用仿真软件对单片机系统进行仿真已成为当前潮流。 一般情况下单片机常用的程序设计语言有两种: 汇编语言: 汇编语言具有执行速度快、占存储空间少、对硬件可直接编程等特点,因而特别适合在对实时性能要求比较高的情况下使用。 C语言: C语言克服了汇编语言的不足之处,同时又增加了代码的可读性,语言大多数代码被翻译成目标代码后,其效率和汇编语言相当。特别是C语言的内

2、嵌汇编功能,使C语言对硬件操作更加方便。 9.1 Keil C简介与环境设置 Keil C Vision3 开发环境是德国Keil Software,Inc.and Keil Elektro nik GmbH开发的微处理器开发平台,可以开发多种8051兼容单片机程序。其界面如图9-1所示。,图9-1:Keil C Vision3,Cx51有两种使用方式。常用方式是在Vision3IDE中使用,不用进行设置;另一种方式是在命令提示符下使用。如果使用命令方式,需要设置如下变量: PATH=E:KeilcC51BIN TMP=E:KeilcTmp C51INC=E:KeilcC51INC C51LI

3、B=E:KeilcC51LIB 注意:E:Keilc这个路径是Keil C安装的路径,在Windows环境下的设置过程为:鼠标右击“我的电脑”“属性”“高级”“环境变量”“新建”。 设置好运行环境后就可以在命令提示符下编译C语言源程序,其格式如下: C51 源文件名 控制命令 . 9.2 Cx51简介 9.2.1 Cx51的扩展 Cx51编译器兼容ANSI C标准,又扩展支持了8051微处理,器,其扩展内容如下: 存储区; 存储区类型; 存储模型; 存储类型说明符; 变量数据类型说明符; 位变量和位可寻址数据; SFR; 指针; 函数属性。 9.2.2 存储区 8051单片机支持程序存储器和数

4、据存储器的分离,存储器根据读写情况可以分为:程序存储区(ROM)、快速读写存储器(内部RAM)、随机读写存储器(外部RAM)。,1. 程序存储器(code) 在8051中程序存储器是只读存储器,其空间为64K 。 2. 内部数据存储器 在8051单片机中,内部数据存储器属于快速可读写存储器,与51兼容的扩展型单片机最多有256字节内部数据存储区。 3. 外部数据存储器 外部数据存储器又称随机读写存储器,访问存储空间为64KB。其访问速度要比内部RAM慢。访问外部RAM的数据要使用指针进行间接访问。 9.2.3 存储模式 在Cx51中,存储器模式可以确定一些变量在缺省情况下的存储器类型。程序中可

5、用编译器控制命令SMALL、COMPACT、LARGE指定存储器模式。,1. SMALL模式 SMALL模式中所有的变量在缺省的情况下位于单片机的内部数据区,这和用data存储类型标识符声明的变量是相同的。在本模式中变量访问非常有效,然而所有对象和堆栈必须适和内部RAM。 2. COMPACT模式 COMPACT模式中所有变量在缺省的情况下都存放在外部数据区的一页(256B)中,这和用pdata存储类型标识符声明的变量是相同的。 3. Large模式 LARGE模式下所有变量在缺省情况下存放在外部数据存储区(范围为64k字节),这和用xdata存储类型标识符声明的变量是一致的,该模式使用数据指

6、针DPTR寻址。 9.2.4 数据类型与自定义变量 在Cx51中不仅支持所有的C语言标准数据类型,而且还对其进行了扩展,增加了专用于访问8051硬件的数据类型,使其对单片机的操作更加灵活。,1. bit类型 bit用于声明位变量,其值为1或0。 2. sbit类型 sbit类型用于声明可位寻址区或特殊功能寄存器中的可寻址位的某个位变量,其值为1或0。 3. sfr类型 sfr类型用于声明特殊功能寄存器(8位),位于内部RAM地址为0x80-0xFF的128字节存储单元(变量),这些存储器一般用作对计时器、计数器、串口、并口和外围使用。 4. sfr16类型 sfr16类型用于声明两个连续地址的

7、特殊功能寄存器(地址范围为065 535)。 9.2.5 指针 所谓指针就是存储单元(变量)的地址,指针变量就是存放地址的变量。 在Cx51编译器中指针可以分为两种类型:通用指针和指定存储区地址指针。,1. 通用指针 所谓通用指针是指未对指向的对象(变量)存储空间进行说明的指针。通用指针可以访问8051存储空间中与位置无关的任何变量。 2. 存储区域的指针 所谓存储区域的指针是指在指针声明中包含存储器类型。 程序中使用指定存储区域的指针速度要比通用指针快(指定存储区域指针在编译时Cx51编译器已知道其存储区域,而通用指针直到运行时才确定存储区域),在实时控制系统中应尽量使用指定存储区域的指针。

8、 9.2.6 函数 函数是C程序的基本单元,全部C都是由一个个函数组成的。在结构化程序设计中,函数作为独立的模块存在,增加了程序的可读性,为解决复杂问题提供了方便。C语言中的函数包括:主函数(main)、库函数和自定义函数。,1. Cx51自定义函数 Cx51具有自定义函数的功能,其自定义函数语法格式如下: return_type function_name(args,) small|compact|large reentrant interrupt n using n return_type: 指返回类型,在默认情况下为int。 function_name:函数的名字。 args:函数的形式

9、参数列表。 small compact large:函数的存储模式。 reentrant:函数是否可重入,要注意可重入函数中的变量的同步。 interrupt:可以用interrupt告诉计算机这个函数是中断服务函数。 using:指定函数所使用的寄存器组。 2. 中断函数 在Cx51中提供了中断支持函数,中断服务程序在Cx51中是,以中断函数的形式出现的。此类型函数用interrupt关键字进行描述。 3. 再入函数 Cx51在调用函数时,函数的形式参数及函数内的局部变量将会动态地存储在固定的存储单元中,一旦函数在执行时被中断,若再次调用该函数时,函数的形式参数及函数内的局部变量将会被覆盖,

10、导致程序不能正常运行,为此,可在定义函数时用reentrant属性引入再入函数。 再入函数可以被递归调用,也可以被多个程序调用。 9.3 Cx51开发工具简介 Cx51是专用于8051等嵌入式应用的开发工具套件。该软件可以对C源文件、汇编源文件进行编译、连接、生成并调试目标程序。 Cx51以工程的形式组织各类资源文件,其程序开发步骤如下: 1. 创建工程,选择Cx51开发环境Project菜单,选择New Project菜单项来建立一个新的工程。 2. 选择目标芯片 在工程建立完成后,器件选择窗口便会弹出,从器件库选择单片机应用系统所使用的8051芯片 。 3. 创建并编写C51源文件 选择C

11、x51开发环境的File菜单的New菜单项,这时会出现新建源程序编辑窗口,新建一个C语言源文件 。 4. 把源程序文件加入到工程中 在建立了源程序文件后,必须把源程序文件添加到工程中,以构成一个完整的工程项目。 5. 为目标芯片添加启动代码 在main()函数执行前,首先应复位单片机内部RAM、完成对硬件初始化等操作,即执行一段初始化代码。在Cx51中,STARTUP.A51文件是启动代码文件,该文件适合大多数8051及其派生系列的目标芯片。,6. 设置编译、连接环境 7. 对工程进行编译和连接 选择Cx51开发环境的Project菜单中的Build target菜单项,则对工程中的文件进行编

12、译、汇编和连接,生成二进制代码的目标文件(.obj)、列表文件(.lst)、绝对地址目标文件、绝对地址列表文件(.m51)、连接输入文件(.imp)。 8. 调试程序 选择Debug菜单的Start/stop Debug Session菜单项,即可进入调试状态。在调试状态下,目标文件自动转换为HEX文件。在调试中可以对单片机的寄存器、内存、所产生的汇编代码、串口的输出情况等进行监视 9.4 Cx51应用程序设计举例 9.4.1 输入 单片机中的I/O口(即P0,P1,P2,P3)可以单独的作为输入/输出口使用。在实际的开发过程中输入输出是单片机最基本的功能。,【例9-13】根据图9-9所示实验

13、电路,要求如下: 用输入电路中接入的4个按键分别控制对应的4个发光二极管的点亮。 判断按键是否被按下(进行去抖处理),如果按下判断按的是哪个键,如果没有键按下返回0xff。 根据所按下的按键点亮相应的发光二极管。 在程序中for(j=0;j #include sbit CLK=P11; sbit DATA=P10;,图9-9 单片机实验电路,sbit CONTROL=P12; void delay() unsigned int m; for(m=0;m500;m+); unsigned int GetPressKey() unsigned int j; unsigned int key; P0

14、=0xff; key=P0; for(j=0;j100;j+); if(key=P0),void Process() unsigned int lsdata; unsigned int keycode; lsdata=0xff; keycode=GetPressKey(); CONTROL=0; if(keycode=0xfe) lsdata=0x7f; WriteData(lsdata); if(keycode=0xfd) unsigned char i; for(i=0;i8;i+), CLK=1; lsdata=lsdata1; DATA=CY; CLK=0; CLK=1; else r

15、eturn 0xff; ,void WriteData(unsigned int lsdata) lsdata=0xbf; WriteData(lsdata); if(keycode=0xfb) lsdata=0xdf; WriteData(lsdata); if(keycode=0xf7) ,lsdata=0xef; WriteData(lsdata); CONTROL=1; int main(void) while(1) Process(); return 0; 9.4.2 输出 实现单片机的输出操作就是将数据写入I/O口。,【例9-14】如图9-9所示,同时点亮4个发光二极管时,对74L

16、S164的完整控制程序。 源程序代码如下: #include #include sbit CLK=P11; sbit DATA=P10; sbit CONTROL=P12; void delay() unsigned int m; for(m=0;m500;m+); void WriteData(unsigned int lsdata) unsigned char i;,for(i=0;i8;i+) CLK=1; lsdata=lsdata1; DATA=CY; CLK=0; CLK=1; int main(void) unsigned int lsdata; lsdata=0x00; while(1), CONTROL=0; /*所有发光二极管处于不发光状态*/ WriteData(l

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

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

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