keil5创建51单片机工程实验中没有错误为什么工程不能被创建

  应用keil5创建51单片机工程的时候经常会遇到需要短时间延时的情况。需要的延时时间很短一般都是几十到几百微妙(us)。有时候还需要很高的精度比如用keil5创建51单片機工程驱动 DS18B20的时候,误差容许的范围在十几us以内不然很容易出错。这种情况下用计时器往往有点小题大做。而在极端的情况下计时器甚至已经全部派上了别的用途。这时就需要我们另想别的办法了

  以前用汇编语言写keil5创建51单片机工程程序的时候,这个问题还是相對容易解决的比如用的是12MHz晶振的51,打算延时20us只要用下面的代码,就可以满足一般的需要:

  51 keil5创建51单片机工程的指令周期是晶振频率嘚1/12也就是1us一个周期。mov r0 #09h需要2个极其周期,djnz也需要2个极其周期那么存在r0里的数就是(20-2)/2。用这种方法可以非常方便的实现256us以下时间的延时。如果需要更长时间可以使用两层嵌套。而且精度可以达到2us一般来说,这已经足够了

  现在,应用更广泛的毫无疑问是Keil的C编譯器相对汇编来说,C固然有很多优点比如程序易维护,便于理解适合大的项目。但缺点(我觉得这是C的唯一一个缺点了)就是实时性没有保证无法预测代码执行的指令周期。因而在实时性要求高的场合还需要汇编和C的联合应用。但是是不是这样一个延时程序也需要用汇编来实现呢?为了找到这个答案我做了一个实验。

  用C语言实现延时程序首先想到的就是C常用的循环语句。下面这段代码昰我经常在网上看到的:

  到底这段代码能达到多高的精度呢为了直接衡量这段代码的效果,我把 Keil C 根据这段代码产生的汇编代码找了絀来:

         JZ   C0010

  真是不看不知道~~~一看才知道这个延时程序是多么的不准点~~~光看主要的那四条语句,就需要6个机器周期也就是说,它的精度顶多也就是6us而已这还没算上一条 lcall 和一条 ret。如果我们把调用函数时赋的i值根延时长度列一个表的话就是:

  因为函数的调用需要2个时钟周期的lcall,所以delay me比从函数代码的执行时间多2顺便提一下,有的朋友写的是这样的代码:

  可能有人认为这會生成更长的汇编代码来但是事实证明:

         JZ   ?C0010

  其生成的代码是一样的不过这的确不是什么好的习惯。因為这里实在没有必要再引入多余的变量我们继续讨论正题。有的朋友为了得当更长的延时甚至用了这样的代码:

  这段代码产生的彙编代码是什么样子的?其实不用想也知道它是如何恐怖的$#^%&%$...。.让我们看一看:

      R   MOV   iR4

      R   MOV   R0,i

  A       JZ   C0010

      R   MOV   i,A

         SJMP  C0007

  呵呵,这倒是的确可以延迟很长时间~~~但是毫无精度可言了

  那么,用C到底能不能实现精确的延时呢我把代码稍微改了一下:

  因为根据经验,越简洁的C代码往往也能得出越简洁的机器代碼那这样结果如何呢?把它生成的汇编代码拿出来看一看就知道了满怀希望的我按下了“Build target”键,结果打击是巨大的:

  虽说生成的玳码跟用for语句是不大一样不过我可以毫无疑问的说,这两种方法的效率是一样的似乎到此为止了,因为我实在想不出来源程序还有什麼简化的余地看来我就要得出来这个结论了:“如果需要us级的延时精度,需要时用汇编语言”但是真的是这样吗?我还是不甘心因為我不相信大名鼎鼎的 Keil C 编译器居然连 djnz 都不会用??因为实际上程序体里只需要一句 loop: djnz r7 loop。近乎绝望之际(往往人在这种情况下确可以爆發出来哦呵呵呵~~~),我随手改了一下:

  心不在焉的编译看源码:

  天~~~奇迹出现了。....我想这个程序应该已经可以满足一般情况丅的需要了。如果列个表格的话:

  计算延时时间时已经算上了调用函数的lcall语句所花的2个时钟周期的时间。

  终于结果已经明了叻。只要合理的运用C还是可以达到意想不到的效果。很多朋友抱怨C效率比汇编差了很多其实如果对Keil C的编译原理有一个较深入的理解,昰可以通过恰当的语法运用让生成的C代码达到最优化。即使这看起来不大可能但还是有一些简单的原则可循的:1.尽量使用unsigned 型的数据结構。2.尽量使用char型实在不够用再用int,然后才是long3.如果有可能,不要用浮点型4.使用简洁的代码,因为按照经验简洁的C代码往往可以生成簡洁的目标代码(虽说不是在所有的情况下都成立)。

图11 添加文件到工程

图12 文件选择对話框

点击add后会回到编辑界面,大家注意此时在Source Group 1下面多了一个文件文件zndz.c文件,我们的程序代码就可以在zndz.c里面写了

图14 将文件添加到工程后的界面

  通过上面7步,我们学会了如何在keil建立一个工程和文件并把文件添加到工作里面,下面我们就可以直接在文件里面编写程序了

2、程序编编辑、编译 这里我们把不事先写好的电子钟程序(源程序请点击这里面下载)直接复制到编辑文件栏中,如图15,


 因为此程序是倳先调试过个所以可经直接下载(后面的课程会具体讲到初次写程序后的一些调试过程)在进行下载前需做下面的工作。(具体为什么這样大家先不用管后面课程会讲到)
  点击界面左上角快捷方式按钮出现设置界面如图16。选择Output选项然后在Creat Hex file选项前打钩,然后点击确定即可
  HEX文件设置后,会重新回到编辑界面此时再次点击全部编译按键,此时会在最后面的编译信息窗口看到多出了creating hex file from “led1”…如图17所示此时表明在工程文件中生成了hex文件。

图17 生成hex文件后的窗口

  此时我们就可以进行下面一步程序的下载了。

(软件下载请点击)STC_ISP_V3.5是宏晶科技公司提供的能直接在编程者电脑上使用的ISP

   以下是烧录程序的主要界面。操作过程非常简单图中红色的五个大数字就表示了整個过程。简简单单的五步就可以实现

 一、启动本烧录程序后,第一步就是选择烧录器件。本烧录软件支持STC全系列的51keil5创建51单片机工程芯片,因此,第一步必须选择相对应的型号

  另外,?APMemory?是指该芯片的内存大小和起止地址,根据器件型号自动更改, 不必理会。

二、选择了器件型号,第二步就应该选择将要被烧录的.HEX机器码文件或.bin  二 进制文件HEX  文件由keil5创建51单片机工程开发环境输入、编辑代码,最后编绎产生(keil  编 译产生)。如图所示

  三、选择串口连接电脑和开发板,串口下载默认是COM1口如果用RS232-USB 转接线下载,COM口就不一样了可以右键我的电脑看到图示多出的COM3口。(当 然不同的电脑可能会不一样!)

  四、选择波特率一般情况下这都是默认的,最高波特率选择115200最低波特率选择1200

  五、以上四个步驟完成后直接点击Download/下载 进行下会看到如下图所示提 示,此时给请给keil5创建51单片机工程断电复位(打开开关MCU  OFF/ON)

  断电复位后可以看到如下图所示提示:

  到此,一个完整的程序就下载到开发板上了可以在实验板上看到8led灯流水的效果了。
   keil5创建51单片机工程系统设计主要包括硬件設计和软件设计对于keil5创建51单片机工程初者来说主要在于软件的学习,也就是程序设计等大家程序这块掌握得差不多了,再去结合具体嘚项目学习做硬件最终掌握keil5创建51单片机工程系统设计的方法。而在进行软件学习的时候需要用到keil5创建51单片机工程实验板进行实验验证實验板建议直接购买,当然如果电子技术基础好的话自己做板也是可以的。这次教程开发程序所用到的软件为keil uVision2,该软件大家可以到实验室嘚下载中心进行下载;硬件实验平台主要采用我们实验室自行设计的实验板,有需要的请直接与我们联系下面分别介绍这keil uVision2和实验板的使用方法,在程序编写完成后需把程序烧写到keil5创建51单片机工程中我们是用ISP在线下载工具,这里一并进行介绍 为了便于大家学习,这里我们写┅个以1602液晶为显示器件的可显示时、分、秒的电子时钟程序为例介绍整体程序从编辑、编译到下载的全过程(具休程序已事先写好并经囸常调试无误,后面课程会具体介绍这里暂不作讲解)
在正式的写程序之前,需进行keil uVision2软件的安装和实验板驱动程序的安装相关的软件忣驱动程序请大家直接在实验室网站下载中心进行下载,这里给出下载地址keil uVision2软件件及安装方法、实验板驱动程序及安装方法。
安装安成後即可按下面的步骤进行。

1、KEIL软件的使用及工程文件的建立 51keil5创建51单片机工程程序设计所用到的开发软件主要是keil uVision是由德国Keil Software公司开发的,2005年Keil公司被ARM公司收购并于2009年发布了keil uVision4,这个版本的软件支持ARM系列的芯片如现目前流行的STM32等芯片 ,我们这里使用的是uVision2版本


双击keil快捷方式圖标(软件安装好后,一般在桌面上会有快捷方式双击即可),出现启动界面如图1紧接着出现编辑界面如图2。

图1 启动keil软件时的界面

圖2 进入keil后的编辑界面   进入keil编辑界面后点击Project菜单中的New Project选项如图3所示(注意,如果之前该软件已经建立过工程需要点击Close Project后再新建工程)。
   (3)、选择该工程所要保存的路径输入工程名。对于keil软件一个工程里面通常包含若干个文件,为了便于管理一般先建立一个文件夹鼡于存放该工程文件,这里我们在桌面上建立文件文件夹(当然也可以放在其它盘里面)取名为“zndz”,然后将工程文件也取名为“zndz”,并點击保存如图4所示。
  点击“保存”后会马上弹出一个要求用户选择keil5创建51单片机工程型号的对话框,里面有各个公司的keil5创建51单片机工程用户根据自己采用keil5创建51单片机工程加以选择即可,如图5所示我们实验板上的型号为STC89C52,大家会发现此对话框里并没有该型号的keil5创建51单爿机工程,但51内核的keil5创建51单片机工程具有通用性所以我们选用任何一款89c52keil5创建51单片机工程都可以,这里我们选择Atmel公司的AT89C52,然后点击“确定”如图5所示。

点击“确定”后会有一个启动代码复制提示框出现如图7所示,里面的内容是问你是否需要复制8051keil5创建51单片机工程的启动代码因为我们是采用C语言编程,这里我们直接点击“否”就可以了

图6 启动代码复制提示框

  之后就会进入新的编辑界面,如图7所示至此,一个keil5创建51单片机工程工程就建立好了但这个工程并不是一个完整的工程,工程中还需要建相应的文件才行下面我们开始建立文件。

圖7 选择keil5创建51单片机工程后的界面     如图点击图8编辑界面左上角的或点击New菜单片的File菜单,之后会出现如图9所示的界面

图9 建立文件后的界媔    文件建好后还得将来文件添加到工程去,在添加之前我们先得对文件进行保存点击按钮,此时会出现界面如图10所示在文件名(N)后面的框中取名“zndz.c”,注意因为是采用C语言编程所以文件名的后缀名为“.c”,如果是采用汇编语言则后缀名应该“.asm”.然后点击保存。

西瓜创客keil5创建51单片机工程编程入門教程,专为7-12岁少儿设计,从入门到进阶课程体系完整,海归名师在线教学,挖掘少儿潜力,助力少儿升学,让少儿赢在起跑线上.

我要回帖

更多关于 keil5创建51单片机工程 的文章

 

随机推荐