单片机系统设计与C51编程实践
基本原则
质量是关键。没有人会对很差的工作感到满足。当完成高质量的工作时,你会为此而感到骄傲。不管你是否知道,你都会因为你的高质量工作而得到信誉。因此,要想为自己所做的事感到骄傲,就需要建立个人标准,并为达到这一标准而努力奋斗。在达到这些标准时,再提高标准并继续努力。挑战自己去完成更优良的工作,你将会为自己的成就而感到惊讶。
1.1 了解单片机的能力
【规则1】设计满足要求的最精简的系统。
正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。我们应该有这样一个认识,即单片机的处理能力是非常强大的。早期的PC机,其CPU(8086)处理能力和8051 相当,却能处理相当复杂的任务。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出"冗余"的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。
1.2 系统可靠性至关重要
【规则2】使用看门狗。
看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复位信号,重新复位单片机。更新看门狗的具体形式多是给看门狗芯片相关引脚提供一个电平上升沿或读写它的某个寄存器。使用看门狗电路将在单片机发生故障进行死机状态时,重新复位单片机。当前有多种看门狗的芯片,如MAXIM 公司的MAX802,MAX813 等。而且,有好多种单片机中本身就集成有看门狗。一个外部的看门狗是最好的,因为它不依赖于单片机。如果可能的话,看门狗更新程序不应该放在中断或是子程序中,原则上应该放在主程序中。我曾经见过一个工程师,他所调试的程序在运行时偶而会引起看门狗的复位动作,于是他干脆在每10ms 就中断一次的时钟中断程序中清看门狗。我相信他也知道使看门狗失去作用,可他却没有不是去查明引起这个现象的真正原因。因此,我想提醒大家:不论什么理由,绝对不要忽略系统故障的真正原因。高质量的产品来自于高素质的工程师,高质量的产品造就高素质的工程师。
【规则3】确定系统的复位信号可靠。
这是一个很容易忽略的问题。当你在设计单片机系统时,你脑中有这个概念吗?什么样的复位信号才是可靠的吗?你用示波器查看过你设计的产品的复位信号吗?不稳定的复位信号可能会产生什么样的后果?你有没有发现过你所设计的单片机系统,每次重新上电启动后,数据变得乱七八糟,并且每一次现象并不相同,找不出规律,或者有时候干脆不运行,或者有时候进入一种死机状态,有时候又一点事都没有正常运行?在这种情况下,你应该查一下你的系统的复位信号。一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC 寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。
【规则4】确定系统的初始化有效。
系统程序开始应延时一段时间。这是很多单片机程序设计中的常用方法,为什么呢?因为系统中的芯片以及器件从上电开始到正常工作的状态往往有一段时间,程序开始时延时一段时间,是让系统中所有器件到达正常工作状态。究竟延时多少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的为准。一般来说,延时20-100毫秒已经足够。对于系统中使用嵌入式MODEM 等"慢热"型的器件来说,则应更长。当然,这都需要在系统实际运行中进行调整。
【规则5】上电时对系统进行检测。
上电时对系统中进行检测是单片机程序中的一个良好设计。在硬件设计时也应该细细考虑将各个使用到的芯片、接口设计成容易使用软件进行测试的模式。很多有经验的单片机设计者都会在系统上电时(特别是第一次上电时)进行全面的检测,或者更进一步,将系统的运行状态中分为测试模式和正常运行模式,通过加入测试模式对系统进行详细的检测,使得系统的批量检测更为方便容易。另外要注意的是,一个简单明了的故障显示界面也是颇要费得心思的。比如:系统的外部RAM(数据存储器)是单片机系统中常用的器件。外部RAM 如果存在问题,程序通常都会成为一匹脱缰的野马。因此,程序在启动时(至少在第一
- 婵°倕鍊瑰玻鎸庮殽閸モ晙鐒婇柛鏇ㄥ灱閺嗐儳鈧鎮堕崕鎶藉煝閼测晜鏆滈柛顐g箓閹鏌熺€涙ê濮囬柣鎾规硶閹峰顢橀悢鍛婄暚缂備礁顑呴鍛淬€冨⿰鍛晳闁跨噦鎷�
闂佺ǹ绻堥崝宥夊蓟閻斿憡濯寸€广儱鎷嬮崝鍛槈閺冨倸孝闁汇劎濮甸敍鎰板箣濠婂懐鎳囨繛鎴炴尰濮樸劑鎮¢敍鍕珰闁糕槅鍘剧粈澶愭煙缂佹ê濮囩€规洖鐭傞幆宥夊棘閸喚宀涢悗瑙勬偠閸庢壆绱為弮鍫熷殑闁芥ê顦~鏃堟煥濞戞ǹ瀚板┑顕呬邯楠炲啴濡搁妷锕€娓愰梻渚囧亞閸犳劙宕瑰鑸碘拹濠㈣埖鐡曠粈瀣归崗鍧氱細妞ゎ偄鎳橀幆鍐礋椤愩倖顔忔俊顐ゅ閸ㄥ灚瀵奸幇顔剧煓閻庯綆浜為悷锟�...
- 婵炴垶鎼╅崢鐐殽閸モ晙鐒婇柛鏇ㄥ灱閺嗐儳鈧鎮堕崕鎶藉煝閼测晜鏆滈柛顐g箓閹鏌熺€涙ê濮囬柣鎾规硶閹峰顢橀悢鍛婄暚缂備礁顑呴鍛淬€冨⿰鍛晳闁跨噦鎷�
缂備緡鍣g粻鏍焵椤掑﹥瀚�30婵犮垼鍩栧畝绋课涢鍌欑剨闁告洦鍨奸弳銉╂煕閳哄喚鏀版い鏂垮閹风娀宕滆閺屻倝鏌ㄥ☉妯侯殭缂佹鎸鹃埀顒傤攰閸╂牕顔忕捄銊﹀珰闁规儳鎳愮粈澶愭煕閺傜儤娅呮い鎺斿枛瀹曘劌螣閻戞ê娓愰梻渚囧亞閸犳洟骞撻鍫濈濡鑳堕鍗炩槈閹垮啩绨婚柟顔奸叄瀵粙鎮℃惔锝嗩啅婵☆偆澧楅崹鍨閹邦喚鐭欓悗锝庝簽閻熷酣鏌i妸銉ヮ伂妞も晪绠戞晥闁跨噦鎷�...
- Agilent ADS 闂佽桨鐒﹂悷銉╊敆閻旂厧鏄ョ痪顓炴媼閸炴煡鎮归崶褍鈷旈柍璇插悑缁鸿棄螖閸曞灚顥�
婵炴垶鎸婚幐鎼侇敊瀹ュ绠抽柛顐秵閸わ箓鏌ㄥ☉妯垮闁告瑥绻樺Λ鍐閿濆骸鏁奸柣鐔哥懐閺嬪儊S闂佸憡鑹剧€氼噣锝為幒妤€绀夐柣鏃囶嚙閸樻挳鏌涘⿰鍐濞村吋鍔楃划娆戔偓锝庝簽鐎瑰鏌i姀鈺冨帨缂侀亶浜跺畷婵嬪煛閸屾矮鎲鹃梺鐑╁亾閸斿秴銆掗崼鏇熷剹妞ゆ挾濮甸悾閬嶆煛閸愩劎鍩f俊顐ユ硶閳ь剚鍐荤紓姘辨閻у挷S...
- HFSS闁诲孩鍐荤紓姘卞姬閸曨垰鏄ョ痪顓炴媼閸炴煡鎮归崶褍鈷旈柍璇插悑缁鸿棄螖閸曞灚顥�
闁荤姍鍐仾缂佽鐒︾粙澶愬箻閹颁礁鏅欓梺鐟版惈閻楁劙顢氶幎鑺ユ櫖閻忕偠妫勫鍧楁⒒閸稑鐏辨い鏂款樀楠炴帡宕峰▎绂⊿闂佹眹鍔岀€氼剚鎱ㄥ☉銏″殑闁芥ê顦扮€氭煡骞栫€涙ɑ鈷掗柡浣靛€濋弫宥囦沪閽樺鐩庨梺鍛婃煛閺呮粓宕戝澶婄闁靛ň鏅滃銊х磼椤栨繂鍚圭紒顔芥そ瀹曠兘寮跺▎鎯уΤ婵炴垶姊绘慨鐢垫暜婢舵劕绠垫い鈥抽敪SS...
- CST閻庣敻鍋婇崰妤冧焊濠靛棭鍟呴柕澶堝€楃粙濠囨倵楠炲灝鈧洟鎮$捄銊﹀妞ゆ挾鍠愬▓宀€绱掔€n亶鍎忔い銊︾矌閹叉鏁撻敓锟�
闂佸搫顦€涒晛危閹存緷铏光偓锝傛櫅閻︽粓鎮规担绛嬪殝缂佽鲸绻堝畷妤呭Ω閳哄倹銆冮柣鐘辩瀵泛顔忕欢缍璗闂佸憡鑹剧€氫即濡村澶婄闁绘棁顕ч崢鎾煕濠婂啳瀚板ù鍏煎姉缁瑧鈧綆浜炵€瑰鏌i姀鈺冨帨缂佽鲸绻堝畷婵嬪煛閸屾矮鎲鹃棅顐㈡祩閸嬪﹪鍩€椤掑倸鏋欓柛銈嗙矌閳ь剚鍐婚梽鍕暜婢舵劕绠垫い鈥愁敍T闁荤姳鐒﹀畷姗€顢橀崨濠冨劅闁哄啫鍊归弳锟�...
- 闁诲繐绻愮€氫即銆傞崼鏇炴槬闁惧繗顕栭弨銊╂煕閳哄喚鏀版い鏂垮閹风娀宕滆閺岋拷
婵炴垶鎸稿ú锝囩箔閳ь剙螖閸屾惮鎴﹀Χ婵傚摜宓侀柛鎰级閸曢箖鎮硅閸ゆ牜妲愬┑鍥ㄤ氦婵炲棗娴烽弰鍌炴偣閸パ冣挃闁宠鍚嬬粙澶嬫姜閹殿喚鈽夐梺闈╄礋閸斿矂鎯冮悩绛圭矗闁瑰鍋涜灇闂佸搫鐗滈崹鍫曘€傞锕€鏄ラ柣鏃€鐏氭禍锝夋倶閻愬瓨绀冮悗姘辨暬閹虫ê顫濋崜褏顦梺鐟扮仛閹搁绮崨鏉戦敜婵﹩鍓涢弶浠嬫煟閵娿儱顏х紒妤佹尰缁嬪顫濋鍌氭暏缂佺虎鍘搁崑锟�...
- 閻庣敻鍋婇崰妤冧焊濠靛牅鐒婇柛鏇ㄥ灱閺嗐儲绻涢弶鎴剶闁革絾妞介獮娆忣吋閸曨厾鈻曢梺绯曟櫇椤㈠﹪顢欓崟顓熷珰闁告挆鈧弻銈夋煕濮橆剛澧︽繛澶涙嫹
闁荤姵鍔﹂崢娲箯闁秴瑙﹂柛顐犲劜閼茬娀鏌¢崶銊︾稇闁汇倕瀚伴獮鍡涙偑閸涱垳顦紓鍌氬暞閸ㄧ敻宕规惔銊ノュ〒姘e亾妞わ絽澧庨幏顐﹀矗濡搫纾块梺闈涙閼冲爼濡靛顑芥灃闁靛繒濮甸悵銈夋煏閸℃洘顦峰ǎ鍥э躬瀹曪綁鏌ㄧ€n剛鍩嶉梺鎸庣☉閺堫剟宕瑰⿰鍛暫濞达絽婀辨竟澶愭煛瀹ュ妫戠紒銊ユ健閺屽懘鏁撻敓锟�...