最近几天刚刚入门搞单片机,应该说还是积累了一些经验。

首先第一部就是焊电路板,现在还没有学PCB板的制作,而且也是处于试验阶段,还是面包板用起来比较好。面包板最大的问题就是连线,电路一旦复杂了就不好弄了。焊接的时候一定要细心,不要造成两个引脚短路的情况。虚焊也是需要注意的问题。当然,集成电路块的布置也需要注意,最好把插座的IC方向记号统一到一个方向,避免插IC的时候插反了。第一次用74LS244的时候就插反了,烧了,一股煳味,还把自己烫伤了……

第一步就是做一个ISP下载器,用的ATMEL的AT89S51,支持ISP下载。电路图不复杂(电路图稍后上传),能够很好的工作,但是速度有些慢。 第二步做一个仿真器,查阅大量的资料最终发现SST公司的89E564RD芯片比较适合,所以又到城隍庙去买了一个,27块钱。用MAX232作为一个RS232电平转换器。电路图依然不复杂,但是后面的DEBUG工作弄了我两天多的时间。

网络上很多资料都是介绍89C54/58这样芯片的仿真器制作,这些资料都比较古老,现在这些芯片都很难买到,实用价值不大。我买的这个芯片官方网站上面写的有BootLoader,用EasyIAP写入一个SoftICE就可以了。我连接好所有的硬件,第一步就是调试串口通讯。

用ATMEL的89S51芯片写入一个串口的实例程序,很简单,就是发送字符到电脑上面。所有硬件检查完毕,设置电脑上面的波特率到9600bps,8位数据,1停止位,可是用Serial Monitor发现没有任何数据收到。 然后就在单片机程序里面设置了延迟,好用自己制作的DEBUG灯(其实就是一个串接电阻的发光二极管),发现TXD有信号改变,说明还是正确的。然而电脑上依然不能收到数据。首先怀疑12M的晶振对应的串口的波特率不正确,而实际应用中确实有这样的问题,所以换了一个11.0592M的晶振,结果还是这样。用SST的EasyIAP软件也无法连接单片机。

事情就这样陷入了一个死胡同,又检查硬件,确认连线没有问题,事情陷入了僵局。 后来EasyIAP里面的一个Cable Test功能给了我启发,把MCU取下来,短接RXD和TXD,可以在电脑上收到数据。这样就说明连接是正确的,MAX232电平转换正常。难道是MCU的问题。 我又更换了单片机,依然是这样,排除单片机损坏的可能。后来想是不是接地线的问题造成电压不对信号无法识别,而转换出错?后来排除了这样的想法。

可能还是硬件问题,换电容,换……都换的差不多了,也没有找到问题,事情依然没有任何进展。 以外间,把串口的波特率调节到了57200bps,电脑上就接收到了数据,虽然是乱码,也不是我所想要到数据,但是已经有点点希望了。毕竟波特率不对数据是不会正确的。我慢慢的调低波特率,到和单片机相同的波特率的时候竟然收不到数据了。后查阅串口相关书籍,分析原因可能是电脑收到的全是1,所以没有起始位的跳转,电脑就认为没有数据,而在高波特率的时候,电脑可以收到时变的信号,所以能够识别出有数据,虽然有错误但是还是收到了。

事情有了进展。调节好单片机上的软件,利用TI寄存器控制输出,避免没有完全发送完上一个字符就发送下一个字符,在电脑上看出字符基本正常了。后来给电路板增加了RESET按钮,呵呵,以前没有的时候还 麻烦,每次都重新拔电源,也影响串口通讯的时序。

最后调试基本成功,遗憾的是发现有规律的出现发送的数据自动减32的情况,很是郁闷。就比如说发送的全是a,结果电脑上面就会有规律的收到A,但是发送u及以后的字符的时候就是对的。而我焊的第二个电路板就没有这个问题。难道是干扰?

重新布线,重新测试,然而MAX232那边应该没有问题的,干扰从何而来?而且是有一定的规律。很是奇怪。a对应的二进制是1100001B,A对应的是1000001B,可以看到是正数第二位出现了问题。后来发送b的时候也出现成为B的现象,怎么就是这样固定的一位出现问题而发送U就不出现问题呢?

困难重重,几乎把所有关于串口的电路都检查了,改换的都换了,然后都没有解决问题。最后目光集中在那个晶振上面,换一个试试,结果重新上电以后,一切正常,小小的晶振……竟然速度不准确…… 仿真器的制作更是蹊跷。两个电路板串口调试好以后芯片依然不能被软件检测到,我都要到绝望的边缘了,都说再去买一个芯片了。结果才想起衣服没有洗,就去洗衣服了。然而人品就在这个时候爆发了,我想干脆直接用Keil C51的mon51连接一下看看,老板一直给我说里面有监护程序,我还写进取干什么呢?结果……………………成功了……!!

后来我去给老板说的时候,她竟然也不知道这个芯片里面写了SoftICE程序了,那天洗衣服突然的想法真的是人品阿,害得我搞了那么久,呵呵,还是学到了相当多的东西~!

接下来就是想把12232B这个LCM显示出来,时间不够了,先放一会儿了,先学项目需要的MFC了~:)