1、机器人大脑:微控制器C51单片机,南昌大学机电工程学院,2018年10月15日,机器人技术介绍,2,第一章 C51单片机编程环境与机器人智能,单片机与C51系列单片机,一台能够工作的计算机要有这样几个部份: 1、CPU (Central Processing Unit,中央处理单元:运算、控制) 2、RAM(Random Access Memory,随机存储器:数据存储)、3、ROM(Read Only Memory,只读存储器:程序存储) 4、输入/输出设备(串行口、并行口等)。在个人计算机上这些部份被分成若干块芯片或者插卡,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份全部被做到
2、一块集成电路芯片中,所以就称为单片机。,2018年10月15日,机器人技术介绍,3,学习单片机有必要吗?,与我们经常使用的个人计算机、笔记本电脑相比,单片机的功能是很小的,那学它干啥吗?实际生活中并不是任何需要计算机的场合都要求计算机有很高的性能,比如空调温度的控制,冰箱温度的控制等都不需要很复杂高级的计算机。应用的关键是看是否够用,是否有很好的性能价格比。,2018年10月15日,机器人技术介绍,4,单片机凭借体积小、质量轻、价格便宜等优势,已经渗透到我们生活的各个领域:导弹的导航装置、飞机上各种仪表的控制、工业自动化过程的实时控制和数据处理、广泛使用的各种智能IC 卡、民用豪华轿车的安全保
3、障系统、录象机、摄象机、全自动洗衣机、程控玩具、电子宠物等等。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用、嵌入式系统设计与智能化控制的科学家、工程师,同时,学习使用单片机也是了解通用计算机原理与结构的最佳选择。,2018年10月15日,机器人技术介绍,5,C51 系列单片机,一提到单片机,你就会经常听到这样一些名词:MCS51、8051、C51 等等,它们之间究竟是什么关系呢?MCS51 是指由美国INTEL 公司生产的一系列单片机的总称。这一系列单片机包括了好些品种,如8031,8051,8751 等,其中8051 是最典型的产品,
4、该系列单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051 来称呼MCS51 系列单 片机。,2018年10月15日,机器人技术介绍,6,INTEL 公司将MCS51 的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求。其中较典型的一款单片机AT89C51(简称C51)由于由美国ATMEL 公司以8051 为内核开发生产。这里使用的AT89S52 单片机是在此基础上改进而来。,AT89S52 是一种高性能、低功耗的8 位单片机,内含8k 字节ISP(In-system Programmable,
5、系统在线编程)可反复擦写1000 次的FLASH 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准MCS51 指令系统及其引脚结构。在实际工程应用中,功能强大的AT89S52 已成为许多高性价比嵌入式控制应用系统的解决方案。,2018年10月15日,机器人技术介绍,7,什么是单片机的位数?,现在市场上闹得沸沸扬扬的微软新推出的系统 VISTA 是64 位操作系统;大家常用的系统,如WINDOWS XP、WINDOWS 2003 等,是32 位操作系统;这里你将用到的单片机AT89S52是8 位的,而有些厂家生产的单片机则是16 位的。那么,这些位数:64、32、
6、16、8 代表什么意义呢?,简单地说,这些位数指的是 CPU 能一次处理的数据的最大长度。当然,这里的位是指二进制的位,而非十进制的位。AT89S52 是8 位的单片机,意味着它如果要处理16 位数据的话就应该分两次处理。,2018年10月15日,机器人技术介绍,8,嵌入式系统,嵌入式系统是指嵌入到工程对象中能够完成某些相对简单或者某些特定功能的计算机系统。与从8 位机迅速向16 位、32 位、64 位过渡的通用计算机系统相比,嵌入式系统有其功能的特殊要求和成本的特殊考虑,从而决定了嵌入式系统在高、中、低端系统三个层次共存的局面。在低端嵌入式系统中,8 位单片机从20 世纪70 年代初期诞生至
7、今还一直在工业生产和日常生活中广泛使用。,2018年10月15日,机器人技术介绍,9,嵌入式系统嵌入到对象系统中,并在对象环境下运行。与对象领域相关的操作主要是对外界物理参数进行采集、处理,对对象实现控制,并与操作者进行人机交互等。鉴于嵌入式低端应用对象的有限响应要求、嵌入式系统低端应用的巨大市场以及8 位机具有的计算能力,可以预测在未来相当长的时间内,8 位机仍然是嵌入式应用中的主流机型。,2018年10月15日,机器人技术介绍,10,早期的单片机应用程序开发通常需要仿真机、编程机等配套工具,要配置这些工具需要一笔不小的投资。这里采用的AT89S52,不需要仿真机和编程机,只需运用ISP 电
8、缆就可以对单片机的FLASH 反复擦写1000 次以上,因此使用起来特别方便简单,尤其适合初学者使用,而且配置十分灵活,可扩展性特别强。,2018年10月15日,机器人技术介绍,11,In-system Programmable(ISP,系统在线编程),In-system programmable 是指用户可把已编译好的程序代码通过一条“下载线”直接写入到器件的编程(烧录)方法,已经编程的器件也可以用ISP 方式擦除或再编程。ISP 所用的“下载线”并非不需要成本,但相对于传统的“编程器”成本已经大大下降了。通常FLASH型芯片会具备ISP 下载能力。,2018年10月15日,机器人技术介绍,
9、12,在这将引导你如何运用 AT89S52 作为机器人的大脑制作一款教育机器人,并采用C语言对AT89S52 进行编程,使机器人实现下述四个基本智能任务:1安装传感器以探测周边环境;2基于传感器信息做出决策;3控制机器人运动(通过操作带动轮子旋转的电机);4与用户交换信息;,2018年10月15日,机器人技术介绍,13,通过这些任务的完成,使你在无限的乐趣之中,不知不觉地掌握C51 单片机原理与应用开发技术,以及C 语言程序设计技术,轻松走上嵌入式系统开发之路。为了方便单片机微控制器与电源、ISP 下载电缆、串口线以及各种传感器和电机的连接,需要制作一个电路板,并将单片机插在教学板上,如图1-
10、1 所示。将此电路板叫做教学板,2018年10月15日,机器人技术介绍,14,C51+AVR宝贝车控制板,一款拥有C51和AVR功能的单片机控制板。C51部分采用的是AT89S52单片机,AVR部分采用的是ALTMEGA8的单片机。,89S52的主要性能: 与MCS-51 单片机产品兼容8K 字节在系统可编程Flash 存储器 1000 次擦写周期 全静态操作:0Hz33Hz 三级加密程序存储器 32 个可编程I/O 口线 三个16 位定时器/计数器 八个中断源 全双工UART 串行通道 低功耗空闲和掉电模式 掉电后中断可唤醒 看门狗定时器 双数据指针 掉电标识符,2018年10月15日,机器
11、人技术介绍,15,AT89S52 是一种低功耗、高性能CMOS8 位微控制器, 具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash ,使得AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52 具有以下标准功能:8k 字节Flash,256 字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器, 一个6 向量2 级中断结构
12、, 全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。,2018年10月15日,机器人技术介绍,16,机器人与C51单片机,图 1-2 所示的是使用的机器人工程对象,它采用AT89S52 单片机作为大脑,通过教学板安装在机器人底盘上。将以此机器人作为典型工程对象,完成上节提到的机器人所需具备的四种基本能力,使机器人具有基本的智能。假设你已经学习过基础机器人
13、制作课程,并已经组装好该机器人的机械套件和伺服电机,且已经调试好了机器人伺服电机的零点。如果没有学习过基础机器人制作与编程,也不要紧,可以在边学习该课 程的同时,参考基础机器人制作与编程的相关章节,在后面的任务中,如果需要,会给出相关指引。,2018年10月15日,机器人技术介绍,17,AVR的主要性能:,高性能、低功耗的 8 位AVR 微处理器先进的RISC 结构130 条指令。大多数指令执行时间为单个时钟周期32 个8 位通用工作寄存器全静态工作工作于16 MHz 时性能高达16 MIPS只需两个时钟周期的硬件乘法器非易失性程序和数据存储器8K 字节的系统内可编程Flash 擦写寿命: 1
14、0,000 次。具有独立锁定位的可选Boot 代码区通过片上Boot 程序实现系统内编程真正的同时读写操作512 字节的EEPROM擦写寿命: 100,000 次。1K 字节的片内SRAM 可以对锁定位进行编程以实现用户程序的加密外设特点两个具有独立预分频器8 位定时器/ 计数器, 其中之一有比较功能。 一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器 具有独立振荡器的实时计数器RTC三通道PWM,TQFP 与MLF 封装的8 路ADC 8 路10 位ADC,PDIP 封装的6 路ADC,8 路10 位ADC,面向字节的两线接口 两个可编程的串行USART可工作于主机/ 从机模式
15、的SPI 串行接口。具有独立片内振荡器的可编程看门狗定时器片内模拟比较器特殊的处理器特点上电复位以及可编程的掉电检测片内经过标定的RC 振荡器片内/ 片外中断源5 种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式及Standby 模式。I/O 和封装23 个可编程的I/O 口28 引脚PDIP 封装,32 引脚TQFP 封装,32 引脚MLF 封装。工作电压2.7 - 5.5V (ATmega8L) 4.5 - 5.5V (ATmega8)。速度等级0 - 8 MHz (ATmega8L) 0 - 16 MHz (ATmega8)4 Mhz 时功耗, 3V, 25C工作模式:
16、3.6 mA空闲模式: 1.0 mA 掉电模式: 0.5uA,2018年10月15日,机器人技术介绍,18,2018年10月15日,机器人技术介绍,19,2018年10月15日,机器人技术介绍,20,2018年10月15日,机器人技术介绍,21,2018年10月15日,机器人技术介绍,22,本章首先通过以下步骤告诉你如何安装和使用C51 单片机的C 语言编程开发环境,如何开发第一个简单机器人程序,并在机器人上如何运行你写的这个程序。本章的具体任务包括: 寻找并安装开发编程软件 连接机器人到电池或者供电的电源 连接单片机教学板 ISP 接口到计算机,以便编程 连接单片机教学板串行接口到计算机,以
17、便调试和 交互 运用 C 语言初次编写少量的程序,运用编译器编译生成可 执行文件,然后下载到单片机上,通过串口观察机器人上的单片机教学板的执行结果 完成后断开电源,2018年10月15日,机器人技术介绍,23,任务一 获得软件,在本课程的学习中,你将反复用到三款软件:Keil uVision2 IDE 集成开发环境、SL ISP下载软件、串口调试软件等。,1Keil uVision2 IDE 集成开发环境,该软件是德国KEIL 公司出品的51 系列单片机C 语言集成开发系统。如果你已经学习过基础机器人制作与编程,并掌握了PBASIC 语言编程思想和基本技能,你将会发现,C语言在语法结构上更加灵
18、活,功能更加强大,但同时学习和理解起来也稍困难些。,你可以在KEIL公司的网站上获得该软件的安装包。,2018年10月15日,机器人技术介绍,24,2SL ISP软件下载工具,该软件是广州天河双龙电子有限公司推出的一款ISP下载软件,使用该软件你可以将可执行文件下载到你的机器人单片机上。该软件的使用需要你的计算机有并行口。你可以在双龙公司的网站中获得该软件。这里采用USBASP 在线下载器,2018年10月15日,机器人技术介绍,25,3串口调试软件,此软件是用来显示单片机与计算机的交互信息的。在硬件上,你的计算机至少要有串口或USB 接口来与单片机教学板的串口连接。教材光盘中提供了该软件的绿
19、色版本,无需安装即可使用。,2018年10月15日,机器人技术介绍,26,教你一招,如何从互联网上获得你想要的东西:,当今互联网如此发达,以至我们可以“万事”不求人。熟练运用互联网的搜索引擎,你也可以做个“百事通”。如今有两大著名的搜索引擎,国内,全球的,只要你输入关键字,你就可以找到相关的任何东西;比如你想找Keil软件,你可以先打开google网,然后输入关键字“Keil 下载”,你就可以找到很多相关的网站,2018年10月15日,机器人技术介绍,27,任务二 安装软件,安装Keil uVision2 执行 Keil uVision2 安装程序,选择安装Eval Version 版进行安装
20、2. 在后续出现的窗口中全部选择Next 按钮,将程序默认安装在C:ProgramFilesKeil 文件目录下3. 将光盘“头文件”文件夹中的文件拷贝到C:Program FilesKeilC51INC 文件夹里 Keil uVision IDE 软件安装到你的电脑上的同时,会在你的计算机桌面建立一个快捷方式。安装ISP 下载软件与此类似。,2018年10月15日,机器人技术介绍,28,任务三 硬件连接,C51 教学板(或者说机器人大脑)需要连接电源以便运行,同时也需要连接到PC 机(或笔记本电脑)以便编程和交互。以上接线完成后,你就可以用编辑器软件来对系统进行测试。下面将告诉你如何完成上述
21、硬件连接任务。,2018年10月15日,机器人技术介绍,29,串口的连接,机器人教学板通过串口电缆连接到PC 机(或笔记本电脑)上以便与用户交互。如果你的计算机有串行接口,直接使用串口连接电缆。如果没有,此时需要使用USB 转串口适配器,如图1-3 所示。你只需将该串口线一端的串口连接到你的机器人教学板,而另一端连接到计算的USB 口上。,图1-3 USB 转串口适配器,2018年10月15日,机器人技术介绍,30,如果你使用的是Windows98 操作系统,在使用该适配器调试程序前,你还需要给适配器安装驱动程序,相关步骤请按照适配器硬件和软件安装说明书进行。如果是Windows2000以上的
22、操作系统,则通常可以直接使用,无需安装驱动程序。,ISP 下载线的连接,机器人程序通过连接到PC 机或者笔记本电脑的并口上的ISP 下载线来下载到教学板上的单片机内。图1-4 所示为ISP 下载线。下载线一端连接到PC 机或者笔记本的并行接口上,而另一端(小端)连接到教学板上的程序下载口上。,2018年10月15日,机器人技术介绍,31,USBASP 在线下载器,2018年10月15日,机器人技术介绍,32,电池的安装,机器人采用五号碱性电池给机器人电机和教学板供电,在继续下面的任务前,请先检查机器人底部电池盒内是否已经装好电池,并是否有正常的电压输出。如果没有,请更换新的电池。更换过程中,确
23、保每颗电池都按照塑料盒子里面标记的电池极性(“” 和“”)方向装入。,2018年10月15日,机器人技术介绍,33,给教学板和单片机进行通电检查,教学底板上有一个三位开关(见图1-5),当开关拨到“0”位断开教学底板电源。无论你是否将电池组或者其它电源连接到教学底板上,只要三位开关位于“0”位,那么设备就处于关闭状态。,2018年10月15日,机器人技术介绍,34,现在将三位开关由“0”位拨至“1”位,打开教学板电源,如图1-6 所示。检查教学底板上标有“Pwr”的绿色LED 电源指示灯是否变亮。如果没有,检查电池盒里的电池和电池盒的接头是否已经插到教学板的电源插座上。,开关“2”你将会在后续
24、章节中用到。将开关拨至“2”后,电源不仅要结教学板供电,同时还会给机器人的执行机构伺服电机供电,同样的,此时绿色LED 电源指示灯仍然会变亮。,2018年10月15日,机器人技术介绍,35,任务四 你的第一个程序,你编写和测试的第一个 C 语言程序将告AT89S52 单片机控制器,让它在执行程序时发送一条信息给PC 机(或笔记本电脑)。,创建与编辑你的第一个程序,双击Keil uVision IDE 的图标,启动Keil uVision IDE 程序,你会得到图1-7 所示的Keil uVision2 IDE 的主界面。通过用Project 菜单中的New Project 命令建立项目文件,过
25、程如下:,2018年10月15日,机器人技术介绍,36,图1-7 Keil uVision IDE的主界面,2018年10月15日,机器人技术介绍,37,1. 点击 Project,会出现图1-8 所示的菜单画面,然后选择“New Project”,将出现图1-9 所示对话框。,2018年10月15日,机器人技术介绍,38,2. 在文件名中输入如“HelloRoBot”,保存在你想保存的位置(如D:中级机器人制作与编程程序Chapter 1),可不用加后缀名,点击“保存”,后会出现图1-10所示的窗口。,图1-10 单片机型号选择窗口,2018年10月15日,机器人技术介绍,39,3. 这里要
26、求我们选择芯片的类型,Keil uVision2 IDE 几乎支持所有的51 核心单片机,并以列表的形式给出。这里使用的是Atmel 公司的AT89S52,在Keil uVision2 IDE 提供的数据库(Data base)列表中找到此款芯片,然后点击确定,会出现图1-11所示的窗口,询问你是否加载8051 启动代码,在这里我们选择“否”,不加载。(如果你选择“是”,对你的程序没有任何影响。若你感兴趣,可选择“是”,看看编译器加载了哪些代码。)之后会出现图1-12 画面,此时即得到了项目文件。,2018年10月15日,机器人技术介绍,40,项目文件创建后,这时只有一个框架,紧接着需要向项目
27、文件中添加程序文件内容。KeiluVision2 支持C 语言程序。可以是已经建立好的程序文件,也可以是新建的程序文件。如果是建立好了的程序文件,则直接用后面的方法添加;如果是新建立的程序文件,则先将程序文件.c 存盘后再添加。,点击按钮 ( 或通过“File-New”操作)为该项目新建一个C 语言程序文件,保存后弹出图1-13 所示的对话窗口,将文件保存在项目文件夹中,在文件类型中填写.C(这里.C 为文件扩展名,表示此文件类型为C 语言源文件),因为你下面将采用C语言编写第一个程序。,2018年10月15日,机器人技术介绍,41,例程:HelloRoBot.c #include int m
28、ain(void) uart_Init(); /串口初始化 printf(“Hello,this is a message from your Robotn“); while(1); ,将该例程键入Keil uVision IDE 的编辑器,并以文件名HelloRoBot.c 保存。下一步就图1-13 C语言源文件保存对话框是添加该文件到目标工程项目了,其具体添加过程如下:,2018年10月15日,机器人技术介绍,42,1. 单击图 1-12 中的“+”,将出现图1-14 所示的列表; 2. 然后右键点击“Source Group 1”,在出现的菜单下选择“Add File To Group
29、“Source Group 1”, 出现Add Files to Group Source Group1对话框。在该对话框中选择需要添加的程序文件,如刚才建立HelloRoBot.c,单击Add 按钮,把所选文件添加到项目文件中。一次可添加多个文件。 3. 程序文件添加到项目文件中去后,这时上图中“Source Group 1”的前面将出现一个“+”号;单击它将出现刚才添加的源文件名,如图1-15 所示(注意:图中显示的文件名是刚才输入的文件名)。,2018年10月15日,机器人技术介绍,43,双击源文件即可显示源文件的编辑界面。下面来产生下载需要的可执行文件。要产生可执行的.Hex文件,需要
30、对目标工程“Target1”进行编译设置,右键点击“Target 1”,选择“Option for target Target 1”。点击“output”,选择其中的“Create HEX File”,如图1-16 所示,点击确定关闭设置窗口。然后点击Keil uVision IDE 快捷工具栏中的 ,Keil 的C 编译器开始根据要生成的目标文件类型对目标工程项目中的C 语言源文件进行编译。编译过程中,可以观察到源文件中有没有错误产生,如果没有错误产生,在IDE 主窗口的下面出现如图1-17 的提示信息,表明已成功生成了可执行文件,并存储在C 语言源程序存储的目录中,文件名就是HelloRo
31、Bot.Hex。,2018年10月15日,机器人技术介绍,44,图1-16 设置目标工程的编译输出文件类型,2018年10月15日,机器人技术介绍,45,图1-17 编译过程的输出提示信息,2018年10月15日,机器人技术介绍,46,下载可执行文件到单片机,USBASP 在线下载器,套件组成: USBASP下载器 USBASP Windows平台驱动程序,2018年10月15日,机器人技术介绍,47,1 USBASP下载器的驱动安装,将 USBASP 插到电脑的 USB 口上,USBASP 模块的 D1(电源指示灯)会点亮,电脑会出现发现“USBasp”硬件的对话框。如图 1-18所示。软件
32、的设置根据提示安装 USBASP 的驱动。驱动程序位于“USBasp 驱动(支持 WindowsXP)”文件夹中。选择“从列表或指定位置安装(高级)”安装方法(图 1-18 ),在下一步中指定驱动程序的位置。再下一步,开始安装驱动程序。安装完毕,系统提示安装成功。,图 1-18 电脑找到 USBASP 设备,2018年10月15日,机器人技术介绍,48,图 1-19 指定驱动程序的位置 安装完毕,拔出并重新插入 USBASP,在设备管理器中会发现 LibUSB-Win32 Devices的组,组中有“USBasp”这样的硬件。,2018年10月15日,机器人技术介绍,49,图1-20 设备管理
33、器 将 USBasp 模块后部的 10PIN 接头通过排线连接到 AVR 单片机的 ISP接口上。,2018年10月15日,机器人技术介绍,50,2 AVR_fighter软件,该下载软件不需要安装,在使用时,打开即可直接使用。,3 AT89S52 的ISP 下载步骤,第一步,选择编程器种类、接口和单片机类型。编程器种类为 USBASP,接口为 USB,单片机类型为 AT89S52。,2018年10月15日,机器人技术介绍,51,第二步,单击“调入 Flash”按钮,找到要下载的 HEX文件。,2018年10月15日,机器人技术介绍,52,第三步,单击“编程”区的“自动”按钮,开始擦除芯片内部
34、程序,并下载 HEX 文件到单片机。,2018年10月15日,机器人技术介绍,53,用串口调试软件查看单片机输出信息,打开串口调试终端,选择串口“COM1”后点击“打开串口”,在“接收区”内你看到了什么?什么也没有!为什么呢?因为从你把执行文件成功下载到单片机的那个时刻开始,程序就开始运行了:单片机已经向PC 机发送了信息。你错过了接收。怎么办呢?在机器人教学板上给你提供了“Reset”按钮,它可以让下载到单片机内的程序重新运行一次。按下“Reset”按钮,是不是出现如图1-21 所示画面呢?,2018年10月15日,机器人技术介绍,54,图1-21 串口调试终端,2018年10月15日,机器
35、人技术介绍,55,HelloRoBot.c 是如何工作的?,例程中第一行代码是HelloRoBot.c 所包含的头文件。该头文件在编译过程中用来将下面程序中需要用到的标准数据类型和由C 语言编译器提供的一些标准输入/输出函数、中断服务函数等包括进来,生成可执行代码。头文件中可以嵌套头文件,同时也可以直接定义一些常用的功能函数。本例程中的头文件uart.h 在后续任务中都要用到,它其中就包含了本例程中以及后面例程中都要用到的uart_Init()函数的定义和实现。,2018年10月15日,机器人技术介绍,56,下面先讲一下函数的概念。一个较大的C 语言程序一般分成若干个模块,每个模块实现一定的功
36、能,我们称之为函数。任何一个C 语言程序本身就是一个函数,该函数必须以main函数作为程序的起点,通常称之为主函数。主函数可以调用任何子函数,子函数之间也可以相互调用(但是不可以调用主函数)。函数定义的一般格式为:,函数返回值的类型函数名 (形式参数1,形式参数2),第二行就是程序的入口 main 函数。main 前面的int 是指定main 的函数返回值类型为整数类型,括号中void 或无内容表示没有形式参数。每个函数的主体都要用“ ”括起来,2018年10月15日,机器人技术介绍,57,main 函数主体中有两行语句:第一行是串口初始化函数uart_Init( ),用来规定单片机串口是如何
37、与PC 通信的。有兴趣的读者可以打开uart.h 头文件,看看该函数是如何实现的,如果其中有很多内容不懂,不要紧,记住这个函数的功能就行,以后慢慢学习和理解。这行语句中“/”后的是注释。注释是一行会被编译器忽视的文字,因为注释是为了给人阅 读。函数体中的第二行语句printf 命令是单片机通过串口向PC 机发送一条信息。,2018年10月15日,机器人技术介绍,58,printf函数,printf 函数称为格式输出函数,其功能是按用户指定的格式,把指定的数据显示输出。该函数是C 语言提供的标准输出函数,定义在C 语言的标准函数库中,要使用它,必须包括定义标准函数库的头文件stdio.h。由于在
38、uart.h 头文件中包括了stdio.h,因此本例程无需另外包括该头文件。printf 函数的一般形式为:,printf(“格式控制字符串”,输出列表);,2018年10月15日,机器人技术介绍,59,格式控制字符串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串;输出表列在格式输出时才用到,它给出了各个输出项,要求与格式字符串在数量和类型上一一对应。非格式字符串在输出时原样输出,在显示中起提示作用。例程中用到的就是非格式字符串。“n”是一个向调试终端发送回车命令的控制符。也就是说,当你按下“Reset”按钮再次运行程序时,将在下一行显示“Hello,this is a m
39、essage from your Robot”;如果没有“n”,则会在上一语句中的结尾,即“Robot” 后面接着显示。,2018年10月15日,机器人技术介绍,60,while(1);的作用while 是C 语言里的循环控制语句,它的具体语法将在第二章里介绍,这里向你讲解为何要加上这个循环。HEX 文件是加载在单片机FLASH 存储器上的,并且是从头开始往下加载。当你把HEX 文件加载上去的时候,填满了整个FLASH 空间吗?当然没有!那么,当程序执行完printf 函数之后,它将还后向下执行,但后面的空间并没有存放程序代码,这时程序后会乱运行,也就发生了跑飞现象。加上while(1);语句
40、,让程序一直停止在这里,就是为了防止程序跑飞。,2018年10月15日,机器人技术介绍,61,该你了例程:HelloRoBotYourTurn.c,#include int main(void) int i; uart_Init(); i=7*11; printf(“Whats 7 X 11?n“); printf(“The answer is :%dn“,i); while(1); ,按照上述方法建立新的项目,输入程序HelloRoBotYourTurn.c,运行,查看输出结果,是否与图1-20 一样?,2018年10月15日,机器人技术介绍,62,图1-22 例程HelloRoBotYou
41、rTurn.c 输出结果,2018年10月15日,机器人技术介绍,63,HelloRoBotYourTurn.c 是如何工作的?在介绍main 函数内容之前,先向你讲解一下C 语言的一些基本知识。,C语言数据类型,C 语言有5 种基本数据类型:字符、整型、单精度实型、双精度实型和空类型。这些数据类型的长度和范围会因处理器的类型和C 语言编译程序的实现而有所不同,对于KEIL51产生的目标文件,表1-1 给出了两种教材中常用的数据长度和范围。,2018年10月15日,机器人技术介绍,64,2018年10月15日,机器人技术介绍,65,标识符,在C 语言中,标识符是对变量、函数名和其他各种用户定义
42、对象的命名。标识符的长度可以是一个或多个字符。绝大多数情况下,标识符的第一个字符必须是字母或下划线,随后的字符必须是字母、数字或下划线(某些C 语言编译器可能不允许下划线作为标识符的起始字符)。表1-2 是一些正确或错误标识符命名的实例。,2018年10月15日,机器人技术介绍,66,常量,C语言中的常量是不接受程序修改的固定值,常量可以为任意数据类型,如下例所示: char a、9 int 21、-234,2018年10月15日,机器人技术介绍,67,在程序中可以改变的量称为变量。一个变量应该有一个名字(标识符),在内存中占据一定的存储单元,在该存储单元中存放变量的值。请注意区分变量名和变量
43、值这两个不同的概念。所有C 语言变量必须在使用之前定义。定义变量的一般形式是:type variable_list;这里的type 必须是有效的C 数据类型,variable_list(变量表)可以由一个或多个由逗号分隔的多个标识符名构成。下面给出一些定义的范例: int i,j,k; char x,y,z; 注意,C 语言中变量名与其类型无关。,变量,2018年10月15日,机器人技术介绍,68,运算符,C语言有3 大运算符:算术、关系与逻辑、位操作。另外,C 语言还有一些特殊的运算符,用于完成一些特殊的任务。,算术运算符,2018年10月15日,机器人技术介绍,69,表达式,表达式由运算符
44、、常量及变量构成。C 语言的表达式遵循一般代数规则。C语言规定:任何表达式在其未尾加上分号就构成为语句。,赋值运算符,赋值运算符记为“=”。由“= ”连接的式子称为赋值表达式,其后加分号构成赋值语句,其一般形式为:,变量=表达式;,2018年10月15日,机器人技术介绍,70,现在,来看看main 函数是如何工作的。 int i;定义了一个整型变量i。i 即是变量的标识符。分号表示结束。 uart_Init(); 与上一个例程一样,规定单片机串口如何与PC 机通信的。 i=7*11; 将表达式“7*11”的值赋给变量i,也就是说变量i 的值为77。 printf(“Whats 7 X 11?n
45、“); 输出“Whats 7 X 11?”,这里printf 的用法与上一个例程一样。 printf(“The answer is :%dn“,i);,2018年10月15日,机器人技术介绍,71,这里用到了printf 函数的格式字符串输出。%d 是指定输出数据的类型为十进制整数。printf 函数首先输出“The answer is :”;然后它遇到了“%d”,表示将后面输出列表中的变量以十进制的形式输出,即,将变量i 以“77”的形式输出;最后的输出结果即为:The answer is :77最后一条语句:while(1);也起到与在上例中同样的作用:防止程序跑飞。,2018年10月15
46、日,机器人技术介绍,72,任务五 做完实验关断电源,把电源从教学底板上断开很重要,原因有几点:首先,如果系统在不使用时没有消耗电能,电池可以用的更久;其次,在以后的试验中,你将在教学底板上的面包板上搭建电路,搭建电路时,应使面包板断电。如果是在教室,老师可能会有额外的要求,比如断开串口电缆,把教学底板存放到安全的地方等等。总之,你做完试验后最重要的一步是断开电源。断开电源比较容易,只要三位开关拨到左边的0 位即可。,2018年10月15日,机器人技术介绍,73,C51 系列单片机Keil uVision IDE(集成开发环境)软件和ISP 下载软件的下载和安装2. 机器人用 C51 教学板与计算机或者笔记本的连接3. 如何在集成开发环境中创建目标工程文件,并添加和编辑 C 语言源程序4. C 语言程序的编译和下载 5. 串口调试终端的使用6. C 语言基本知识:基本数据类型、常量、变量、运算符、表达式7. printf 格式输出函数的使用,2018年10月15日,机器人技术介绍,74,END!,