第一章C51单片机编程环境与机器人智能.docx
- 文档编号:28484749
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:24
- 大小:347.91KB
第一章C51单片机编程环境与机器人智能.docx
《第一章C51单片机编程环境与机器人智能.docx》由会员分享,可在线阅读,更多相关《第一章C51单片机编程环境与机器人智能.docx(24页珍藏版)》请在冰豆网上搜索。
第一章C51单片机编程环境与机器人智能
实验一、C51单片机编程环境以及宝贝车电路板
一、实验目的
熟悉KeiluVision2开发环境,以及单片机程序烧录的步骤。
对单片机执行程序的过程有更深的认识。
二、实验概要
1、下载并安装编程软件
2、连接宝贝车到电池供电的电源
3、连接宝贝车的ISP接口到计算机,以便编程
4、连接宝贝车的串行接口到计算机,以便交互
5、运用C语言初次编写少量的程序,运用编译器编译生成可执行文件
三、实验内容
1.单片机与C51系列单片机
什么是单片机?
一台能够工作的计算机要有这样几个部份:
CPU(CentralProcessingUnit,中央处理单元:
进行运算、控制)、RAM(RandomAccessMemory,随机存储器:
数据存储)、ROM(ReadOnlyMemory,只读存储器:
程序存储)、输入/输出设备(串行口、并行口等)。
在个人计算机上这些部份被分成若干块芯片或者插卡,安装一个称之为主板的印刷线路板上。
而在单片机中,这些部份全部被做到一块集成电路芯片中,所以就称为单片机。
学习单片机有必要吗?
与我们经常使用的个人计算机、笔记本电脑相比,单片机的功能是很小的,那学它干啥吗?
实际生活中并不是任何需要计算机的场合都要求计算机有很高的性能,比如空调温度的控制,冰箱温度的控制等都不需要很复杂高级的计算机。
应用的关键是看是否够用,是否有很好的性能价格比。
单片机凭借体积小、质量轻、价格便宜等优势,已经渗透到我们生活的各个领域:
导弹的导航装置、飞机上各种仪表的控制、工业自动化过程的实时控制和数据处理、广泛使用的各种智能IC卡、民用豪华轿车的安全保障系统、录象机、摄象机、全自动洗衣机、程控玩具、电子宠物等等。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用、嵌入式系统设计与智能化控制的科学家、工程师,同时,学习使用单片机也是了解通用计算机原理与结构的最佳选择。
C51系列单片机
一提到单片机,你就会经常听到这样一些名词:
MCS51、8051、C51等等,它们之间究竟是什么关系呢?
MCS51是指由美国INTEL公司生产的一系列单片机的总称。
这一系列单片机包括了好些品种,如8031,8051,8751等,其中8051是最典型的产品,该系列单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机。
INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求。
实验使用的P89V51RD2单片机是在80C51基础上改进而来,也可认为是增强型51单片机。
P89V51RB2/RC2/RD2是一款80C51微控制器,包含16/32/64kBFlash和1024字节的数
据RAM。
Flash程序存储器支持并行和串行在系统编程(ISP)。
并行编程方式提供了高速的分组编程(页编程)方式,可节省编程成本和上市时间。
ISP允许在软件控制下对成品中的器件进行重复编程(反复擦写10000次),应用固件的产生/更新能力实现了ISP的大范围应用。
P89V51RB2/RC2/RD2也可采用在应用中编程(IAP),允许随时对Flash程序存储器重新配置,即使是应用程序正在运行也不例外。
什么是单片机的位数?
现在市场上闹得沸沸扬扬的微软新推出的系统VISTA是64位操作系统;大家常用的系统,如WINDOWSXP、WINDOWS2003等,是32位操作系统;这里你将用到的单片机AT89S52是8位的,而有些厂家生产的单片机则是16位的。
那么,这些位数:
64、32、16、8代表什么意义呢?
简单地说,这些位数指的是CPU能一次处理的数据的最大长度。
当然,这里的位是指二进制的位,而非十进制的位。
AT89S52是8位的单片机,意味着它如果要处理16位数据的话就应该分两次处理。
嵌入式系统
嵌入式系统是指嵌入到工程对象中能够完成某些相对简单或者某些特定功能的计算机系统。
与从8位机迅速向16位、32位、64位过渡的通用计算机系统相比,嵌入式系统有其功能的特殊要求和成本的特殊考虑,从而决定了嵌入式系统在高、中、低端系统三个层次共存的局面。
在低端嵌入式系统中,8位单片机从20世纪70年代初期诞生至今还一直在工业生产和日常生活中广泛使用。
嵌入式系统嵌入到对象系统中,并在对象环境下运行。
与对象领域相关的操作主要是对外界物理参数进行采集、处理,对对象实现控制,并与操作者进行人机交互等。
鉴于嵌入式低端应用对象的有限响应要求、嵌入式系统低端应用的巨大市场以及8位机具有的计算能力,可以预测在未来相当长的时间内,8位机仍然是嵌入式应用中的主流机型。
早期的单片机应用程序开发通常需要仿真机、编程机等配套工具,要配置这些工具需要一笔不小的投资。
本教材采用的AT89S52,不需要仿真机和编程机,只需运用ISP电缆就可以对单片机的FLASH反复擦写1000次以上,因此使用起来特别方便简单,尤其适合初学者使用,而且配置十分灵活,可扩展性特别强。
In-systemProgrammable(ISP,系统在线编程)
In-systemprogrammable是指用户可把已编译好的程序代码通过一条“下载线”直接写入到器件的编程(烧录)方法,已经编程的器件也可以用ISP方式擦除或再编程。
ISP所用的“下载线”并非不需要成本,但相对于传统的“编程器”成本已经大大下降了。
通常FLASH型芯片会具备ISP下载能力。
下面的一些列实验将引导你运用P89V51RD2作为机器人的大脑制作一款教育机器人,并采用C语言对单片机进行编程,使机器人实现下述四个基本智能任务:
1.安装传感器以探测周边环境;
2.基于传感器信息做出决策;
3.控制机器人运动(通过操作带动轮子旋转的电机);
4.与用户交换信息;
通过参与这些任务,你有机会接触和了解C51单片机原理与应用开发技术,以及C语言程序设计技术,对身边的形形色色的电子产品的实现原理有所了解,如果感兴趣,初步了解后可以进一步的进行深入的学习研究。
为了方便单片机微控制器与电源、ISP下载电缆、串口线以及各种传感器和电机的连接,需要制作一个电路板,并将单片机插在教学板上,如图1-1所示。
图1-1C51单片机教学板
机器人与C51单片机
图1-2所示的是实验的机器人工程对象,它采用P89V51(或AT89S52)单片机作为大脑,通过教学板安装在机器人底盘上。
后面的实验将以此机器人作为典型工程对象,完成上节提到的机器人所需具备的四种基本能力,使机器人具有基本的智能。
图1-2采用C51单片机的机器人
首先通过以下步骤告诉你如何安装和使用C51单片机的C语言编程开发环境,如何开发第一个简单机器人程序,并在机器人上如何运行你写的这个程序。
实验的的具体任务包括:
●寻找并安装开发编程软件
●连接机器人到电池或者供电的电源
●连接单片机教学板ISP接口到计算机,以便编程
●连接单片机教学板串行接口到计算机,以便调试和交互
●运用C语言初次编写少量的程序,运用编译器编译生成可执行文件,然后下载到单片机上,通过串口观察机器人上的单片机教学板的执行结果
●完成后断开电源
任务一获得软件
在本课程的学习中,你将反复用到三款软件:
KeiluVision3IDE集成开发环境、FlashMagic下载软件、串口调试软件等。
1.KeiluVision3IDE集成开发环境
该软件是德国KEIL公司出品的51系列单片机C语言集成开发系统。
如果你已经学习过《基础机器人制作与编程》,并掌握了PBASIC语言编程思想和基本技能,你将会发现,C语言在语法结构上更加灵活,功能更加强大,但同时学习和理解起来也稍困难些。
你可以在KEIL公司的网站上获得该软件的安装包。
2.FlashMagic下载工具
该软件是专门面向Philips公司(NXP)生产的单片机产品的程序烧录软件,使用该软件你可以将可执行文件下载到你的机器人单片机上。
该软件的使用需要你的计算机有并行口。
你可以在双龙公司的网站中获得该软件。
3.串口调试软件
此软件是用来显示单片机与计算机的交互信息的。
在硬件上,你的计算机至少要有串口或USB接口来与单片机教学板的串口连接。
任务二安装软件
软件的安装很简单,与你安装的其他软件过程一样。
安装KeiluVision2
1.执行KeiluVision3安装程序,选择安装EvalVersion版进行安装
2.在后续出现的窗口中全部选择Next按钮,将程序默认安装在C:
\ProgramFiles\Keil文件目录下
3.将头文件“Boebot.h”和“uart.h”拷贝到C:
\ProgramFiles\Keil\C51\INC文件夹里
KeiluVisionIDE软件安装到你的电脑上的同时,会在你的计算机桌面建立一个快捷方式。
安装ISP下载软件与此类似。
任务三硬件连接
C51教学板(或者说机器人大脑)需要连接电源以便运行,同时也需要连接到PC机(或笔记本电脑)以便编程和交互。
以上接线完成后,你就可以用编辑器软件来对系统进行测试。
下面将告诉你如何完成上述硬件连接任务。
串口的连接
图1-3串口与串行数据线
机器人教学板通过串口电缆(如图1-3)连接到PC机(或笔记本电脑)上以便与用户交互。
如果你的计算机有串行接口,直接使用串口连接电缆。
如果没有,此时需要使用USB转串口适配器,如图1-4所示。
你只需将该串口线一端的串口连接到你的机器人教学板,而另一端连接到计算的USB口上。
需要安装专门的驱动程序。
电源
可以采用四节五号碱性电池给机器人电机和教学板供电,也可以用外接的电源适配器,产生6.5V-9V的直流电压输入到教学板的电源接口。
给教学板和单片机进行通电检查
教学底板上有一个三位开关(见图1-5),当开关拨到“0”位断开教学底板电源。
无论你是否将电池组或者其它电源连接到教学底板上,只要三位开关位于“0”位,那么设备就处于关闭状态。
现在将三位开关由“0”位拨至“1”位,打开教学板电源,如图1-6所示。
检查教学底板上标有“Pwr”的绿色(或红色)LED电源指示灯是否变亮。
如果没有,检查电池盒里的电池和电池盒的接头是否已经插到教学板的电源插座上。
开关“2”你将会在后续章节中用到。
将开关拨至“2”后,电源不仅要结教学板供电,同时还会给机器人的执行机构——伺服电机供电,同样的,此时绿色LED电源指示灯仍然会变亮。
任务四你的第一个程序
你编写和测试的第一个C语言程序将告诉AT89S52单片机控制器,让它在执行程序时发送一条信息给PC机(或笔记本电脑)。
创建与编辑你的第一个程序
双击KeiluVisionIDE的图标,启动KeiluVisionIDE程序,你会得到图1-7所示的KeiluVision3IDE的主界面。
通过用Project菜单中的NewProject命令建立项目文件,过程如下:
图1-7KeiluVisionIDE的主界面
1.点击Project,会出现图1-8所示的菜单画面,然后选择“NewProject”,将出现图1-9所示对话框。
图1-8Project菜单画面图1-9CreateNewProject对话框
2.在文件名中输入如“HelloRoBot”,保存在你想保存的位置(如D:
\中级机器人制作与编程\程序\Chapter1),可不用加后缀名,点击“保存”,后会出现图1-10所示的窗口。
3.这里要求我们选择芯片的类型,KeiluVision2IDE几乎支持所有的51核心单片机,并以列表的形式给出。
本教材使用的是Atmel公司的AT89S52,在KeiluVision2IDE提供的数据库(Database)列表中找到此款芯片,然后点击确定,会出现图1-11所示的窗口,询问你是否加载8051启动代码,在这里我们选择“否”,不加载。
(如果你选择“是”,对你的程序没有任何影响。
若你感兴趣,可选择“是”,看看编译器加载了哪些代码。
)之后会出现图1-12画面,此时即得到了项目文件。
图1-10单片机型号选择窗口
图1-11是否加载8051启动代码提示窗口图1-12目标工程窗口
项目文件创建后,这时只有一个框架,紧接着需要向项目文件中添加程序文件内容。
KeiluVision2支持C语言程序。
可以是已经建立好的程序文件,也可以是新建的程序文件。
如果是建立好了的程序文件,则直接用后面的方法添加;如果是新建立的程序文件,则先将程序文件.c存盘后再添加。
图1-13C语言源文件保存对话框
点击
按钮(或通过“File->New”操作)为该项目新建一个C语言程序文件,保存后弹出图1-13所示的对话窗口,将文件保存在项目文件夹中,在文件类型中填写.C(这里.C为文件扩展名,表示此文件类型为C语言源文件),因为你下面将采用C语言编写第一个程序。
例程:
HelloRoBot.c
#include
intmain(void)
{
uart_Init();//串口初始化
printf("Hello,thisisamessagefromyourRobot\n");
while
(1);
}
将该例程键入KeiluVisionIDE的编辑器,并以文件名HelloRoBot.c保存。
下一步就是添加该文件到目标工程项目了,其具体添加过程如下:
1.单击图1-12中的“+”,将出现图1-14所示的列表;
2.然后右键点击“SourceGroup1”,在出现的菜单下选择“AddFileToGroup“SourceGroup1”,出现AddFilestoGroupSource‘Group1’对话框。
在该对话框中选择需要添加的程序文件,如刚才建立HelloRoBot.c,单击Add按钮,把所选文件添加到项目文件中。
一次可添加多个文件。
3.程序文件添加到项目文件中去后,这时上图中“SourceGroup1”的前面将出现一个“+”号;单击它将出现刚才添加的源文件名,如图1-15所示(注意:
图中显示的文件名是刚才输入的文件名)。
图1-14添加C语言文件到目标工程图1-15添加了C语言文件的目标工程
双击源文件即可显示源文件的编辑界面。
下面来产生下载需要的可执行文件。
要产生可执行的.Hex文件,需要对目标工程“Target1”进行编译设置,右键点击“Target1”,选择“Optionfortarget‘Target1’”。
点击“output”,选择其中的“CreateHEXFile”,如图1-16所示,点击确定关闭设置窗口。
然后点击KeiluVisionIDE快捷工具栏中的
,Keil的C编译器开始根据要生成的目标文件类型对目标工程项目中的C语言源文件进行编译。
编译过程中,可以观察到源文件中有没有错误产生,如果没有错误产生,在IDE主窗口的下面出现如图1-17的提示信息,表明已成功生成了可执行文件,并存储在C语言源程序存储的目录中,文件名就是HelloRoBot.Hex。
图1-16设置目标工程的编译输出文件类型
图1-17编译过程的输出提示信息
下载可执行文件到单片机
点击ISP下载软件图标,打开ISP下载软件窗口如图1-18所示,并将通信参数设置成图中所示的参数。
第一个为接口类型选择窗口,该窗口的下拉列表中提供了许多接口类型:
串口COM1~COM16、并口LPT1~LPT3以及USB接口等。
教材使用并口LPT1。
第二个为下载速度选择窗口,该窗口内容与接口类型紧密相连。
不同的接口,该窗口就提供不同内容的下载速度。
若选择LPT1,则提供了五种下载速度:
TURBO模式、FAST模式、NORMAL模式、SLOW模式和TURBOSLOW模式。
在这五种模式下,程序下载速度依次减小。
教材中的例程使用的是第一个模式TURBO模式,下载速度最快。
第三个为单片机型号选择窗口。
如何快速地认识新的软件?
面对一款新的软件,你可能有一种无从下手的感觉:
这个是干嘛的?
那个又是干嘛的?
其实,软件本身就提供了问题的答案。
每一款软件都提供了帮助文档。
如SLISP软件界面的右上角有个“问号”按钮,单击它就弹出一系列的选项,这些选项就对该款软件做出了大致的解释,有助你快速掌握软件的使用。
点击“Flash”,选择要下载的可执行HEX文件——HelloRoBot.Hex,选择后点击编程开始下载。
如果下载成功,则下面显示“完成次数:
x次”,否则显示“失败次数:
x次”。
如果芯片是第二次下载程序,请先选中“擦除”复选框。
图1-18ISP软件下载窗口
举一反三
如果你已经学习过《基础机器人制作与编程》,并已经掌握了采用BASICStamp系列单片机模块的PBASIC语言开发技能,请你与刚才介绍的C语言编程过程进行比较,看看有何不同。
并思考一下,这些不同对于初学者而言各有何优缺点。
用串口调试软件查看单片机输出信息
打开串口调试终端,选择串口“COM1”后点击“打开串口”,在“接收区”内你看到了什么?
什么也没有!
为什么呢?
因为从你把执行文件成功下载到单片机的那个时刻开始,程序就开始运行了:
单片机已经向PC机发送了信息。
你错过了接收。
怎么办呢?
在机器人教学板上给你提供了“Reset”按钮,它可以让下载到单片机内的程序重新运行一次。
按下“Reset”按钮,是不是出现如图1-19所示画面呢?
图1-19串口调试终端
HelloRoBot.c是如何工作的?
例程中第一行代码是HelloRoBot.c所包含的头文件。
该头文件在编译过程中用来将下面程序中需要用到的标准数据类型和由C语言编译器提供的一些标准输入/输出函数、中断服务函数等包括进来,生成可执行代码。
头文件中可以嵌套头文件,同时也可以直接定义一些常用的功能函数。
本例程中的头文件uart.h在本教材的后续任务中都要用到,它其中就包含了本例程中以及后面例程中都要用到的uart_Init()函数的定义和实现。
下面先讲一下函数的概念。
一个较大的C语言程序一般分成若干个模块,每个模块实现一定的功能,我们称之为函数。
任何一个C语言程序本身就是一个函数,该函数必须以main函数作为程序的起点,通常称之为主函数。
主函数可以调用任何子函数,子函数之间也可以相互调用(但是不可以调用主函数)。
函数定义的一般格式为:
函数返回值的类型函数名(形式参数1,形式参数2………..)
第二行就是程序的入口main函数。
main前面的int是指定main的函数返回值类型为整数类型,括号中void或无内容表示没有形式参数。
每个函数的主体都要用“{}”括起来(反思一下同PBASIC语言编程的区别)。
函数的具体讲解将在第三章。
main函数主体中有两行语句:
第一行是串口初始化函数uart_Init(),用来规定单片机串口是如何与PC通信的。
有兴趣的读者可以打开uart.h头文件,看看该函数是如何实现的,如果其中有很多内容不懂,不要紧,记住这个函数的功能就行,以后慢慢学习和理解。
这行语句中“//”后的是注释。
注释是一行会被编译器忽视的文字,因为注释是为了给人阅读。
函数体中的第二行语句printf命令是单片机通过串口向PC机发送一条信息。
printf函数
printf函数称为格式输出函数,其功能是按用户指定的格式,把指定的数据显示输出。
该函数是C语言提供的标准输出函数,定义在C语言的标准函数库中,要使用它,必须包括定义标准函数库的头文件stdio.h。
由于在uart.h头文件中包括了stdio.h,因此本例程无需另外包括该头文件。
printf函数的一般形式为:
printf(“格式控制字符串”,输出列表);
格式控制字符串可由格式字符串和非格式字符串两种组成。
格式字符串是以%开头的字符串;输出表列在格式输出时才用到,它给出了各个输出项,要求与格式字符串在数量和类型上一一对应。
非格式字符串在输出时原样输出,在显示中起提示作用。
例程中用到的就是非格式字符串。
“\n”是一个向调试终端发送回车命令的控制符。
也就是说,当你按下“Reset”按钮再次运行程序时,将在下一行显示“Hello,thisisamessagefromyourRobot”;如果没有“\n”,则会在上一语句中的结尾,即“Robot”后面接着显示。
while
(1);的作用
while是C语言里的循环控制语句,它的具体语法将在第二章里介绍,这里向你讲解为何要加上这个循环。
HEX文件是加载在单片机FLASH存储器上的,并且是从头开始往下加载。
当你把HEX文件加载上去的时候,填满了整个FLASH空间吗?
当然没有!
那么,当程序执行完printf函数之后,它将还后向下执行,但后面的空间并没有存放程序代码,这时程序后会乱运行,也就发生了跑飞现象。
加上while
(1);语句,让程序一直停止在这里,就是为了防止程序跑飞。
该你了——例程:
HelloRoBotYourTurn.c
#include
intmain(void)
{
inti;
uart_Init();
i=7*11;
printf("What's7X11?
\n");
printf("Theansweris:
%d\n",i);
while
(1);
}
按照上述方法建立新的项目,输入程序HelloRoBotYourTurn.c,运行,查看输出结果,是否与图1-20一样?
图1-20例程HelloRoBotYourTurn.c输出结果
HelloRoBotYourTurn.c是如何工作的?
在介绍main函数内容之前,先向你讲解一下C语言的一些基本知识。
C语言数据类型
C语言有5种基本数据类型:
字符、整型、单精度实型、双精度实型和空类型。
这些数据类型的长度和范围会因处理器的类型和C语言编译程序的实现而有所不同,对于KEIL51产生的目标文件,表1-1给出了两种教材中常用的数据长度和范围。
表1-1常用数据类型的长度和范围
类型
长度(单位bit)
范围
char
8
-128~+127即-27~(27-1)
int
16
-32768~+32767即-215~(215-1)
float
32
-3.4X10-38~3.4X1038
标识符
在C语言中,标识符是对变量、函数名和其他各种用户定义对象的命名。
标识符的长度可以是一个或多个字符。
绝大多数情况下,标识符的第一个字符必须是字母或下划线,随后的字符必须是字母、数字或下划线(某些C语言编译器可能不允许下划线作为标识符的起始字符)。
表1-2是一些正确或错误标识符命名的实例。
表1-2正确或错误标识符命名实例
正确形式
错误形式
count
2count
test23
hi!
there
high_balance
high..balance
常量
C语言中的常量是不接受程序修改的固定值,常量可以为任意数据类型,如下例所示:
char‘a’、‘9’
int21、-234
变量
在程序中可以改变的量称为变量。
一个变量应该有一个名字(标识符),在内存中占据一定的存储单元,在该存储单元中存放变量的值。
请注意区分变量名和变量值这两个不同的概念。
所有C语言变量必须在使用之前定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 C51单片机编程环境与机器人智能 C51 单片机 编程 环境 机器人 智能