




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章 单片机C语言程序设计 9.1 Keil C简介与环境设置 9.2 Cx51简介 9.3 Cx51开发工具简介 9.4 Cx51应用程序设计举例,随着单片机应用的深入发展和强盛的社会需求,应用高级语言进行单片机程序设计正在逐渐增多,本章主要介绍如何用C语言开发单片机应用程序。 一般情况下单片机常用的程序设计语言有两种: 汇编语言: 汇编语言具有执行速度快、占存储空间少、对硬件可直接编程等特点,因而特别适合在对实时性能要求比较高的情况下使用。 C语言: C语言克服了汇编语言的不足之处,同时又增加了代码的可读性,语言大多数代码被翻译成目标代码后,其效率和汇编语言相当。特别是C语言的内嵌汇编功能,使C语言对硬件操作更加方便。 9.1 Keil C简介与环境设置 Keil C Vision2 开发环境是德国Keil Software,Inc.and Keil Elektro nik GmbH开发的微处理器开发平台,可以开发多种8051兼容单片机程序。其界面如图9-1所示。,图9-1:Keil C Vision2,Cx51有两种使用方式。第一种方式是在Vision2 IDE中使用,不用进行设置;第二种方式是在命令提示符下使用。如果使用命令方式,需要设置如下变量: PATH=E:KeilcC51BIN TMP=E:KeilcTmp C51INC=E:KeilcC51INC C51LIB=E:KeilcC51LIB 在Windows NT环境下设置方式为:我的电脑-属性-高级-环境变量-新建 设置好运行环境后就可以在命令提示符下编译C语言源程序,其格式如下: C51 源文件名 控制命令 . 9.2 Cx51简介 9.2.1 Cx51的扩展 Cx51编译器兼容ANSI C标准,又扩展支持了8051微处理,器,其扩展内容如下: 存储区; 存储区类型; 存储模型; 存储类型说明符; 变量数据类型说明符; 位变量和位可寻址数据; SFR; 指针; 函数属性。 9.2.2 存储区 8051单片机支持程序存储器和数据存储器的分离,存储器根据读写情况可以分为:程序存储区(ROM)、快速读写存储器(内部RAM)、随机读写存储器(外部RAM)。,1. 程序存储器(code) 在8051中程序存储器是只读存储器,其空间为64K 。 2. 内部数据存储器 在8051单片机中,内部数据存储器属于快速可读写存储器,与51兼容的扩展型单片机最多有256字节内部数据存储区。 3. 外部数据存储器 外部数据存储器又称随机读写存储器,访问存储空间为64KB。其访问速度要比内部RAM慢。访问外部RAM的数据要使用指针进行间接访问。 9.2.3 存储模式 在Cx51中,存储器模式可以确定一些变量在缺省情况下的存储器类型。程序中可用编译器控制命令SMALL、COMPACT、LARGE指定存储器模式。,1. SMALL模式 SMALL模式中所有的变量在缺省的情况下位于单片机的内部数据区,这和用data存储类型标识符声明的变量是相同的。在本模式中变量访问非常有效,然而所有对象和堆栈必须适和内部RAM。 2. COMPACT模式 COMPACT模式中所有变量在缺省的情况下都存放在外部数据区的一页(256B)中,这和用pdata存储类型标识符声明的变量是相同的。 3. Large模式 LARGE模式下所有变量在缺省情况下存放在外部数据存储区(范围为64k字节),这和用xdata存储类型标识符声明的变量是一致的,该模式使用数据指针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类型用于声明两个连续地址的特殊功能寄存器(地址范围为065 535)。 9.2.5 指针 所谓指针就是存储单元的地址,指针变量就是存放地址的变量。 在Cx51编译器中指针可以分为两种类型:通用指针和指定存储区地址指针。,1. 通用指针 所谓通用指针是指未对指向的对象(变量)存储空间进行说明的指针。通用指针可以访问8051存储空间中与位置无关的任何变量。 2. 存储区域的指针 所谓存储区域的指针是指在指针声明中包含存储器类型。 程序中使用指定存储区域的指针速度要比通用指针快(指定存储区域指针在编译时Cx51编译器已知道其存储区域,而通用指针直到运行时才确定存储区域),在实时控制系统中应尽量使用指定存储区域的指针。 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:函数的形式参数列表。 small compact large:函数的存储模式。 reentrant:函数是否可重入,要注意可重入函数中的变量的同步。 interrupt:可以用interrupt告诉计算机这个函数是中断服务函数。 using:指定函数所使用的寄存器组。 2. 中断函数 在Cx51中提供了中断支持函数,中断服务程序在Cx51中是,以中断函数的形式出现的。此类型函数用interrupt关键字进行描述。 3. 再入函数 Cx51在调用函数时,函数的形式参数及函数内的局部变量将会动态地存储在固定的存储单元中,一旦函数在执行时被中断,若再次调用该函数时,函数的形式参数及函数内的局部变量将会被覆盖,导致程序不能正常运行,为此,可在定义函数时用reentrant属性引入再入函数。 再入函数可以被递归调用,也可以被多个程序调用。 9.3 Cx51开发工具简介 Cx51是专用于8051等嵌入式应用的开发工具套件。该软件可以对C源文件、汇编源文件进行编译、连接、生成并调试目标程序。 Cx51以工程的形式组织各类资源文件,其程序开发步骤如下: 1. 创建工程,选择Cx51开发环境Project菜单,选择New Project菜单项来建立一个新的工程。 2. 选择目标芯片 在工程建立完成后,器件选择窗口便会弹出,从器件库选择单片机应用系统所使用的8051芯片 。 3. 创建并编写C51源文件 选择Cx51开发环境的File菜单的New菜单项,这时会出现新建源程序编辑窗口,新建一个C语言源文件 。 4. 把源程序文件加入到工程中 在建立了源程序文件后,必须把源程序文件添加到工程中,以构成一个完整的工程项目。 5. 为目标芯片添加启动代码 在main()函数执行前,首先应复位单片机内部RAM、完成对硬件初始化等操作,即执行一段初始化代码。在Cx51中,STARTUP.A51文件是启动代码文件,该文件适合大多数8051及其派生系列的目标芯片。,6. 设置编译、连接环境 7. 对工程进行编译和连接 选择Cx51开发环境的Project菜单中的Build target菜单项,则对工程中的文件进行编译、汇编和连接,生成二进制代码的目标文件(.obj)、列表文件(.lst)、绝对地址目标文件、绝对地址列表文件(.m51)、连接输入文件(.imp)。 8. 调试程序 选择Debug菜单的Start/stop Debug Session菜单项,即可进入调试状态。在调试状态下,目标文件自动转换为HEX文件。在调试中可以对单片机的寄存器、内存、所产生的汇编代码、串口的输出情况等进行监视 9.4 Cx51应用程序设计举例 9.4.1 输入 单片机中的I/O口(即P0,P1,P2,P3)可以单独的作为输入/输出口使用。在实际的开发过程中输入输出是单片机最基本的功能。,【例9-11】根据图9-9所示实验电路,要求如下: 用输入电路中接入的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=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 return 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-12】如图9-9所示,同时点亮4个发光二极管时,对74LS164的完整控制程序。 源程序代码如下: #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(lsdata); delay(); CONTROL=1; return 0; 9.4.3 定时器/计数器 【例9-13】用定时器来控制发光二极管的亮/灭,间隔时间为2秒。 源程序代码如下: #include #include,sbit CLK=P11; sbit DATA=P10; sbit CONTROL=P12; unsigned char count; void InitTimer() TMOD=0x01; TH0=0x3c; TL0=0xB0; EA=1; ET0=1; TR0=1; void Timer0(void) interrupt 1 using 1 ,TR0=0; TH0=0x3c; TL0=0xB0; if(count40) count+; else count=0; CONTROL=!CONTROL; TR0=1; ,void WriteData(unsigned int lsdata) unsigned char i; for(i=0;i8;i+) CLK=1; lsdata=lsdata1; DATA=CY; CLK=0; CLK=1; void InitData() ,c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国艺术花市场分析及竞争策略研究报告
- 地下综合管廊项目可行性研究报告
- 2025至2030年中国商标里布行业投资前景及策略咨询报告
- 5G基站全覆盖工程可行性研究报告(参考范文)
- 企业乒乓球比赛备战计划
- 2025年黄羽鸡项目可行性研究报告
- 2025年欧式枕套项目可行性研究报告
- 物业管理公司员工工作与休息安排计划
- 2025外研版英语七年级上册教学计划的未来展望
- 小学语文三年级复习计划及知识点梳理
- 2024年度医疗设备报废回收与资源化利用合同3篇
- 医疗器械的维护和保养方法
- 石材养护报价单
- 世界各地的建筑·小学生课件
- 试题-医疗器械质量管理培训
- 海外医疗合同模板
- 防火防爆技术课件:电气防爆
- 微笑曲线中文版课件
- 《古典决策理论》课件
- 观景台施工合同模板
- 存款代持协议书范文模板
评论
0/150
提交评论