四、教你玩转单片机!

四、教你玩转单片机!
拨出插头,电烙铁慢慢凉了下来,即使你没有戴金丝边眼镜,在下面的操作过程中也可以显得更斯文一些。这是只与键盘、鼠标、显示器有关的故事情节,几片灰白颜色的软件窗口,嘟嘟的提示音,还有期盼成功并始终专注的眼神。其实我们完成了大部分内容,我们回顾一下看看:我们了解了

  在没有从宏观上了解事情的时候我们总会感觉茫然不知所措。你花了钱买这本杂志并不小心翻看到我的文章,煽动性的语言诱骗你喜欢上了单片机并一直迷迷糊糊看到这里我就已经非常开心了,除了以身相许之外我愿意为你做任何事情,包括详细介绍我们将会用到的一些软件和关于它们的故事。眼睛向下一扫,我虚张声势的把戏被你识破,明明就两个软件嘛,何必说得好像很多一样呢?大人请容我解释,这两个软件是单片机学习**常用的两个软件,而细述它们的功能**要独立成书了。如果可以弄明白这两个软件的使用和常见问题,那么任何操作问题都难不倒你了。值得庆幸的是本文正为了这个目标而努力。

ISPlay v1.3 – ISP下载工具软件

  还记得我介绍 ISP下载线时的比喻吗?“从电脑向手机下载图片或音乐一般都有一条连接线,再配上手机专用的软件就可以让手机丰富多彩了。”所谓“专用的软件”就是我们现在要介绍的 ISPlay v1.3。它是一款绿色版小巧的 ISP下载工具软件,配合前面讲到的 ISP下载线向单片机下载程序。你可以根据名称到网上找到它,下载后不用安装只要双击图标就可以运行,运行的窗口就是图 1所示的样子。我这里仅以 ISPlay v1.3为例,你可能下载到更新的版本,可能窗口和功能会有一些不同,不过都是大同小异的。

1. ISPLAY V1.3
图 1

检测器件

  第一次使用时都会用到这个功能,它可以测试实验板和 ISP下载线是否工作正常,上一篇文章中没能对我们辛辛苦苦制作好的两个硬件进行测试,现在可以弥补一下了。首先把实验板、ISP下载线和电脑的并口连接好,给实验板通电。在软件窗口的左上方的下拉列表中选择你选用的单片机型号,我用的型号是 AT89S52,然后点击后面的“检测器件”。所有单片机爱好者的心都关注着这一无比关键的时刻,放开鼠标左键的瞬间我们将面临成与败的分歧口,我们从文章的开始到现在所有的努力都系于这一次微不足道的点击。也许你不忍看到这一幕,没关系,闭上眼睛,用声音告诉你何去何从。当听到“嘟嘟嘟”三声则要恭喜你,我们的制作大获成功,在窗口下方的信息栏里同时可以看到器件的型号和特征字,欢呼之后我们就可以向下继续了。如果听到“嘟”一声则说明我们还要走一段回头路,信息栏显示没有找到器件,可能这只是我们的一时马虎大意而犯下的小错误导致的,也有重新插上电烙铁的可能。我现在从书里跳出来也不能帮你解决这个问题,而且还会吓到别人,该注意的我在上文已经说过,现在只能靠你自己了。

打开文件

  幸运儿们请点击“检测器件”右边的“文件”,弹出一个打开窗口,这里我们要选择我们需要的“.hex”文件。我在《无线电》杂志光盘中放了一些“.hex”文件,我把它们集中放到一个叫“HEX文件”的文件夹里,我们来打开“第一个程序.hex”文件。我还要唠叨一下,这个文件夹里放的都是 HEX文件,如果你看不到扩展名可能是你的电脑设置问题,没有理由怀疑我的程序。

擦除、写入、校验

  文件打开之后顺次点击“擦除”、“写”、“校验”。如果一切顺利将显示“完成”,如果出现校验错误则重头再来一次,如果几次之后才成功下载的话说明电路抗干扰能力很差,检查一下电源部分和数据线的抗干扰能力。总之成功找经验、失败找原因。

自动完成

  这个软件是简洁而人性化的,不然我也不会推荐给你,它的开发人员也是一个会玩单片机的朋友,他知道爱好者的疾苦,设计了“一键通”的功能。“检测器件”的下边有一个“AUTORUN!”按钮,只要打开文件后点击“AUTORUN!”,后面的擦除、写入、校验都可以用这一键完成。在窗口左下角的“程序设置”中可以设置自动完成的内容。

  这么好用的软件却不知道是谁设计的,不然我一定要替单片机爱好者好好地谢谢他。话分两头,现在你下载成功了吗?成功则证明你已经掌握了 ISP下载的方法,用同样的方法下载文件夹里的其它 HEX文件试试,看看在这一个 LED和一个按键上能演义出多少种变化。值得注意的是程序下载完成后不用取下 ISP下载线,实验板的程序运行不受影响,但如果只拨出 ISP下载线的并口端而不拨出实验板端的连接线时实验板上的程序可能会无法运行。这个下载软件的基本使用就是这样的,日后我们会经常用到它。泡杯茶歇一会,别走开下面内容更精彩!

2.检测器件


图 2


[page]


继续玩点更过瘾的吧,让你的天才想象力和创造力在单片机的地盘上得到施展。Keil μVision2 C51编译器(以下简称 Keil)是一款**的编译软件,同时具有仿真调试的功能,我们一般的 C51系列单片机都是用这个软件开发程序的。换句通俗的话说,只要我们学会了它就可以修改程序或是自己从头写程序了,在这之后你将征服单片机。关于 Keil的介绍我
就不多说了,其它单片机入门文章里说得多了,而且对于务实派爱好者来说这并不重要,只要把它玩转了比什么都强。

  Keil编译器安装程序的可以到 网站下载设有代码大小限制的免费试用版,就是说我们写的程序大小不能**过 2K字节,否则不能编译、格杀毋论。初出茅庐的我们现在也写不了太大的程序,先用这个将就一段时间,如果以后有需要可以通过其它途径得到正式版的,随着了解的深入你终会想办法弄到的。

  Keil的安装不想多说,它和其它软件的安装方法大同小异。双击安装文件的图标之后就按默认设置“下一步”、“下一步”……“完成”就可以了。我为此特意在我的电脑里试验了这个过程,**你学得舒心、用得放心。安装好后在桌面和开始菜单里会多出 Keil μVision2的图标,双击运行。这里希望大家下载一种已经在网上流行的 Keil汉化版补丁,它可以将菜单和各种信息都变成中文,不论是我们的使用还是我的说明都要方便许多,这与我的英文水平很烂也有一点关系,这里我们也以中文菜单的版本为例。图 3所示的窗口就是 Keil的主窗口,看上去灰灰白白的没什么**,窗口**上方的菜单栏里我们点击“工程à打开工程”,在弹出的打开窗口里选择光盘里的“第一个工程”里的“第一个程序.Uv2”文件。注意,事先应该将光盘里的内容复制到电脑硬盘上再打开,不然在后面生成文件时会产生错误。插播一个解释,这里所说的“工程”是指一个项目的所有文件集合,包括一些链接文件、目标文件、源代码文件等,因为一个程序从编写到生成 HEX文件是许多文件共同努力的结果,我们在写程序时不是只打开一个原始的程序文件,而是要打开一个工程再在工程里面打开原始的程序文件,所以我首先打开工程是顺理成章的事情。回到正题,“第一个程序.Uv2”打开后窗口中会自动展开一份 “第一个程序.c”,如图 4所示。这是 C语言程序代码,C语言是单片机编程的重要语言之一,过不了多时你就会为它手舞足蹈,但我们现在不聊这个,卖个关子留到以后吊你的味口。现在我们只需改一下里面的数值,并用这个方法介绍一下 Keil编写程序到下载、运行的流程,不是我夸张,这个流程是你以后经常用的,只要玩单片机就会用到。

3. KEIL主窗口
图 3

图 4

  “Delay(1000); ”,这条语句你在“第一个程序.c”后边的内容里可以找到,括号里面有一个数值是 1000,意思是延时等待 1000个毫秒,也就是 1秒钟,正如我们看到的效果一样,LED每 1秒钟闪烁一次。

  现在我们就要对它下毒手了,把它变大或变小,对应的 LED闪烁速度也就会改变,修改的范围是 0到 65535之间。这里我们改了一个**有动感的速度,让 LED显得更有激情。我们将数值改为 250,也就是 1/4秒。改好后的程序是需要重新编译的,点击菜单栏里的“工程à构造目标”或是直接按键盘上的 F7键,窗口下方的输出窗口会显示编译的结果:“‘第一个程序’ -0 错误(S), 0警告(S)”。

  这时 Keil已经把 C语言文件翻译成单片机可以看懂的 HEX文件,这个 HEX文件就生成在“第一个工程”的工程文件夹里。下面的过程就不用我说了吧,HEX文件已经生成了,怎么下载到单片机你就看着办吧,古有云:好话不说二遍。

  “嘟嘟嘟 ”,下载成功了!看看 LED的闪烁是不是呼应了你激动的心动节奏呢!现在我们都可以欣慰了,单片机世界的大门已经关上,是把你牢牢地关在了里面。你已经无力逃脱,而且你也不想这样做,你拥有了单片机的实验平台,为你的想象插上了大鹏的翅膀,任你翱翔天际、瞰视凡尘。单片机前辈的成果供你学习,无数的单片机实用制作应接不暇。开始吧,网罗所有单片机相关的技术资料为己所用,你的技术爱好进入了全新境界。


[page]



 

原来如此

  也许你早已经没有耐心继续看下面的文字了,实验的趣味性总是能引人入胜,从实际操作的角度出发是本文的一个特点。艰苦的实验过程帮我们打通了任督二脉,但这并不表示习武生涯的结束,反而追根朔源成了新的渴望。了解我们实验过程中的技术原理对于深入学习单片机技术和应付死板的理论考试都有帮助。

  现在找到单片机**小系统的电路图,见《十八变兵器》图 5。这一次就要有板有眼地说说单片机的整个工作过程。我尽量少开一些玩笑,面对纯学术的知识还是怀有敬意的好,以便让大家能明白是怎么回事。先说芯片的一般要求,这可以在图 8上窥见一斑,AT89S52采用的是 5V的电源供电,Vcc和 GND接口是单片机的系统电源接口。另外它内部集成了可以反复擦写 10万次且掉电不会丢失数据的存储单元(ROM单元),我们用 ISP下载线下载的程序就存放在这里。还有一块存储区域是存放一些在程序运行时的临时数据(RAM单元),因为在 ROM单元里的数据下载后是不可以让单片机自己改写的,有一些经常变换的计算结果是可以在 RAM单元里轻松改变的,但 RAM单元里的数据在掉电后就烟消云散了,虽然看上去不怎么样,但这种结构还是常用的,C51系列的单片机就是采用的这种存储器结构,在日后的编程岁月里你会深有体会。以 AT89S52为例,其内部的 RAM单元** 256B(字节),如果要计算或处理许多数据则需要外扩 RAM芯片,外扩的 RAM单元**大可以达到 64KB(千字节)。怎么让单片机知道我们是使用内部的 RAM单元还是外扩呢,这就取决于单片机第 31脚,即 EA/VPP接口的状态。当单片机复位时读得 EA/VPP接口为高电平则使用内部 RAM单元,若为低电平则使用外扩的 RAM单元,外扩 RAM的使用有**的文章介绍。

  上面说的 RAM使用的选择是在复位的时候,那复位又是怎么回事呢?每个看似不相关的事件都是有必然联系,复位功能和整个单片机运行是密不可分的。电脑主机箱上的“RESET”按键可以让你打到一半的游戏消失并让电脑重新启动,一切都从头开始,程序不管走到哪里就要回到第一行去,电脑开机的时候也是需要复位的,那些知识渊博的电脑设计师们已经在你按下电源开关时悄悄地完成了复位。电脑上的故事同样适用在单片机这里,同时也证明了我开始所说的单片机就是一个小型电脑的说法,不过单片机芯片的设计者并没有将复位功能的电路直接放在 AT89S52的里面,也许是他们很懒或是出于更成熟的考虑,虽然有一些单片机有内部复位电路可是我们涉及的AT89S52没有,总之复位电路是要我们单片机爱好者自己设计的。有一些专用的复位芯片出售,它们都可以提供稳定**的复位信号,并且卖给我们一个较贵的价格。以我们现在的**小系统而言只要有一个阻容复位电路就足够了,这正是单片机**小系统电路图中 C1和 R存在的理由。系统通电的瞬间,电阻 R置于低电平,单片机读到 RET为低电平时就知道复位结束可以开始工作了。读者朋友可以在 C1的两端并联一个微动开关,这可实现不断开电源的手动复位功能,这在电路图里没有给出,你可以选择使用。单片机内部读到高电平的复位信号时是要忙一些事情的,它要把自己内部的东西收拾好,该回到开始位置的要移到开始位置,等它忙完了我们才可以让它开始工作。这就需要一段复位时间,以本文中的**小系统电路为例实现复位需要至少 12μS(微秒)的时间,这是在 12.00MHz时钟频率时 12个时钟脉冲或 2个机器周期的时间,这个时间的定义和产生是由单片机上另一个重要的电路部分实现的,这就是系统时钟电路。

  上回书中我亲切地称之为晶振部分电路的家伙其实应该叫系统时钟电路,因为当时是实践性的说明我也就讲的通俗直观一些,这两个名词在业内一讲谁都明白所指的是什么。系统时钟电路是产生单片机用的基准时间了,这可以让单片机在你所**的时刻**地行动。人们以铯原子(Cs133)基态的两个**精细能级之间跃迁所对应辐射的 9192631770个周期所持续的时间定义为一秒,虽然看上去很复杂但这让我们的生活多了时间观念。单片机的时间观念来自于一个**的脉冲源。

  你可以用专用芯片或是更精密的电路制作成**而稳定的脉冲信号源接到单片机的 XTAL1接口。除此之外单片机的内部还含有一个振荡电路,它可以和外接的石英晶体(俗称晶振)构成时钟脉冲,这也是本文电路中用到的方法。采用晶振电路设计的系统时钟电路一般都会接入两个几十皮法(pF)的电容,这是为了更好地提高晶振电路的时钟精度,一般的单片机电路设计都有这个部分,百益而无一害。系统时钟还可以更深入地介绍,但有**的系统时钟的理论文章介绍得比我专业,我则多留一些文字给后面实用的制作吧。

  
  再谈单片机的输入/输出接口,这是单片机实现工作的重要部分,上面谈到的所有电路**终都是为了让它动起来。输入 /输出接口常被称为 I/O口(IN/OUT)是单片机实现信号采集、控制、通信的接口,AT89S52的 I/O口分为四组,分别是 P0、P1、P2、P3,每组又分 8位分别是 P0.0~P0.7、P1.0~P1.7、P2.0~P2.7、P3.0~P3.7共 32个 I/O口,在**小系统电路图上可以了解其位置分布。每一个接口都可以作为信号的输入或输出使用,这是在程序中选择的,但无论输入还是输出都只有高、低电平两种状态。那怎么让单片机作为输出接口实现对外部电路的控制呢?答案是软硬件的**配合,只要我们在程序中写上“P1.0=0”则 P1.0接口被拉到低电平,实验板上连接在 P1.0接口的 LED正极连接到 5V而负极的 P1.0为低电平,LED就会被点亮。相反的“P1.0 = 1”则 P1.0接口被拉到高电平,LED两端同为高电平状态,LED熄灭。一高一低之间我们的 LED就闪烁了起来,这就是 I/O口输出控制的原理。作为输入接口的原理要从连接到 P2.0接口的微动开关入手,我们要让单片机知道何时开关被按下就要让它一直读 P2.0的状态,在此之前先要用程序将 P2.0设置成高电平。然后单片机不厌其烦地读着 P2.0的电平状态,如果读到高电平则和我们事先设置的是一样,表示没有按下开关。微动开关的另一端是与地连接的,按下开关则 P2.0被迫与地短路即变为低电平,程序读到的也就变成低电平,输入功能即可实现。顺便说一下,开关按键部分的程序设计还要涉及到延时去除按键抖动的部分,**读到信号的准确,在编写程序的时候会用到这个。如果单片机的 32个 I/O口都只是一样的功能也许你会感觉有一些单调,单片机设计者们可能也这样认为,于是他们设计了一些复用功能,就是部分 I/O口可以当其它功能使用。AT89S52的复用功能多种多样,有一路两线串口与 P3.0、P3.1复用,两路硬件中断与 P3.2、P3.3复用等等,更奇妙的是 P0接口是具有输入、输出、高阻抗的三态 I/O口,这些功能在特殊场合都很实用,我们可以在 AT89S52的原版技术手册上了解这些内容。

  有一些资料是**的,这里**要提一下。有谁比单片机的设计者更了解单片机呢?大家都能看得出这是设问句,所以我们要看设计者们写的单片机文章才**,从文章中我们可以****而系统地了解 AT89S52,包括它的电气参数、系统结构、指令集等。虽然这让我辛辛苦苦写的这篇文章显得一无事处,但我还是向大家推荐 AT89S52的原版技术手册。不用担心,它是免费的,可以在网上搜索到该技术手册的电子版,等待你茶余饭后细细品味。

  到此为止,单片机的理论与实践全部完成,我松了一口气,也不知我说得对不对、细不细、好不好。我既希望简单明了又希望面面俱到,既想轻松风趣又想认真严谨。不能单调无趣、不可一带而过,我用我的写作方式与大家分享一个故事,一个《无线电》爱好者与单片机之间的浪漫爱情故事。





3. KEIL主窗口




网站导航

售前咨询:023-58556299

技术咨询:023-58722688

返回顶部