我是采用查询方式的,在程序里通过点亮LED,灯不亮,我用示波器观察串口上的接收引脚没有反应,是什么原因?
先解释一下现象:
(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根线没有分别对应上。
void siopinit() // 串口0、1初始化,设置串口0、1通信协议
{ RCLK=0;
TCLK=0;
TMOD=0x20; PCON=0; SCON=0x50; TH1=0xf8; TL1=0xf8; CKCON=0x11; TR1=1; }
void main(void)
{ siopinit();
while(1)
{ while(RI==0);
RI=0;
P11=0; //点亮LED2
}
这个程序有问题吗?
初始化部分你的配置我不是很清楚(涉及到的波特率你检查下是否正确,串口调试设置的是否一致),主体部分是循环检测接收标志位,接收成功则退出循环点亮LED,应该没有问题。
解决程序问题最好还是使用调试。可以查看寄存器的值,下断点,帮助你查出问题。
好的,谢谢
我是用串口调试助手向单片机发送数据,单片机接收不到,请说明白一点,只跟单片机上的程序有关呀
追答首先我们分为三段来解析这个通讯(事实上,所有的串口通讯都如此)
单片机-串口-串口调试助手等软件。
你首先要确定,串口调试助手有没有把数据发送给串口,再则确定,发送给串口的数据,对不对?都排除之后,再开始检查单片机,做事顺序是这样的。
串口监视 的小工具,你网上down下吧。
好的,多谢,我先试试
void siopinit() // 串口0、1初始化,设置串口0、1通信协议
{ RCLK=0;
TCLK=0;
TMOD=0x20; PCON=0; SCON=0x50; TH1=0xf8; TL1=0xf8; CKCON=0x11; TR1=1; }
void main(void)
{ siopinit();
while(1)
{ while(RI==0);
RI=0;
P11=0; //点亮LED2
}
试试
#include
#define uchar unsigned char
void initial() //串口初始化
{
TMOD=0x20; //定时器1方式2
PCON=0x00; //SMOD=0
TH1=0xf8;
TL1=0xf8; // 定时器1初值
TR1=1; // 启动定时器1
SCON=0x50; //串口工作方式1并允许接收控制位
}
void main()
{
uchar num;
initial();
while(1)
{
while(RI==0);
RI=0;
num=SBUF;
P11=0;
SBUF=num;
while(TI==0);
TI=0;
}
}
用了楼上的程序,可能是我的硬件问题,我用探头碰一下MAX232的12引脚,单片机就会接收,一连串接收很多数据,但是接收的不是我发送的那个数,不碰又不接收了,而且从单片机往PC发数据时,必须要板子上的地接到示波器上的地,PC才能收到数据,不知道怎么回事,我老师说这种现象无法解释,不管怎样还是十分感谢。
追答检查一下串口的第5脚接地正常吗?或者说单片机板子和PC的串口共地了吗?
根据你描述现象可能:
1、232的焊接不良,从232到单片机的RX脚连接不良
2、串口线制作不良,第5脚的共地没起作用