|
系统板实现功能:用MAX232实现串口通信
故障现象:上位机给单片机发数据单片机可以识别,但单片机给上位机传数据时上位机却接不到,只有在每次断电的瞬间可以收到断断续续的数据。
查错思路:断电瞬间电压降低至零,这个过程中可以接收到一个数据,怀疑可能是系统板电源供电问题,此时测量MAX232的16脚VCC和15脚地之间的电压,为6~7V,高于5V,再把单片机机开发板的P3.0和P3..1用杜邦线引出来接到此系统板上,然后将两板共地,串口正常通信,再测此时电压,发现为4.8V左右——证实是电源问题。
查错过程:在网上看了很多资料,都说MAX232有两种,MAX232A和MAX232,232A的电容要求大点,我用的是232CPE,没有A,,所以应该用不着大电容,网上还有说推荐用电解点解电容,我之前用的是104的普通电容,断电瞬间的现象是直收到了一组数据,我换成4.7uf的电解电容后,效果还是一样,就是断电瞬间可以收到2~3组数据,我又换成10uf的电解电容,现象还是一样,只不过可以接到多组数据,而问题仍存在,所以怀疑和电容无关。
问题总结:MAX232周围的四个电容大小只是和波特率有关,电容越大,可以得到的波特率越高,用9600传,104的普通电容就可以了。MAX232芯片的工作电压为+5V,过高就不能正常工作,所以只在断电瞬间电压下降的过程中在到达+5V左右时传输了一组数据。
切记:使用元件时一定要注意它正常工作的区域范围。
地球人都知道STC的51系列单片机的指令系统和AT的完全兼容,最近做一个小系统出了点问题,在网上四处寻觅他俩之间的区别,结果……到处充斥着同样一句废话——他俩完全可以替换,但事实上问题很多——
1.STC单片机执行指令的速度很快(其实这也是一句废话,呵呵),大约是AT的3-30倍,尽管快是好事,但这样一来,你在AT上好使的程序在STC上不一定好用,反之亦然,最典型的例子就是那些对时序有要严格求求的模块,比如IIC,18B20、DS1302等的时序。再者,既然执行速度快了,那么那些非定时器控制的精确延时肯定要受影响,用STC时注意得加长延时,大约是AT的10—30倍就差不多,这一点自己调试就知道了。
2.STC单片机对工作环境的要求比较低,电压低于5伏时仍然正常工作,甚至3伏到4伏之间都还可以工作,然而这样的环境下AT肯定不行了,所以当一个系统用STC单片机好用,但用AT的单片机不工作时,直接查最小系统,看单片机的供电是否正常——一切从根源查起。
错误:
1. error C183: unmodifiable lvalue
原因:修改了不能改变的变量,注意定义在某些区域的变量是不能修改的,如前面定义了unsigned char code table[6],在后面是不能修改table[6]的。}
解决办法:将code去掉
警告:
1.WARNING L15: MULTIPLE CALL TO SEGMENT
原因:同一个函数即在主函数中调用了,又在中断服务程序里调用
解决办法:很简单,可以在二者之间取其一
2. WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
原因:前面定义的函数或变量等在程序中有未被使用的。
解决办法:根据程序删掉未使用的函数或变量等。