24小(xiǎo)时联系電(diàn)话:18217114652、13661815404
中文(wén)
- 您当前的位置:
- 首页>
- 電(diàn)子资讯>
- 行业资讯>
- 单片机设计与KeilC编...
行业资讯
单片机设计与KeilC编程总结
质量是关键。没有(yǒu)人会对很(hěn)差的工作感到满足。当完成高质量的工作时,你会為(wèi)此而感到骄傲。不管你是否知道,你都会因為(wèi)你的高质量工作而得到信誉。因此,要想為(wèi)自己所做的事感到骄傲,就需要建立个人标准,并為(wèi)达到这一标准而努力奋斗。在达到这些标准时,再提高标准并继续努力。挑战自己去完成更优良的工作,你将会為(wèi)自己的成就而感到惊讶。
1.1 了解单片机的能(néng)力
【规则1】设计满足要求的最精简的系统。
正确估计单片机的能(néng)力,知道单片机能(néng)做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。我们应该有(yǒu)这样一个认识,即单片机的处理(lǐ)能(néng)力是非常强大的。早期的PC 机,其CPU(8086)处理(lǐ)能(néng)力和8051 相当,却能(néng)处理(lǐ)相当复杂的任務(wù)。单片机的能(néng)力的关键就在软件设计者编写的软件上。只有(yǒu)充分(fēn)地了解到单片机的能(néng)力,才不会做出“冗余”的系统设计。而采用(yòng)许多(duō)的外围芯片来实现单片机能(néng)实现的功能(néng)。这样做即增加了系统成本,也可(kě)能(néng)会降低了系统的可(kě)靠性。
1.2 系统可(kě)靠性至关重要
【规则2】使用(yòng)看门狗。
看门狗電(diàn)路通常是一块在有(yǒu)规律的时间间隔中进行更新(xīn)的硬件。更新(xīn)一般由单片机来完成,如果在一定间隔内没能(néng)更新(xīn)看门狗,那看门狗将产生复位信号,重新(xīn)复位单片机。更新(xīn)看门狗的具體(tǐ)形式多(duō)是给看门狗芯片相关引脚提供一个電(diàn)平上升沿或读写它的某个寄存器。使用(yòng)看门狗電(diàn)路将在单片机发生故障进行死机状态时,重新(xīn)复位单片机。当前有(yǒu)多(duō)种看门狗的芯片,如MAXIM 公司的MAX802,MAX813等。而且,有(yǒu)好多(duō)种单片机中本身就集成有(yǒu)看门狗。一个外部的看门狗是最好的,因為(wèi)它不依赖于单片机。如果可(kě)能(néng)的话,看门狗更新(xīn)程序不应该放在中断或是子程序中,原则上应该放在主程序中。我曾经见过一个工程师,他(tā)所调试的程序在运行时偶而会引起看门狗的复位动作,于是他(tā)干脆在每10ms 就中断一次的时钟中断程序中清看门狗。我相信他(tā)也知道使看门狗失去作用(yòng),可(kě)他(tā)却没有(yǒu)不是去查明引起这个现象的真正原因。因此,我想提醒大家:不论什么理(lǐ)由,绝对不要忽略系统故障的真正原因。高质量的产品来自于高素质的工程师,高质量的产品造就高素质的工程师。
【规则3】确定系统的复位信号可(kě)靠。
这是一个很(hěn)容易忽略的问题。当你在设计单片机系统时,你脑中有(yǒu)这个概念吗?什么样的复位信号才是可(kě)靠的吗?你用(yòng)示波器查看过你设计的产品的复位信号吗?不稳定的复位信号可(kě)能(néng)会产生什么样的后果?你有(yǒu)没有(yǒu)发现过你所设计的单片机系统,每次重新(xīn)上電(diàn)启动后,数据变得乱七八糟,并且每一次现象并不相同,找不出规律,或者有(yǒu)时候干脆不运行,或者有(yǒu)时候进入一种死机状态,有(yǒu)时候又(yòu)一点事都没有(yǒu)正常运行?在这种情况下,你应该查一下你的系统的复位信号。一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应為(wèi)。复位電(diàn)平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有(yǒu)特别重要的一点就是复位電(diàn)平应与電(diàn)源上電(diàn)在同一时刻发生,即芯片一上電(diàn),复位信号就已产生。不然,由于没有(yǒu)经过复位,单片机中的寄存器的值為(wèi)随机值,上電(diàn)时就会按PC 寄存器中的随机内容开始运行程序,这样很(hěn)容易进行误操作或进入死机状态。
【规则4】确定系统的初始化有(yǒu)效。
系统程序开始应延时一段时间。这是很(hěn)多(duō)单片机程序设计中的常用(yòng)方法,為(wèi)什么呢(ne)?因為(wèi)系统中的芯片以及器件从上電(diàn)开始到正常工作的状态往往有(yǒu)一段时间,程序开始时延时一段时间,是让系统中所有(yǒu)器件到达正常工作状态。究竟延时多(duō)少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的為(wèi)准。一般来说,延时20-100 毫秒(miǎo)已经足够。对于系统中使用(yòng)嵌入式MODEM 等“慢热”型的器件来说,则应更長(cháng)。当然,这都需要在系统实际运行中进行调整。
【规则5】上電(diàn)时对系统进行检测。
上電(diàn)时对系统中进行检测是单片机程序中的一个良好设计。在硬件设计时也应该细细考虑将各个使用(yòng)到的芯片、接口设计成容易使用(yòng)软件进行测试的模式。很(hěn)多(duō)有(yǒu)经验的单片机设计者都会在系统上電(diàn)时(特别是第一次上電(diàn)时)进行全面的检测,或者更进一步,将系统的运行状态中分(fēn)為(wèi)测试模式和正常运行模式,通过加入测试模式对系统进行详细的检测,使得系统的批量检测更為(wèi)方便容易。另外要注意的是,一个简单明了的故障显示界面也是颇要费得心思的。比如:系统的外部RAM(数据存储器)是单片机系统中常用(yòng)的器件。外部RAM 如果存在问题,程序通常都会成為(wèi)一匹脱缰的野马。因此,程序在启动时(至少在第一次上電(diàn)启动时)一定要对外部RAM 进行检测。检测内容包括:1)检测RAM 中的单元。这主要通过写入和读出的数据保持一致。
2)检测单片机与RAM 之间的地址数据总線(xiàn)。总線(xiàn)即没有(yǒu)互相短路,也没有(yǒu)连接到“地”上。另外,很(hěn)多(duō)芯片,都提供了测试的方法。如串行通信芯片UART,都带环路测试的功能(néng)。
【规则6】按EMC 测试要求设计硬件。
EMC 测试要求已经成為(wèi)产品的必需。有(yǒu)很(hěn)多(duō)的文(wén)章关于这方面的。
1.3 软件编程和调试
【规则7】尽可(kě)能(néng)使用(yòng)Small 模式编译
对比起Large 模式和Compact 模式,Small 模式能(néng)生成更為(wèi)紧凑的代码。在Small模式下,C51 编译器将没有(yǒu)使用(yòng)关键词,如idata、pdata、xdata 特殊声明的变量通通放在data 单元中。在编程中,对于在的数据區(qū),可(kě)以指定放在外部存储器中。
【规则8】在仿真前做好充分(fēn)的准备
单片机硬件仿真器给单片机开发者带来了极大的方便,同时也很(hěn)容易造成人的依赖性。很(hěn)多(duō)时候,没有(yǒu)仿真器却能(néng)促使工程师写出更高质量的程序。也许在硬件仿真调试之前,下面准备工作将会对你有(yǒu)用(yòng):
1)程序编完后,对代码仔细逐行检查。检查代码的错误,建立自己的代码检查表,对经常易错的地方进行检查。检查代码是否符合编程规范。
2)对各个子程序进行测试。测试的方法:用(yòng)程序测试程序,编制一个调用(yòng)该子程序的代码,建立要测试子程序的入口条件,再看看它是否按预期输出结果。
3)如果代码有(yǒu)修改,再次对代码进行检查。
4)有(yǒu)可(kě)能(néng)的话,进行软件仿真——Keil C 的软件仿真功能(néng)十分(fēn)强大。软件仿真可(kě)以防止因硬件的错误,如器件损坏、線(xiàn)路断路或短路,而引起调试的错误。
5)开始硬件仿真。