问题原因可能是如下几个方面:
1、是否使用的是USB转串口的转换线?这种方式目前出问题太多了,系统正常运行状态下还好点,如果单片机设备频繁上下电问题就特别多,而且好像没有太好的解决方法。
2、通讯双方的协议是否不匹配?波特率不说了,还有比如是否都是1个起始位+8个数据位+1个停止位,二者应一致。
3、PC机一端问题。这种可能性不大,如果使用的是串口调试助手之类的软件就更不会有问题。
4、单片机一端软件可能有问题。而且问题出在接收时的可能性较大。具体的:
a、在软件流程中是否有对REN控制位修改的指令?如果有需要检查当REN=0时的相关语句。
b、应特别关注TI的清零操作。接收时RI有效后将数据读入内存、清RI标志,即可退出接收操作;而发送时【最后1个字节送入SBUF后,发送操作并未完成】,【必须等待这次发送完成后TI置位,然后清0】,才能根本上保证下次操作的正确性的情况。
c、如果串口收发未使用中断方式,需要检查主程序流程中是否有较长时间的延时程序,会不会造成数据接收遗漏的情况。以9600波特率为例,1个字节的发送或接收需要差不多1ms的时间,延时操作如果有超过1ms的就可能会造成数据丢失。
d、其它中断处理软件是否会长时间占用CPU资源,使得串口数据的接收出现数据丢失情况?串口如果采用了中断,其中断级别是否是高级别?
5、设备运行环境。是否有外部强电磁干扰?比如电机的起停。处理方法就说不清了。
1、你的波特率是多少,如果比较高,试着降低一下。。。
2、你的时钟源是什么,如果是内部RC的话,那个干扰太大了,请试着校准,比如AVR单片机mega2560 系统校准时钟寄存器:OSCCAL。或者用外部晶振。
3、外部干扰太大:一、你的电路有问题:这个信号与电源等没有很好的分离,这个请参照网上很多的电路设计原则;二、实在是外部干扰太厉害了,这个厉害的程度是不一般的(如果你不是无线串口的话)。
4、这个你看看是不是芯片的问题,我以前有一次也遇到这种情况,后来实在查不到问题,但是很巧,换了一块Max232就似乎很好了,只能说似乎是Max232的问题。你看看是不是有芯片出了问题。
别说这话,串口通讯是单片机的基础,这都搞不定,大概你是初学,既然是初学,你怎么就肯定是硬件没问题,时序不正常呢?你用示波器看了?再说时序问题是很关键的,要么通要么不通,时好时坏反而是硬件问题多。
1 检查驱动是否正确安装。如果安装好了,可以在设备管理器那里看到这个串口号
2 PC上的波特率与单片机的波特率是否一致
3 单片机程序正确吗,是否有数据发送
4 电路板电路连接是否正确(TxD/RxD的问题)
5 板上一定要加一个电平转换芯片,如MAX232
我用的也是USB转串口线,8块钱一根的,驱动是HL-340,目前还没有出现任何问题,包括烧写程序和数据收发
这一般是通信的双方通信速度不一样造成的,建议查看一下自己的波特率的设置,最好亲自计算一下两边的速度