这是我自制的AVR JTAG仿真器和ISP下载器,JTAG仿真器肯定没有金德通好用,但是,总比没有要好,可以单步执行、断点执行、全速执行程序,对程序查错还是很有用处,AVR单片机的运行软件我用的是AVR Studio 4,编程软件用的是AVR Studio 5,AVR Studio 5不能用自制的JTAG仿真器,但是,编程环境非常好,可以无极缩放编程字体,可以折叠程序,可以加载我认为最好用的编程字体:YaHei.Consolas,keil4也有这些功能,我在AVR Studio 5编好程序,整个的复制到AVR Studio 4里运行,自我感觉很方便。总之,我编程对仿真器要求很高,对编程环境要求也很高,没有仿真器或者编程环境太差,我宁愿不编程序,我遇到一些号称连仿真器都不用就可以编程的人,我只能呵呵。
51单片机,对于我来说,实在是太熟了,汇编语言都用了五、六年,几乎对每个寄存器、每种寻址方式,每一条汇编指令、每个中断入口,清清楚楚,那时候我用汇编语言编程基本上都不用翻书。我这个不算牛,我的朋友看着51单片机的HEX文件,就能把汇编语言写出来,据说有一次他在卖单片机的朋友店里玩,有个顾客带着他的HEX文件软盘,要求写入单片机,我的朋友帮写,打开HEX文件一看,发现程序不难,就看着HEX文件把汇编语言写在纸上,递给顾客看,这是不是你编的程序?那个顾客吓的够呛。我现在用51单片机,就是先用51单片机把程序一个模块一个模块的用仿真器测试成功,然后移植到AVR单片机,再用JTAG仿真器仿真,我认为我这种方法效率很高,移植程序总比编程要简单,也加快了我学AVR单片机的速度。
51单片机最大的软肋就是复位电路,阻容式的复位电路抗干扰能力实在太差,我用IMP810L专用复位电路,基本解决了51单片机抗干扰,但是,仍然不行,AVR单片机ATMEGA8驱动一个30安培的继电器,我用了一个功率很小的变压器,继电器吸合的时候,电压从5V掉到3点几伏,继电器断开电源恢复到5V,一秒钟吸合断开一次,几个小时都没有死机,这种情况下,51单片机早就死翘翘了,51单片机的第二个软肋是IO口只有高低两种电平,这对电路设计十分不利,比如驱动继电器,只能用PNP三极管,而AVR单片机的IO端口有高阻态,复位期间也是高阻态,这对于驱动任何元器件都是非常方便,AVR单片机内部有RC振荡器,对时间要求不高的场合可以不用晶体,内部还有复位电路、EEPROM、看门狗、AD转换等等,51单片机12个晶振周期执行一条指令,AVR一个晶振周期执行一条指令,理论上AVR单片机比51单片机快10倍以上,AVR单片机没有端口立即寻址指令,拖慢了端口速度,实际上AVR单片机比51单片机在使用相同晶体的情况下,至少快5倍以上,相同的电路,AVR单片机比51单片机外围元件更少,成本也更低,AVR单片机完胜51单片机。实际情况是,我的很多朋友,自从用了AVR单片机就基本上不用51单片机了,用了STM32,AVR单片机也用的很少了。
51单片机是上个世纪80年代的产品了,最大优点是寄存器简单、规范、学习资料多,学起来比较容易,先把51单片机学会,再学其它单片机就容易很多,按照我的经验,不管花费多长时间,只要学会一种单片机,学第二种单片机半个月入门、一个月可以编程,学第三种单片机一个星期入门、半个月可以编程,学第四种、第五种、第n种单片机,三天入门、一个星期就可以编程了,达不到这个速度,说明你的单片机学的根本不精,说白了,任何一种单片机,只要把自己需要的寄存器搞懂,会操作这些寄存器,立马就会编程,之后就是慢慢提高而已。任何一种单片机都有各自的特点,不同电路选择不同的单片机,只会一种单片机的确是不行。
51单片机的缺点,上面也说过了,现在还用51单片机做产品,我也就只能呵呵了。我相信一些改进型的51单片机性能肯定会提高,但是,我已经学会AVR单片机,不想学改进型的51单片机了,倒是有一个非常现实的问题,万一哪天我的金德通仿真器坏了,我会用STC单片机做个51仿真器,看看在keil下是否好用,不好用还是要买一个好用点的51仿真器。