先解释一下现象:
(1)MAX232的12脚即R1OUT连接到了单片机的RX脚,因此使用探头碰MAX232的12引脚时导入了干扰信号,所以接收到了乱的数据。同时,也证明了单片机的接收电路和程序都没有问题。
(2)板子上的地接到示波器上的地,PC才能收到数据,说明单片机与PC没有共地。同时,也证明了单片机的发送电路、程序和PC的接收电路都没有问题。
原理:
(1)PC的串口即RS232有9个引脚,与单片机通信时用到三个引脚,依次是2脚RX、3脚TX、5脚信号GND。
(2)而单片机串口与此相反,2脚TX、3脚RX、5脚信号GND。
(3)只要把这三根线依次连接,2-2、3-3、5-5即可完成通信。
(4)同时,根据实际通信设备接口不同,串口线也分多种,如直连线、交叉线、公母头区别等。
故障排除流程:
(1)用万用表等测量MAX232的14脚T1OUT与开发板串行接口的2脚TX、MAX232的13脚R1IN与开发板串行接口的3脚RX、开发板串行接口的5脚与电源地是不是分别连接。如果连接没问题,则进行下一步。
(2)用万用表等测量串口线,PC端的2脚与单片机端的2脚、PC端的3脚与单片机端的3脚、PC端的5脚与单片机端的5脚是不是分别对应,如果对应连接没问题,则进行下一步。
(3)将PC上串行接口的2、3引脚短接。
(4)打开串口工具如“超级串口”等,下载地址http://www.powerserial.com/download/,打开串口,在输入框中随便输入几个字符,看是不是能在接收窗口中收到。
(5)如果收不到,则说明PC的串口问题(排除串口工具没有开错串口或短接没问题的情况下),换台电脑试下。能收到,则说明电脑端收发都没问题,进行下一步。
(6)将串口线插到电脑上,开发板端的插头不插而直接将2、3脚短接。再次用串口工具发送,看是否能接收到,如果能接收到,则证明串口线没问题,进行下一步。
(7)将串口线插到开发板得串行接口上,再使用串口工具收发。
(8)如果以上都不行,则自己做3根线,也可以使用杜邦线,将PC的TX与开发板的RX、PC的RX与开发板的TX、PC的信号地与开发板的地分别相连。再用串口工具收发测试。
通过以上步骤,则可以逐步排查到问题的具体原因。不过,根据问题及之后的描述,最大的可能性是串口线用的不对,导致PC串口与开发板串口的3根线没有分别对应上。
单片机往PC上能发说明串口本身应该没有问题:如果是你自己做的板子最好查看一下单片机接收那一路是否有虚焊或有短路情况(直接使用现成的开发板无视)。
然后仔细查看下程序是否有问题,再在程序中下断点,就下在接收到数据的下一条代码。然后发数据,如果断住说明数据收到了,是后面处理点亮LED的代码的问题。如果没有那就是没接收到。
还没有就再使用示波器,示波器要设置成低电平触发模式,单片机的串口(TX,RX)平时都是高电平,起始位是低电平,后面就是你设置的数据位(7位或8位),还有停止和校验位根据你设置的情况。数据发送都是瞬间完成的,所以一定要使用触发模式,如果捕捉不到,说明PC端的发送有问题,可以换个串口调试工具,还不行换跟串口线,再不行换台电脑。一般到此问题肯定能解决了啊(除非中途有操作失误的情况)
另外,一般使用串口还是使用中断模式,可以节省系统资源,降低功耗!
如果用的是51单片机,除了确认电缆没问题外,
可以查一下又没有可能不小心把对应RXD的SFR给赋值0了,查这个不一定要看程序,可以拔掉单片机芯片看串口上接收引脚波形,不好拔的话,按住单片机复位开关不松手也许也可以。
步骤一,串口调试可以对你的单片机发送吗?如果可以,那就是你PC程序问题,如果不可以,那就是你单片机问题,但是也可能是步骤二问题。
步骤二:发送数据不对,一般常见的,比如16进制发送?还是ACSII发送?
步骤三:学会使用“串口监视”的小工具,监视数据包是否遵循协议。
步骤四:看你PC程序吧。用串口监视工具可以发现,可能你的PC程序都没有包出来。
1、单片机串口控制在SCON里有个REN寄存器设置正确吗?接收允许标志。
2、串口中断开了吗?即使是查询方式也要有RI状态可以查询才能接收。
3、单片机串口接收最好还是用中断方式,方便的多
void ISR_SERIAL(void) interrupt 4
{
uchar i;
if(RI) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
i = SBUF; //SUBF接受/发送缓冲器
}
SBUF= i; // Echo
while(!TI);
TI = 0;
}