《单片机控制步进电机系统毕业论文.doc》由会员分享,可在线阅读,更多相关《单片机控制步进电机系统毕业论文.doc(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 摘 要本文介绍了单片机控制步进电机的系统。在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。步进电机是机电控制中一种常用的执行机构, 其原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。本系统的硬件组成主要有:51系列单片机、L298N驱动电路、直流电压源等。同时对系统设计中所用到的一些软件都进行了介绍。本系统用51系列单片机和L298N电机驱动芯片并加入了键盘来控制步进电机实现转向、转速等。系统中使用的是永磁式二相步进电机,相应的驱动和控制电路对于其整体性能起着非常重要的作用。经系统调试,能够很好的控制步进电机的正反转、加减速、急停,从而达到预期目的。整个系
2、统具有结构简单、可靠性高、成本低和实用性强等特点,具有较高的通用性和应用推广价值。关键词:51系列单片机;L298N驱动电路;正反转;急停AbstractThis paper, we introduces a stepper motor system which controlled by SCM. In the Electrical era today, Motor has been playing a very important role in the modernization of production and life. Stepper motor is a common used
3、 implementing agency in motor control. The principle is by switching the coil current and the order in its each phase to make a step-by-step rotary motor. The hardware of the system including: 51 series SCM, L298N driving circuit, DC voltage source , etc. At the same time some of the software that u
4、sed in system designing are introduced. The system used 51 SCM and L298N motor drive chip and joined the keyboard to control the stepper motor to achieve the direction and speed of rotation, etc. A Permanent Magnet two-phase stepper motor is used in the system. The corresponding drive and control ci
5、rcuit plays a very important role to its overall performance. Though system testing, it can be very convenient to control the stepper motor, such as acceleration , deceleration, exigency stop so as to achieve the desired objectives. The whole system is simple in structure with characteristics of hig
6、h reliability, low cost and practicality which has a higher universal characteristic and the promotional and applied value.Keywords: 51 SCM; L298N driving circuit; Positive and reversal rotation; ExigencyII 目 录1 绪论11.1技术概述11.2本课题的背景和意义21.3本设计完成的工作32 单片机控制步进电机系统简介42.1单片机系统概述42.2AT89C51功能概述42.2.1引脚功能说
7、明52.2.2时钟振荡器72.3步进电机概述73 常用软件基础知识93.1C语言程序设计概述93.1.1C语言出现的历史背景93.1.2C语言的特点103.2Keil编译器软件简介123.2.1使用Keil软件建立一个工程133.2.2使用Debug进行调试173.3STC-ISP软件介绍193.3.1程序烧写过程194 系统概述及设计224.1整体结构224.2系统作用224.3系统应用225 硬件设计235.1硬件设计原则235.2MCU最小系统电路设计235.2.1复位电路设计245.2.2时钟电路设计245.2.3上拉电阻的作用255.3L298N驱动电路设计255.3.1L298N芯
8、片简介265.3.2MAX-232电路设计265.3.3MAX-232 芯片简介265.4 键盘的电路设计275.4.1 键盘的特性275.4.2 按键的确认275.4.3 键盘的工作方式285.5 电源电路设计296 软件设计306.1程序模块306.1.1中断模块306.1.2延时模块32结论33致谢34参考文献35附录A 资料翻译36A.1英文资料36A.2中文译文45附录B 程序源码52附录C 系统总体电路图57附录D 实物图58IV沈阳理工大学学士学位论文1 绪论1.1 技术概述在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。无论是在工农业生产还是在日常生活中的
9、家用电器,都大量地使用着各种各样的电动机。因此对电动机的控制变得越来越重要了。电动机的控制技术的发展得力于微电子技术、电力电子技术、传感器技术、永磁材料技术、自动控制技术、微机应用技术的最新发展成就。正是这些技术的进步使电动机控制技术化。步进电机是机电控制中一种常用的执行机构,其原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的。同时通过控制脉冲频率来控
10、制电机转动的速度和加速度,从而达到调速的目的,现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM),混合式步进电机(HB)和单相式步进电机等。永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7.50;反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1.50,但噪声和振动都很大。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。混合式步进电机是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8“而五相步进角一般为0.720。这种步进电机的应用最为广泛。步进电机的一些基本参数:电机固有步距角:它表示控制系统
11、每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机给出的值为0.90/1.80(表示半步工作时为0.90、整步工作时为1.80),这个步距角可以称之为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。步进电机的相数:是指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同,一般二相电机的步距角为0.90/1.80、三相的为0.750/1.50、五相的为0.360/0.720。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。如果使用细分驱动器,则“
12、相数”将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。保持转矩 :是指步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成为衡量步进电机最重要的参数之一。比如,当人们说2 Nm的步进电机,在没有特殊说明的情况下是指保持转矩为2 Nm的步进电机。步进电机的一些特点:a. 一般步进电机的精度为步进角的3%-5%,且不累积。b.步进电机外表允许的最高温度。c.步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃于失步,因
13、此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在130C以上,有的甚至高达200C以上,所以步进电机外表温度80C-90C完全正常。d.步进电机的力矩会随转速的升高而下降。e.当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。f.步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。介绍步进电机的一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负
14、载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。g.步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。因此,微电脑控制步进电机最适合。本文以永磁式步进电机为例,来介绍如何用MCS-51 系列单片机控制步进电机。1.2 本课题的背景和意义步进电机可以对旋转角度和转动速度进行高精度控制。步进电机作为控制执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统和精密机械等领域。例如,在
15、仪器仪表,机床设备以及计算机的外围设备中(如打印机和绘图仪等),凡需要对转角进行精确控制的情况下,使用步进电机最为理想。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。上个世纪就出现了步进电动机,它是一种可以自由回转的电磁铁,动作原理和今天的反应式步进电动机没有什么区别,也是依靠气隙磁导的变化来产生电磁转矩。在本世纪初,由于资本主义列强争夺殖民地,造船工业发展很快,同时也使得步进电动机的技术得到了长足的进步。到了80年代后,由于廉价的微型计算机以多功能的姿态出现,步进电动机的控制方式更加灵活多样。原来的步进电机控制系统采用分立元件或者集成电路组成的控制回路,
16、不仅调试安装复杂,要消耗大量元器件,而且一旦定型之后,要改变控制方案就一定要重新设计电路。计算机则通过软件来控制步进电机,更好地挖掘出电动机的潜力。因此,用计算机控制步进电机已经成为了一种必然的趋势,也符合数字化的时代趋势。现在比较常用的步进电机包括反应式步进电机、永磁式步进电机、混合式步进电机和单相式步进电机等。其中反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。现阶段,反应式步进电机获得最多的应用。1.3 本设计完成的工作本次毕业设计是单片机控制步进电机方面的应用。这个设计最终目的是设计出一个可以控制步进电机旋转的系统。本次设计主要实现了以下几个功能:
17、(1) 设计一个稳压电源将输入电压稳压到适合单片机工作的5V电源。(2) 设计一个外围驱动电路来驱动步进电机旋转。(3) 加入按键来控制步进电机旋转所要求的数据。(4) 最后编写软件部分,将程序输入单片机并运行系统,使系统工作。2 单片机控制步进电机系统简介2.1 单片机系统概述随着材料科学、工艺技术、计算机技术的发展与进步,电路系统向着集成度极高的方向发展。CPU的生产制造技术,也朝着综合性、技术性、实用性发展。如CPU的运算位数从4位、8位 到32位机的发展,运算速度从8 MHz、32 MHz到1.6 GHz。可以说是日新月异的发展着。其中单片机在控制系统中的应用是越来越普遍了。单片机控制
18、系统是以单片机(CPU)为核心部件,扩展一些外部接口和设备,组成单片机工业控制机,主要用于工业过程控制。要进行单片机系统设计首先必须具有一定的硬件基础知识;其次,需要具有一定的软件设计能力,能够根据系统的要求,灵活地设计出所需要的程序;第三,具有综合运用知识的能力。最后,还必须掌握生产过程的工艺性能及被测参数的测量方法,以及被控对象的动、静态特性,有时甚至要求给出被控对象的数学模型。2.2 AT89C51功能概述AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的只读程序存储器PEROM和128bytes的随机存取数据存储器,器件采用
19、公司的高密度,非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和FLASH存储单元,功能强大。此单片机可为您提供许多高性价比的应用场合。AT89C51提供以下标准功能:4K字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个向量两级中断结构,一个全双工串行通讯口,内置一个精密比较器,片内振荡器及时钟电路,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的工作模式,空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作,并禁止其它所有部件工作
20、直到下一个硬件复位。2.2.1 引脚功能说明:MCS-51是标准的40脚双列直插式集成电路芯片,引脚排列请参见图2.1:图2.1 AT89C51的引脚图VCC:电源电压; GND:地;P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写1可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FLASH编程时,P0口接受指令字节,而在程序效验时,输出指令字节,效验时,要求外接上拉电阻。P1口:P1口是一个带有内部上拉电阻的8位
21、双向I/O口,P1的输出缓冲级可驱动 (吸收或输出电流)4个TTL逻辑门电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。FLASH编程和程序效验期间,P1接收低8位地址。P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动 (吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXD
22、PTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVXRI)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。FLASH编程或效验时,P2亦接收高位地址和其它控制信号。P3口:P3口是一个带有内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动 (吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。P3口除了作为一般的I/O口线外,更重要的用途是他的第二个功能,如下表所示:表1 P3口A
23、T89C2051特殊功能端口引脚功能特性P3.0RXD(串行口输入)P3.1TXD(并行口输入)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时计数外部输入0)P3.5T1(定时计数外部输入0)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通)P3口还接收一些用于FLASH闪速存储器编程和程序效验的控制信号。RST:复位输入。其引脚一旦变成两个机器周期以上的高电平,所有的I/O口都将复位到1状态,当振荡器正在工作时,持续两个机器周期以上高电平便可完成复位,每个机器周期为12个振荡时钟周期。EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(0
24、000HFFFFH),EA端必须保持低电平接地,需注意的是:如果加密位LB1被编程,复位是内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP。XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器输出端2.2.2 时钟振荡器AT89C51中有一个用于构成内部振荡器的高增益反向放大器,引脚XTAL1和 XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈器件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路
25、参见图2.2。外接石英晶体或陶瓷振荡器及电容 C1,C2接在放大器的反馈回路中构成并联振荡电路。对外接电容 C1,C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低,振荡器工作的稳定性,起振得难易程度及温度稳定性,如果使用石英晶体,推荐电容使用30PF10PF,而如使用陶瓷振荡器建议选择40PF10PF。 图 2.2 时钟振荡电路2.3 步进电机概述步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机
26、只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。步进电机有几个显著特点:1、 步进电机可以直接接受数字信号,而无需模/数变换;2、步进电机具有快速启/停控制能力,可在瞬间实现启动和停止;3、步进电机具有高精度的特点,步距角在0.3690度之间;4、定位准确;现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。反应式步进电机的转子
27、磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。感应子式步进电机与传统的反应式步进电机相比,结构上转子加有永磁体,以提供软磁材料的工作点,而定子激磁只需提供变化的磁场而不必提供磁材料工作点的耗能,因此该电机效率高,电流小,发热低。因永磁体的存在,该电机具有较强的反电势,其自身阻尼作用比较好,使其在运转过程中比较平稳、噪音低、低频振动小。感应子式步进电机某种程度上可以看作是低速同步电机。一个四相电机可以作四相运行,也可以作二相运行。(必须采用双极电压驱动),而反应式电机则不能如此。3 常用软件基础知识3.1 C语言程序设计概述3.1.1 C语言出现的历史背景C语言是国际上广泛流
28、行的计算机高级语言,既可用来写系统软件,也可用来写应用软件。C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL60。1960年出现的ALGOL60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。1963年英国的剑桥大学推出了CPL (combined programming language)语言。CPL语言在ALGOL60的基础上接近硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richard对CPL语言做了简化,推出了BCPL(basic combined programming language)语言。1970年美国贝尔实验室的Ken
29、 Thompson以BCPL语言为基础, 又做了进一步简化,设计出了很简单的而且很接近硬件的B语言(取BCPL的第一个字母),并用B语言写了第一个UNIX操作系统,在PDP 7上实现。1971年在PDP 11/20上实现了B语言,并写了UNIX操作系统。但B语言过于简单,功能有限。1972年至1973年间,贝尔实验室的D.M.Ritchie 在B语言的基础上设计出了C语言(取BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等)。最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。1973年,K.Thomp
30、son和D.M.Ritchie两人合作把UNIX的90%以上用C改写,即UNIX第5版。原来的UNIX 操作系统是1969年由美国的贝尔实验室的K.Thompson和D.M.Ritchie开发成功的,是用汇编语言写的。1972年至1973年间,贝尔实验室的D.M.Ritchie 在B语言的基础上设计出了C语言(取BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等)。最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。1973年,K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上用C
31、改写,即UNIX第5版。原来的UNIX 操作系统是1969年由美国的贝尔实验室的K.Thompson和D.M.Ritchie开发成功的,是用汇编语言写的。后来,C语言多次做了改进,但主要还是在贝尔实验室内部使用。直到1975年UNIX第6版公布后,C语言的突出优点才引起人们的普遍注意。1977年出现了不依赖于具体机器的C语言编译文本可移植C语言编译程序,使C移植到其他机器时所需做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现。例如VAX、 AT&T等计算机系统都相继开发了UNIX。随着UNIX的日益广泛使用,C语言也迅速得到推广。C语言和UNIX可以说是一对孪生兄弟,在发展
32、过程中相辅相成。1978年以后,C语言已先后移植到大、中、小、微型机上,已独立于UNIX和PDP了。现在C语言已风靡全世界,成为世界上应用最广泛的几种计算机语言之一。以1978年发表的UNIX第7版中的C编译程序为基础,Brian W.Kernighan和Dennis M.Ritchie (合称K&R)合著了影响深远的名著The C Programming Language,这本书中介绍的C语言成为后来广泛使用的C语言版本的基础,它被称为标准C。1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C的发展和扩充,制定了新的标准,称为ANSI C。 ANSI C比原来的标准C有
33、了很大的发展。K & R在1988年修改了他们的经典著作The C Programming Language,按照 ANSI C 标准重新写了该书。1987年,ANSI又公布了新标准87 ANSIC。1990年,国际标准化组织ISO(International Standard Organization) 接受87 ANSI C为ISO C 的标准(ISO 98991990)。目前流行的C编译系统都是以它为基础的。本书的叙述基本上以ANSI C 为基础。目前广泛流行的各种版本C语言编译系统虽然基本部分是相同的,但也有一些不同。在微型机上使用的有Microsoft C、Turbo C、Quick
34、 C、BORLAND C等,它们的不同版本又略有差异。因此,应了解所用的计算机系统所配置的C编译系统的特点和规定。3.1.2 C语言的特点C语言通常称为中级计算机语言。中级语言并没有贬义,不意味着它功能差、难以使用、或者比B A S I C、P a s c a l那样的高级语言原始,也不意味着它与汇编语言相似,会给使用者带来类似的麻烦。C语言之所以被称为中级语言,是因为它把高级语言的成分同汇编语言的功能结合起来了。作为中级语言,C允许对位、字节和地址这些计算机功能中的基本成分进行操作。C语言程序非常容易移植。可移植性表示为某种计算机写的软件可以用到另一种机器上去。举例来说,如果为苹果机写的一个
35、程序能够方便地改为可以在IBM PC 上运行的程序,则称为是可移植的。所有的高级语言都支持数据类型的概念。一个数据类型定义了一个变量的取值范围和可在其上操作的一组运算。常见的数据类型是整型、字符型和实数型。虽然C语言有五种基本数据类型,但与P a s c a l或A d a相比,它却不是强类型语言。C程序允许几乎所有的类型转换。例如,字符型和整型数据能够自由地混合在大多数表达式中进行运算。这在强类型高级语言中是不允许的。C语言的另一个重要特点是它仅有3 2个关键字,这些关键字就是构成C语言的命令。和IBM PC的B A S I C相比,后者包含的关键字达1 5 9个之多。 C语言是结构化语言。
36、虽然从严格的学术观点上看,C语言是块结构(b l o c k - s t r u c t u r e d)语言,但是它还是常被称为结构化语言。这是因为它在结构上类似于A L G O L、P a s c a l和M o d u l a - 2(从技术上讲,块结构语言允许在过程和函数中定义过程或函数。用这种方法,全局和局部的概念可以通过“作用域”规则加以扩展,“作用域”管理变量和过程的“可见性”。因为C语言不允许在函数中定义函数,所以不能称之为通常意义上的块结构语言)。结构化语言的显著特征是代码和数据的分离。这种语言能够把执行某个特殊任务的指令和数据从程序的其余部分分离出去、隐藏起来。获得隔离的一
37、个方法是调用使用局部(临时)变量的子程序。通过使用局部变量,我们能够写出对程序其它部分没有副作用的子程序。这使得编写共享代码段的程序变得十分简单。如果开发了一些分离很好的函数,在引用时我们仅需要知道函数做什么,不必知道它如何做。切记:过度使用全局变量(可以被全部程序访问的变量)会由于意外的副作用而在程序中引入错误。结构化语言比非结构化语言更易于程序设计,用结构化语言编写的程序的清晰性使得它们更易于维护。这已是人们普遍接受的观点了。C语言的主要结构成分是函数C的独立子程序。在C语言中,函数是一种构件(程序块),是完成程序功能的基本构件。函数允许一个程序的诸多任务被分别定义和编码,使程序模块化。可
38、以确信,一个好的函数不仅能正确工作且不会对程序的其它部分产生副作用。 C语言是程序员的语言。也许你会问“所有的计算机语言不都是程序员使用的吗?”,回答是断然的“否”。我们考虑典型的非程序员的语言C O B O L和B A S I C。C O B O L的设计使程序员难以改变所编写代码的可靠性,甚至不能提高代码的编写速度。然而C O B O L设计者的本意却是打算使非程序员能读程序(这是不大可能的事)。注意,这并不是攻击C O B O L的优点,而是想指出,它没有被设计成为程序员的理想语言。BASIC 的主要目的是允许非专业程序员在计算机上编程解决比较简单的问题。与其形成鲜明对照的是C 语言,由
39、于程序生成、修改和现场测试自始至终均由真正的程序员进行,因而它实现了程序员的期望:很少限制、很少强求、块结构、独立的函数以及紧凑的关键字集合。用C语言编程,程序员可以获得高效机器代码,其效率几乎接近汇编语言代码。C语言被程序员广泛使用的另一个原因是可以用它代替汇编语言。汇编语言使用的汇编指令,是能够在计算机上直接执行的二进制机器码的符号表示。汇编语言的每个操作都对应为计算机执行的单一指令。虽然汇编语言给予程序员达到最大灵活性和最高效率的潜力,但开发和调试汇编语言程序的困难是难以忍受的。非结构性使得汇编语言程序难于阅读、改进和维护。也许更重要的是,汇编语言程序不能在使用不同C P U的机器间移植
40、。最初,C语言被用于系统程序设计。一个“系统程序”是一大类程序的一部分,这一大类构成了计算机操作系统及实用程序。通常被称为系统程序的有:1、 操作系统;2、 翻译程序; 3、 编辑程序;4、 汇编程序;5、 编译程序;6、 数据库管理程序;随着C语言的普及,加之其可移植性和高效率,许多程序员用它设计各类程序。几乎所有的计算机上都有C语言编译程序,这使我们可以很少改动甚至不加改动地将为一种机器写的C 语言源程序在另一种机器上编译执行。可移植性节省了时间和财力。C语言不仅在速度和结构上有它的优势,而且每个C语言系统都提供了专门的函数库,程序员可以根据不同需要对其进行剪裁,以适应各种程序的设计。由于
41、它允许(更准确地说是鼓励)分别编译,所以C语言可使程序员方便地管理大型项目,最大限度地减少重复劳动。3.2 Keil编译器软件简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更
42、能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。图3.1 C51工具包整体结构图Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,如图3.1所示,其中uVision与Ishell分别是C51 for Windows和for DOS的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成
43、标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM 中。3.2.1 使用Keil软件建立一个工程Keil是目前进行51单片机开发最常用的编译软件。关于Keil的使用,有很多的资料介绍,这里只介绍其整个编译过程,在最短时间内开始使用Easy 51DP-2开发板。对于Keil更详细的介绍,可以参考一些专门书籍资料。在Keil里,每一个完整的程序,都是以一个工程的形式建立的。一个工程里可以有一个或多个*.c文件和*.h文件,但只可以有一个main()函数。一般的做法是将包含main()函数的C
44、文件加入到工程中,其他文件以#include头文件的形式加到这个C文件里。这样,在编译的时候,其他的文件会被自动的导入到工程里来。打开Keil软件后,出现(图3.2)所示界面。当然,如果Keil在上次关闭时有打开的工程,再一次打开时它会自动加载上一次的工程文件。图3.2 Keil软件主界面首先点击Project-New Project(Project-Open Project为打开一个已经存在的工程),如图3.3所示。图3.3 Keil软件打开新工程界面点开后,在出现的对话框中选择工程存在路径,单击“保存”后,出现(如图3.4所示)界面。在此界面上选择电路板上所用的单片机型号:Atmel AT
45、89S51(或者是AT89S52,视开发板上具体型号而定),单击“确定”。图3.4 选择电路板上所用的单片机型号设置完成后,软件会提示“是否将8051上电初始化程序添加入工程?”如图3.5所示,这个一般选择“否”。(关于STARTUP.A51的相关内容可查阅相应资料)图3.5 是否将8051上电初始化程序添加入工程这样,就建立了一个空的51工程。接下来的事,就是在这个工程里面加入自己的程序代码。点击,或者File-New,便建立了一个空的文本框。现在,就可以开始在里面输入你的代码了。保存时注意:如果是用C语言写的程序,则将文本保存成*.c,如果是用汇编写的程序,则将文本存成*.asm。到目前为
46、步,我们已经建立了一个工程,也写了一个程序代码。但现在还不能开始编译。因为还没有将程序代码添加到工程里面去。下一步就是将写完的程序添加到工程里面,如图3.6所示,在左边Project Workspace里的Source Group 1上右击,选择Add Files to Group Source Group 1。在打开的对话框中,选择刚存的文件路径和对应的扩展名。这样,程序就添加进了这个工程。图3.6 添加文件到工程中下一步,就开始编译刚输入进去的代码。点击工具栏中的按钮。接着,Keil会打出下面的提示:Build target Target 1assembling led.asm.linki
47、ng.Program Size: data=8.0 xdata=0 code=100first - 0 Error(s), 0 Warning(s).其中“first - 0 Error(s), 0 Warning(s).”说明现在的工程编译通过,0个错误和0个警告。建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:单击,或者在Project Workspace里Target 1上右击,选择“Options for Target Target 1”。出现如图3.7所示对话框,选择“Output”按图示,将箭头所指的多选框勾上,点“确定”。现在再点击重新编译,系统提示:“creating hex file from first.”。便会在工程所在文件夹里生成HEX文件。图3.7 生成HEX文件3.2.2 使用Debug进行调试Keil有很强大的调试功能,可以显示C程序的反汇编代码、可以计算代码运行的时间、可以显示程序中某一变量的值能用好这个调试工具对编写单片机程序会有很大的帮助。同样的,在这里,只对Debug进行简单应用介绍,更详细的使用方法可以参看相关书籍资料。图3.8 调试前设置窗口首先,单击,弹出如图3
限制150内