[资料分享] 学习单片机不要依赖“仿真”

忙忙草   2008-6-20 13:05 楼主
学习单片机或设计单片机产品需要“仿真”,在很多单片机设计者和单片机初学者的头脑中,似乎是一种很自然的观念,学习单片机或搞单片机产品设计需要有仿真器或类似的设备,特别是调试程序必须用仿真器,否则调试程序将很难进行,特别是使用者需要仿真器的断点功能。但笔者认为这是单片机设计中的一种“旧观念”或一个误区。
现在的单片机种类及型号非常多,其中有一种是“一次性编程”的。如果这种单片机有同类型的FLASH型号的,就可在开发期间用FLASH型的单片机调试程序,等到批量生产时再使用一次性编程的芯片,这样既不用仿真器又可降低开发成本。而有些型号的单片机只有一次性编程的芯片,则使用这种单片机开发产品调试程序时就必须使用仿真器了,而这种仿真器往往是专用的,才属于名符其实的仿真器。如果是特殊需要或特殊目的必需用这类单片机芯片,那只好配备仿真器搞开发设计了。否则的话,最好不要选用这类的单片机芯片设计产品或开发项目。因为,现在有很多种FLASH型的单片机可供选择,何苦非要用那种一次性编程的单片机呢?
对于初学者,最好用AT89S51单片机学起,充分利用其特有的可多次在线编程的功能,会收到很大收获,当然可以买一些简易的价格便宜的实验板来学习电路设计和调试程序。如果方便最好是自已制作一些简单的实用电路板,然后用这样的电路板调试程序,其学习效果会更好,不要被那些只有“用仿真器”才能学习单片机的旧观念所误导。
目前市场上还有些冠以“仿真机”或“开发机”等美名的产品,可却是用早已淘汰的芯片8031组装的,估计也是早些年的库存积压产品吧。那么这种机器只能用于学习单片机及调试一些简单程序,是不能仿真的。凡是学过MCS-51单片机的人都知道,8031单片机必须外配程序存储器,所以,必须用P0口和P2口扩展地址总线和数据总线,P3.6/WR和P3.7/RD还要用作写/读控制线。而现在你的产品不可能还用8031来设计吧(如果你非用的话那就不要说你是搞单片机的,而是搞古物收藏的),实际设计的产品中一般都使用FLASH型单片机,不再使用外部总线了,单片机的P0和P2口都完全用作并行接口了。因此,凡是有一点单片机常识的人都会知道那种“机器”是无法仿真的,除非你不知道“仿真”是何意,当然用软件“仿真”除外。
如果想仿真调试程序,可以用软件来做“模拟仿真”。现在的仿真软件很多,在网络上可以免费下载。初学者可以从软件仿真学起,对学习编程还是有好处的。但硬件往往不容易做到完全仿真。因为,一般的“仿真机”电路往往是固定的封闭的,用户自由设计性很差,所以,很难做到与实际产品一致。可想而知,在这种仿真机上测试硬件和调试软件,就算完全通过了,可与实际产品相差很大,当在实际产品的样机上测试硬件和调试软件时,还要重新做起。与其说是在仿真机上做“仿真“,不如说是在做假,自已欺骗自已罢了!何苦要走弯路呢?
笔者搞单片机近20年,也做了一些产品和项目,从未用过仿真器或仿真机。具体做法就是直接设计产品,先组装一台样机,然后就在样机上测试硬件性能和调试程序。这是完全真实的实际运行,称为“全真”运行,只有在全真运行状态下才能测试出硬件的性能和软件的运行状态。当硬件测试及软件调试与设计要求一致后,还要到现场做真实环境运行测试,在现场,因为环境不同了,还会出现很多意想不到的干扰及实际操作等问题。所以,仍然需要对硬件和软件进行调整和修改,直至最后真正达到用户要求,产品能安全稳定地工作为止。
对于一些初学者或习惯于“仿真”的设计者,采用在样机上做“全真” 运行调试程序,可能有些难度,当程序运行过程中出现问题,往往不知所措,无从下手,不易查找问题所在。当然,这一方面需要有丰富的编程经验和熟练的编程技巧,另一方面要养成一个良好的编程习惯,也有一些调试方法与技巧。由于篇幅所限,在此只能做些简单介绍。关于编程习惯就是通常所说的,要采用模块化编程,多采用子程序结构,这样便于编写、调试程序及查找问题。可将一些常用的功能固定的子程序先用软件模拟仿真,之后写成子程序库,就可以移植到很多的设计中使用了。为了便于移植和通用,汇编程序中的变量要用符号表示,用伪指令定义,千万不要用直接地址。如果是对并行口的操作,也要用符号表示位,再用BIT伪指令定义。如果用Keil C编写程序同样要采用模块化结构。而调试方法是建立在模块化编程基础之上的,即每编写一个模块,测试一个模块,千万不等到所有程序都编写完后再测试。那样的话,存在的问题会很多,而且真是无从下手,无法查找问题了。一般的设计都要有显示电路和键盘电路,哪怕是有一位显示器,一个按键,要先编写和测试显示程序及按键程序,这两个程序通过后,以后调试每一个模块时,就可以将其运行结果显示出来。如果模块较大可将一个模块再分成几段,每一段程序运行正常时可令其分别显示出不同的符号,这样就可以根据显示的符号知道每段程序的运行结果了。当然这种显示通常是附加的,正常的程序可能不需要显示这些字符,当程序调试通过后再将这些附加的显示字符的程序段删掉就行了。还可以利用按键进行适当的控制或选择,实现类似“仿真器”的设置断点功能。这样,就很容易测试一个比较长的复杂的程序了,一旦出现错误也容易找到问题所在。至于编程技巧,需要经常编程,在编程中自已不断去领悟和总结。这种“全真”运行的编程方法,对某些人可能会有些不适应,但这是练习和提高编程能力的最好方法,你不妨也试一试,会有意外收获的。
综上所述,笔者建议初学者不要依赖或相信仿真机,这对于学习单片机其实并没有什么益处,不但增加了学习的投资成本,也不利于提高编程能力。真想煅炼和提高自己的编程能力,请放弃仿真的想法和做法,而采用真正的“全真”运行的模式编程,这样才能很快提高你自己的编程能力和水平。并建议从AT89S51单片机学起,相信有了AT89S51单片机,不用仿真机学习照样“钢钢”的。

[ 本帖最后由 lycdl 于 2008-7-10 12:23 编辑 ]
我公司专业生产嵌入式以太网产品!

回复评论 (1)

中文PCB设计软件PFW2.5.4

解压后就能用,不用安装的,纯绿色软件。
其中的库文件是我自己制作的,很多是新元件,特别是增加了很多贴片元件。
还有一个将BMP文件转换成PCB文件的软件,利用这个软件就很容易在PCB板上加汉字了,先用画笔作出中文文字的BMP文件,一定要是单色位图。

[ 本帖最后由 lycdl 于 2008-7-10 12:23 编辑 ]

    PFW.rar (2008-6-26 15:06 上传)

    1.2 MB, 下载次数: 69

我公司专业生产嵌入式以太网产品!
点赞  2008-6-26 15:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复