c51单片机应用与c语言程序设计(精简版).docx
高等职业教育创新实践教材工程对象教学法系列教材C5I单片机应用与C语言程序设计基于机器人工程对象的项目实践秦志强等编著电子工业出版社内容提要本教材以两轮智能移动机器人工程项目为主线,通过循序渐进的构建智能机 器人的智能控制器和传感器电路,将单片机外围接口特性、内部结构原理、应用 设计方法和C语言程序设计等知识通过先项目实践、后总结归纳的方式传授给 学生,彻底打破了传统的教学方法和教学体系结构,解决了单片机原理与应用, 以及C语言程序设计等核心专业基础课程抽象与难学的老大难问题。本书可作为中等职业教育和高等职业教育的单片机技术与应用以及嵌入式C语言程序设计两门课程的学习教材和教学参考书,也可以作为本科院校工程训练、电子制作的实践教材和相应专业课程的实验配套教材,同时还可以供广大希望从事嵌入式系统开发和C语言程序设计的学生或者个人自学使用。刖 S本书可作为高职高专院校工程类专业二年级及以上学生学习单片机原理与应用的主导教材,也 可以作为大学二年级及以上工程类专业学生学习单片机原理与应用的辅助教材,还可以供其他机器 人爱好者使用。使用者只需要有初级的编程基础和简单的计算机操作和基础的英语,不需要专业的 C语言基础。本书的任务是要让每个学习单片机原理与应用的学生或者个人都能够以教育机器人作为 程対象,让他们在开发自己的教育机器人过程中学习和掌握单片机的基本原理与应用系统的开发技 能,包括: C51系列单片机的C语言编程环境和使用方法; 单片机的输入接口、使用方法和C程序设计: 单片机的输出接口、使用方法和C程序设计; 単片机的接口电气特性和外围电路; 单片机的串口通讯、应用与C程序设计; 单片机与LCD的连接与C编程; 基础传感器原理和用C51编程实现机器人基本智能的实现方法等。本书在编写过程当中非常注意的一点,就是寓教于乐,兴趣为先。将传统的学习单片机原理与 应用(即先理论讲解,然后实验验证)的模式,改变为先实验和实践如何应用,然后再归纳单片机 原理(即先实践,后归纳)的模式,并以机器人作为贯穿实践过程的典型工程对象,使整个教学和 学习过程充满挑战和乐趣,大大提高学习效率。同时在学习和实践的过程中,还可以培养学生的系 统世界观和方法论。熟练掌握本教材的学生或者个人,可以继续高级机器人制作的课程。通过本课程的学习和实践,可以引领学生或者个人进入神奇的信息技术世界和机器人世界。本书的完成,编者首先要感谢东南大学的张文锦教授,是他的建议促成了本书的成文;其次要 感谢深圳市德普施科技有限公司的邓莹和阮科,邓莹对本书的最后完成付出了巨大的努力,阮科 一-验证了本书的所有项目;还要感谢德普施科技的前员刘庆秋,是他最早帮助起草了本书的初稿。编者2007年10月目 录前言I第一章 C5!单片机编程环境与机器人智能1单片机与C51系列单片机1机器人与C51单片机2任务获得软件3任务二安装软件4任务三硬件连接4任务四你的第一个程序5printf函数错误!未定义书签。C语言数据类型错误!未定义书签。常量错误!未定义书签。« 16-112«0运算符错误!未定义书签。任务五做完实验关断电源11工程素质和技能归纳12科学精神的培养12第二章单片机输出接口与伺服电机控制13C51单片机的输入/输出接口13任务单灯闪烁控制13while 语句15任务二机器人伺服电机控制信号17任务三 计数并控制循环次数19for语句19任务四 用你的计算机来控制机器人的运动23scant 函数24工程素质和技能归纳25科学精神的培养25第三章 C语言函数与机器人巡航控制26任务基本巡航动作26任务二 匀加速/减速运动31任务三用函数调用简化运动程序33任务四高级主题用数组建立复杂运动38字符型数据38数组40switch 格句43工程素质和技能归纳45科学精神的培养45第四章单片机输入接口与机器人触觉导航46触觉导航与单片机输入接口46任务一 安装并测试机器人胡须46位操作符48if语句49?操作符49任务二 通过胡须导航52关系与逻辑运算符53任务三机器人进入死区后的人工智能决策57工程素质和技能归纳61科学精神的培养61第五章C51输入/输出接口与红外线导航62使用红外线发射和接收器件探测道路62任务 搭建并测试IR发射和探测器对63任务二探测和避开障碍物67任务三 高性能的IR导航71do.while 语句73任务四俯视的探测器74工程素质和技能归纳79科学精神的培养79第六章机器人的距离检测80用同样的IR LED/探测电路检测距离80任务一定时/计数器的运用80任务测试扫描频率84任务三 尾随小车87任务四 跟踪条纹带93工程素质和技能归纳96科学精神的培养96第七章 机器人中UART的应用97串口控制寄存器SCON98RS232电平与TTL电平转换98任务 编写串口通信程序99串口工作流程103工程素质和技能归纳104科学精神的培养104第八章LCD应用编程及与机器人的集成技术105任务 认识LCD显示器105任务二 编写LCD模块驱动程序108指针112任务三 用LCD显示机器人运动状态113C语言的编译预处理113工程素质和技能归纳120科学精神的培养120第九章 多传感器智能机器人121多传感器智能机器人的设计目标121任务 多传感器信息与C语言结构体的使用和编程121结构体121任务二智能机器人的行为控制策略和编程128工程素质和技能归纳133半中口坛133附录AC语言概要归纳134附录B微控制器原理归纳144附录C无焊锡面包板148附录DLCD模块电路151附录E本讲义所使用机器人零配件清单152第一章C51单片机编程环境与机器人智能单片机与C51系列单片机什么是单片机?一台能够工作的计算机要有这样几个部份:CPU (Central Processing Unit,中央处理单 元:进行运算、控制)、RAM (Random Access Memory,随机存储器:数据存储)、ROM (Read Only Memory,只读存储器:程序存储)、输入/输出设备(串行口、并行等)。在个人计算 机上这些部份被分成在F块芯片或者插卡,安装个称之为主板的印刷线路板上。而在单片 机中,这些部份全部被做到块集成电路芯片中,所以就称为单片机。学习单片机有必要吗?与我们经常使用的个人计算机、笔记本电脑相比,单片机的功能是很小的,那学它干啥 吗?实际生活中并不是任何需要计算机的场合都要求计算机有很高的性能,比如空调温度的 控制,冰箱温度的控制等都不需要很复杂高级的计算机。应用的关键是看是否够用,是否有 很好的性能价格比。单片机凭借体积小、质量轻、价格便宜等优势,已经渗透到我们生活的各个领域:导弹 的导航装置、飞机上各种仪表的控制、工业自动化过程的实时控制利数据处理、广泛使用的 各种智能IC卡、民用豪华轿乍的安全保障系统、录象机、摄象机、全自动洗衣机、程控玩 具、电广宠物等等。更不用说臼动控制领域的机器人、智能仪衣、医疗器械了。因此,単片机的学习、开发与应用将造就一批计算机应用、嵌入式系统设计与智能化控 制的科学家、工程师,同时,学习使用单片机也是了解通用计算机原理与结构的最佳选择。C51系列单片之一::AT89s52是一种髙性能、低功耗的8位单片机,内含8k字节ISP(In-system Programmable, 系统在线编程)可反复擦写1000次的FLASH只读程序存储器,器件采用ATMEL公司的高 密度、非易失性存储技术制造,兼容标准MCS51指令系统及其引脚结构。在实际工程应用 中,功能强大的AT89s52已成为许多高性价比嵌入式控制应用系统的解决方案。嵌入式系统嵌入式系统是指嵌入到T程对象中能够完成某些相対简单或者某些特定功能的计算机 系统。与从8位机迅速向16位、32位、64位过渡的通用计算机系统相比,嵌入式系统有其 功能的特殊要求和成本的特殊考虑,从而决定了嵌入式系统在高、中、低端系统三个层次共 存的局面。在低端嵌入式系统中,8位单片机从20世纪70年代初期诞生至今还直在业 生产和日常生活中广泛使用。嵌入式系统嵌入到対象系统中,并在对象环境下运行。与对象领域相关的操作主要是对 外界物理参数进行采集、处理,对对象实现控制,并与操作者进行人机交互等。鉴于嵌入式低端应用対象的有限响应要求、嵌入式系统低端应用的巨大市场以及8位机 具有的计算能力,可以预测在未来相当长的时间内,8位机仍然是嵌入式应用中的主流机型。早期的单片机应用程序开发通常需要仿真机、编程机等配套工具,要配置这些工具需要 笔不小的投资。本教材采用的AT89s52,不需要仿真机和编程机,只需运用ISP电缆就可 以对单片机的FLASH反复擦写1000次以匕 因此使用起来特别方便简单,尤其适合初学 者使用,而且配置十分灵活,可扩展性特别强。实验用,考核文档In-svstem Programmable (ISP,系统在线编程)In-system programmable是指用户可把编译好的程序代码通过,条"下载线"直接写 入到器件的编程(烧录)方法,已经编程的器件也可以用1SP方式擦除或再编程。1SP所用 的“下载线”并非不需要成本,但相对于传统的“编程器”成本已经大大下降了。通常FLASH 型芯片会具备ISP下载能力。本教材将引导你如何运用AT89S52作为机器人的大脑制作一款教育机器人,并采用C 语言对AT89S52进行编程,使机器人实现下述四个基本智能任务:1 .安装传感器以探测周边环境;2 .基于传感器信息做出决策;3 .控制机器人运动(通过操作带动轮子旋转的电机);4 .与用户交换信息;通过这些任务的完成,使你在无限的乐趣之中,不知不觉地掌握C51单片机原理与应 用开发技术,以及C语言程序设计技术,轻松走上嵌入式系统开发之路。为了方便单片机微控制器与电源、ISP下载电缆、串口线以及各种传感器和电机的连接, 需要制作一个电路板,并将单片机插在教学板匕如图1T所示。本教材将此电路板叫做教 学板。图!-1 C51单片机教学板机器人与C51单片机图1-2所示的是本教材使用的机器人工程对象,它采用AT89s52单片机作为大脑,通过 教学板安装在机器人底盘上。本教材将以此机器人作为典型工程对象,完成上节提到的机器 人所需具备的四种基本能力,使机器人具有基本的智能。本教材假设你已经学习过基础机 器人制作课程,并已经组装好该机器人的机械套件和伺服电机,且已经调试好了机器人伺 服电机的零点。如果没有学习过基础机器人制作与编程,也不要紧,可以在边学习该课 程的同时,参考基础机器人制作与编程的相关章节,在后面的任务中,如果需要,会给 出相关指引。图1-2采用C5I单片机的机器人本章首先通过以下步骤告诉你如何安装和使用C51单片机的C语言编程开发环境,如何 开发第一个简单机器人程序,并在机器人上如何运行你写的这个程序。本章的具体任务包括: 寻找并安装开发编程软件 连接机器人到电池或者供电的电源 连接单片机教学板ISP接口到计算机,以便编程»连接单片机教学板串行接口到计算机,以便调试和交互 运用C语言初次编写少量的程序,运用编译器编译生成可执行文件,然后下载到单片 机上,通过串口观察机器人上的单片机教学板的执行结果 完成后断开电源任务获得软件在本课程的学习中,你将反复用到三款软件:KeiluVision2IDE集成开发环境、SL ISP 下载软件、串口调试软件等。1. Keil uVision2 IDE集成开发环境该软件是德国KEIL公司出品的51系列单片机C语言集成开发系统。如果你已经学习过 基础机器人制作与编程,并掌握了 PBASIC语言编程思想和基本技能,你将会发现,C 语言在语法结构上更加灵活,功能更加强大,但同时学习和理解起来也稍困难些。你可以在KEIL公司的网站上获得该软件的安装包。2. SLISP软件下载工具该软件是广州天河双龙电子有限公司推出的款ISP下载软件,使用该软件你可以将可 执行文件下载到你的机器人单片机上。该软件的使用需要你的计算机有并行口。你可以在双龙公司的网站中获得该软件。3. 串口调试软件此软件是用来显示单片机与计算机的交互信息的。在硬件上,你的计算机至少要有串口 或USB接口来与单片机教学板的串口连接。教材光盘中提供了该软件的绿色版本,无需安装即可使用。教你招,如何从互联网上获得你想要的东西:当今互联网如此发达,以至我们可以“万事”不求人。熟练运用互联网的搜索引擎,你 也可以做个"百事通。如今有两大著名的搜索引擎,国内的,全球的,只要你输 入关键字,你就可以找到相关的任何东西:比如你想找Kdl软件,你可以先打开google网, 然后输入关键字''Keil下载”,你就可以找到很多相关的网站。如http: ?boa rdID=7&ID=6352 &pane = 1任务二安装软件到目前为止,你已从网站上,或从教材配套光盘中获得了软件安装包。在教材配套光盘 中提供了几个文件夹,它们分别是KeiluVision2安装包、ISP软件安装包、串口调试终端、 头文件和本书例程的源码。软件的安装很简单,与你安装的其他软件过程一样。4. Keil uVision21 .执行Keil uVision2安装程序,选择安装Eval Version版进行安装2 .在后续出现的窗口中全部选择Next按钮,将程序默认安装在C: Program FilesKeil文件目录下3 .将光盘“头文件”文件夹中的文件拷贝到C:ProgramFilesKeilC51INC文件夹 里Keil uVision IDE软件安装到你的电脑上的同时,会在你的计算机桌面建立一个快捷 方式。安装ISP下载软件与此类似。任务三硬件连接C51教学板(或者说机器人大脑)需要连接电源以便运 行,同时也需要连接到PC机(或笔记本电脑)以便编程和 交互。以上接线完成后,你就可以用编辑器软件来对系统进 行测试。下面将告诉你如何完成上述硬件连接任务。串口的连接机器人教学板通过串口电缆连接到PC机(或笔记本电 脑)上以便与用户交互。如果你的计算机有串行接口,直接 使用串口连接电缆。如果没有,此时需要使用USB转串口适 配器,如图1-3所示。你只需将该串口线一端的串口连接到 你的机器人教学板,而另一端连接到计算的USB 口上。如果你使用的是Windows98操作系统,在使用该适配器 调试程序前,你还需要给适配器安装驱动程序,相关步骤请 按照适配器硬件和软件安装说明书进行。如果是Windows2000 以上的操作系统,则通常可以直接使用,无需安装驱动程序。图1-3 USB转串口适配器图!-4 ISP下载线ISP下载线的连接机器人程序通过连接到PC机或者笔记本电脑的并口上的ISP下载线来下载到教学板上 的単片机内。图1-4所示为ISP下载线。下载线一端连接到PC机或者笔记本的并行接口上, 而另一端(小端)连接到教学板上的程序下载口上。电池的安装本教材使用的机器人采用五号碱性电池给机器人电机和教学板供电,在继续下面的任务 前,请先检査机器人底部电池盒内是否已经装好电池,并是否有正常的电压输出。如果没有,请更换新的电池。更换过程中,确保每颗电池都按照塑料盒子里面标记的电池极性(" +和一")方向装入。012图1-5处于关闭状态的三位开关012图1-6处了 1位状态的三位开关给教学板和单片机进行通电检査教学底板上有一个三位开关(见图!-5),当开 关拨到“O”位断开教学底板电源。无论你是否将电 池组或者其它电源连接到教学底板上,只要三位开 关位于“0”位,那么设备就处于关闭状态。现在将三位开关由“0”位拨至“1”位,打开 教学板电源,如图6所示。检查教学底板上标有 “Pwr”的绿色LED电源指示灯是否变亮。如果没有, 检查电池盒里的电池和电池盒的接头是否已经插到 教学板的电源插座上。开关“2”你将会在后续章节中用到。将开关拨至“2”后,电源不仅要结教学板供电,同时还会给机器人的执行机构伺服电机供电,同样的,此时绿色LED电源指示灯仍然会 变亮。任务四你的第一个程序你编写和测试的第一个C语言程序将告诉AT89S52单片机控制器,让它在执行程序时发 送一条信息给PC机(或笔记本电脑)。创建与编辑你的第一个程序双击Keil uVision IDE的图标,启动Keil uVision IDE程序,你会得到图1-7所示的 Keil uVision2 IDE的主界面。通过用Project菜单中的New Project命令建立项目文件, 过程如下:图 1-7 Keil uVision IDE的主界内iNew Project.图 !-9 Create New Project对话框1 .点击Project,会出现图1-8所示的菜单画面,然后选择“New Project",将出 现图9所示对话框。Import RVisionl Project.Open ProjectClose ProjectFile Extensions, Books and图1-8 Project菜单画面2 .在文件名中输入如“HelloRoBot",保存在你想保存的位置(如D:中级机器人制 作与编程、程序、Chapter 1),可不用加后缀名,点击“保存”,后会出现图1T0 所示的窗口。3 .这里要求我们选择芯片的类型,Keil uVision2 IDE几乎支持所有的51核心单片 机,并以列表的形式给出。本教材使用的是Atmel公司的AT89s52,在Keil uVision2 IDE提供的数据库(Data base)列表中找到此款芯片、然后点击确定,会出现图1-11 所示的窗口,询问你是否加载8051启动代码,在这里我们选择“否”,不加载。(如果你选择“是”,对你的程序没有任何影响。若你感兴趣,可选择“是”,看 看编译器加载了哪些代码。)之后会出现图1T2画面,此时即得到了项目文件。Select Devi ce for Target , TargetVendor: AtmelDevice: AT89S52L Use Extended Linker (1X51) instead of BL51Family: MCS-51厂 Use Extended Assembler (AX51) insteed of A51Data baseDescription:AT89LV55AT89s4D12AT89ssiAT89S52AT89553AT8958252AT8xC5122AT8xC51SNDlAT91F40416AT91F40816AT91FR40162AT91FR40428051 based Full Static CMOS controller wi th Three-Level Pr,_J32 I/O lines, 3 Timers/Counters, 8 Interrupts Sources, Wat, 8K Flash Memory, 256 Bytes On-chip RAM图1-10单片机型号选择窗口? Ctw $(u>4ar4 ¢051 Stvtvf <F»14«r KU Filt l« Fr«j«et ?图1T1是否加载8051启动代码提示窗U图1-12目标工程窗U图1-13 C语言源文件保存对话框项目文件创建后,这时只有一个框架,紧接着需要向项目文件中添加程序文件内容。Keil uVision2支持C语言程序。可以是已经建立好的程序文件,也可以是新建的程序文件。如果是建立好了的程序文件,则直接用后面的方法添加;如果是新建立的程序文件,则先将程 序文件.c存盘后再添加。点击g按钮(或通过 “File->New”操作)为该项目新 建一个C语言程序文件,保存后 弹出图1T3所示的对话窗口,将 文件保存在项目文件夹中,在文 件类型中填写.C (这里.C为文件 扩展名,表示此文件类型为C语 言源文件),因为你下面将采用C 语言编写第一个程序。例程:HelloRoBot.c#includeuart. h> int main (void)uart_Init(); /串口初始化printf(Hello, this is a message from your Robotn9: while (.1);将该例程键入Keil uVision IDE的编辑器,并以文件名HelloRoBot. c保存。下步就 是添加该文件到H标工程项目了,其具体添加过程如下:1 .单击图!-12中的,将出现图1-14所示的列表;2 .然后右键点击"Source Group 1n ,在出现的菜单下选择"Add File To Group "Source Group 1",出现 Add Files to Group Source * Group 1 , 对话框。在 该对话框中选择需要添加的程序文件,如刚建立HelloRoBot. c,单击Add按钮, 把所选文件添加到项目文件中。一次可添加多个文件。3 .程序文件添加到项目文件中去后,这时上图中"Source Group 1”的前面将出现 个"+ ”号;单击它将出现刚添加的源文件名,如图1T5所示(注意:图中显示双击源文件即可显示源文件的编辑界面。下面来产生下载需要的可执行文件。要产生可执行的.Hex文件,需要对目标工程"Target 1” 进行编译设置,右键点击"Target 1",选择"Option for target 'Target 1' "。 点击"output”,选择其中的"Create HEX File",如图1T6所示,点击确定关闭设置窗 口。然后点击Keil uVision IDE快捷工具栏中的m,Keil的C编译器开始根据要生成的 目标文件类型对目标工程项目中的C语言源文件进行编译。编译过程中,可以观察到源文件 中有没有错误产生,如果没有错误产生,在IDE主窗口的下面出现如图1-17的提示信息, 表明已成功生成了可执行文件,并存储在C语言源程序存储的目录中,文件名就是 HelloRoBot. Hex怕1-16设置目标工程的编译输出文件类型/Target 1'compiling linking. Program SBuild targetHeZloRoBot.c.e: data-58.3 xdata-0 code-1246creating hex file from "HelloRoBot". "HelloRoBot" - 0 Error(s), 0 Warning(s).I -Build X-Command 人 Find in Files JL100 C 2图1-17编译过程的输出提示信息下载可执行文件到单片机点击ISP下载软件图标,打开ISP下载软件窗口如图1-18所示,并将通信参数设置成 图中所示的参数。第一个为接口类型选择窗口,该窗口的下拉列表中提供了许多接口类型:串口 COM1- COM16,并 LPT1LPT3以及USB接口等。教材使用并口 LPT1。第二个为下载速度选择窗口,该窗口内容与接口类型紧密相连。不同的接口,该窗口就 提供不同内容的下载速度。若选择LPT1,则提供了五种下载速度:TURBO模式、FAST模式、 NORMAL模式、SLOW模式和TURBO SLOW模式。在这五种模式下,程序下载速度依次减小。教 材中的例程使用的是第一个模式TURBO模式,下载速度最快。第三个为单片机型号选择窗口。如何快速地认识新的软件?面对一款新的软件,你可能有一种无从下手的感觉:这个是干嘛的?那个又是干嘛的? 其实,软件本身就提供了问题的答案。每款软件都提供了帮助文档。如SL ISP软件界面的右上角有个“问号”按钮,单击 它就弹出一系列的选项,这些选项就对该款软件做出了大致的解释,有助你快速掌握软件的 使用。点击“Flash”,选择要下载的可执行HEX文件HelloRoBot. Hex,选择后点击编程 开始下载。如果下载成功,则下面显示完成次数:x次”,否则显示'失败次数:x次”。如果芯片是第二次下载程序,请先选中“擦除”复选框。图1-18 ISP软件下载窗口举一反三如果你已经学习过基础机器人制作与编程,并已经掌握了采用BASIC Stamp系列单 片机模块的PBASIC语言开发技能,请你与刚介绍的C语言编程过程进行比较,看看有何 不同。并思考一下,这些不同对于初学者而言各有何优缺点。用串口调试软件查看单片机输出信息打开串口调试终端,选择串口 “C0M1”后点击“打开串口”,在“接收区”内你看到了 什么?什么也没有!为什么呢?因为从你把执行文件成功下载到单片机的那个时刻开始,程 序就开始运行了:单片机已经向PC机发送了信息。你错过了接收。怎么办呢?在机器人教学板上给你提供了 “Reset”按钮,它可以让下载到单片机内的程序重新运 行次。按下“Reset”按钮,是不是出现如图1-19所示画面呢?图!-19串口调试终端HelloRoBot.c是如何工作的?例程中第一行代码是HelloRoBot. c所包含的头文件。该头文件在编译过程中用来将下 面程序中需要用到的标准数据类型和由C语言编译器提供的一些标准输入/输出函数、中断 服务函数等包括进来,生成可执行代码。头文件中可以嵌套头文件,同时也可以直接定义一 些常用的功能函数。本例程中的头文件uart.h在本教材的后续任务中都耍用到,它其中就 包含了本例程中以及后面例程中都要用到的uartnit()函数的定义和实现。下面先讲一下函数的概念。个较大的C语言程序一般分成若干个模块,每个模块实现 一定的功能,我们称之为函数。任何个C语言程序本身就是一个函数,该函数必须以main 函数作为程序的起点,通常称之为主函数。主函数可以调用任何子函数,子函数之间也可以 相互调用(但是不可以调用主函数)。函数定义的一般格式为:函数返回值的类型函数名(形式参数 1,形式参数2丿第二行就是程序的入口 main函数。main前面的int是指定main的函数返回值类型为 整数类型,括号中void或无内容表示没有形式参数。每个函数的主体都耍用“括起来 (反思一下同PBASIC语言编程的区别)。函数的具体讲解将在第.三第。main函数主体中有两行语句:第一行是串口初始化函数uartnit(),用来规定单片 机串口是如何与PC通信的。有兴趣的读者可以打开uart.h头文件,看看该函数是如何实现 的,如果其中有很多内容不懂,不要紧,记住这个函数的功能就行,以后慢慢学习和理解。 这行语句中“”后的是注释。注释是一行会被编译器忽视的文字,因为注释是为了给人阅 读。函数体中的第二行语句printf命令是单片机通过串口向PC机发送一条信息。HelloRoBotYourTurn.c 是如何工作的?在介绍main函数内容之前,先向你讲解一下C语言的些基本知识。任务五做完实验关断电源把电源从教学底板上断开很重要,原因有几点:首先,如果系统在不使用时没有消耗电 能,电池可以用的更久:其次,在以后的试验中,你将在教学底板上的面包板上搭建电路, 搭建电路时,应使面包板断电。如果是在教室,老师可能会有额外的要求,比如断开串口电 缆,把教学底板存放到安全的地方等等。总之,你做完试验后最重要的步是断开电源。断开电源比较容易,只要三位开关拨到左边的位即可。工程素质和技能归纳1 . C51系列单片机Keil uVision IDE (集成开发环境)软件和ISP下载软件的载和 安装2 .机器人用C51教学板与计算机或者笔记本的连接3 .如何在集成开发环境中创建目标工程文件,并添加和编辑C语言源程序4 . C语言程序的编译和下载5 .串口调试终端的使用科学精神的培养1 .比较Keil uVision IDE与BASIC Stamp系列开发环境的优缺点,找出它们的共同 特点2 .比较第一个C语言程序与第一个PBASIC程序的异同,找出它们的共同点3 .比较BASIC Stamp的PBASIC调试指令和Keil C的输出指令printf的异同第二章 单片机输出接口与伺服电机控制本章教你如何用单片机AT89S52的输入/输出接口来连接、测试和控制机器人伺服电机。 为此,你需要理解和掌握用单片机输入/输出接口控制伺服电机方向、速度和运行时间的相 关原理和编程技术。C51单片机的输入/输出接口控制机器人伺服电机以不同速度运动是通过让单片机的输入/输出(I/O)口输出不同的 脉冲序列来实现的。51系列单片机有4个8位的并行I/O : PO、Pl、P2和P3。这4个接 ,既可以作为输入,也可以作为输出;可按8位处理,也可按位方式(1位)使用。图2T 是单片机AT89S52的引脚定义图,这是个标准的40引脚双列直插式集成电路芯片。PDIP(T2) P1.O 匚140VCCCT2 EX) P1.1 匚239 PO.O (ADO)P1.2 匚338 PO.1 (AD1)P1.3 匚437 PO.2 (AD2)P1.4 匚536 PO.3 (AD3)(MOSI) P1.5 匚635 PO.4 (AD4) r(MISO) P1.6 匚734 PO.5 (AD5)(SCK) P1.7 匚833 PO.6 (AD6)RST匚932 PO.7 (AD7)丿(RXD) P3.O 匚1O31 EAA/PP(TXD) P3.! 匚1 130 ALE/PROG(INTO) P3.2 匚1229 PSEN(INT1) P3.3 匚1328 P2.7 (A15)(TO) P3.4 匚1427 P2.6 (A14)(T1) P3.5 匚1526 P2.5 (A13)(wn)P3.6 匚1625 P2.4 (A12)(RD) P3.7 匚1724 P2.3 (A11),XTAL2 匚1823 P2.2 (A1O)XTAL!匚1922 P2.1 (A9)GND匚2021 P2.O (A8)丿图2-1单片机AT89s52引脚I/O定义图AT89S52 引脚如图2-1所示,AT89S52共有40根引脚,其中32根是"0端引脚。在这32根引脚 中,有29根具备两种用途(用圆括号写出),既可作为12端,也可作为控制信号或地 址及数据线。任务单灯闪烁控制为了验证P1 口的输出电平是不是由你编写的程序输出的电平,可以采用个非常简单 有效的办法,就是在你想验证的端口位接个发光二极管。当你输出高电平时,发光二级管 灭;输出低电平时,发光二极管亮。在本任务中,使用P1端的第一脚(记为Pl_0)来控制发光二极管以1HZ的频率不 断闪烁。LED电路元件1 .红色发光二极管2个2 . 470Q电阻2个LED电路搭建如果你已经学习过基础机器人制作这本教材,你肯定对图22所示电路很熟悉。按 照图22上边所示电路,在智能机器人教学板的面包板上搭建起实际电路。实际搭建好的电 路参考图22下边的照片。实际搭建电路时注意:确认发光二极管的短针脚(阴极)插入通过电阻与Pl_0相连确认发光二极管的长针脚(阳极)插入“VCC”插口D1, R1 / pi,o 1. . IM|vcc470LED图2-2发光二极管与I/O脚P1J)的连接例程:HighLowLed.c接通板上的电源输入、保存、下载并运行程序HighLowLed.c (整个过程请参考第一章)观察与Pl_0连接的LED是否每隔秒发光、关闭一次#includeBoeBot. h>uart_Init ();printf("The LED while (1)#include<uart. h> int main (void)初始化串口connected to PIO is blinking! n");Pl_0=l; delaynms (500);Pl_ 0=0;delaynms (500); P1_O输出高电平延时500ms/ Pl_0输出低电平延长亮的时间,实验 延时500msHigh Low Led.c是如何工作的?与第一章程序相比,本例程多使用了一个头文件BoeBot.h,在该头文件中定义了两个延 时函数:void delay_nms(unsigned int i)与 void delay_nus(unsigned int i)»无符号整型数据unsigned int与第一章讲到的整型数据int相比,无符号整型数据unsigned int只有一个区别:数据的 取值范围从32768+32767变为65535,也就是说它只能取非负整数。delay_nms()是毫秒级的延时,而delay_nus()是微秒级的延时。如果你想延时1秒钟, 可以使用语句de/ay_"ms(701)丿,T毫秒的延时则用delay_nus(1000)来完成。注意:上述的延时函数是在外部晶振为12MHz的情况下设计的,如果外部晶振频率不 是12MHz,调用这两个函数所产生的真正延时就会发生变化。晶振的作用单片机要能工作,就必须有一个标准时钟信号,而晶振就是为单片机提供标准时钟信号。串口初始化函数,在头文件uart.h中实现,具体内容将在后面章节讲解。调用printf是为了在程序执行