关于单片机通过RS232与PC机进行串口通信

来源:百度知道 编辑:UC知道 时间:2024/06/20 20:35:15
最近在做关于AT89C2051与PC机的串口通信,但总是不成功,使用的是串口高度助手。程序是这样的:#include<reg51.h>
void main(void)
{
SCON=0x50;
PCON=0x00;
TMOD=0x20;
TH1=0XFD;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
while(1);
}
void UART_SER(void) interrupt 4
{
unsigned char Temp;
if(RI)
{RI=0;
Temp=SBUF;
SBUF=Temp;
}
if(TI)
TI=0;
}
和另一个查询方式的程序:

#include <reg51.h>
unsigned char sbuf;
void send(unsigned char receive);

main(){
PCON=0x00;
SCON=0x50;
TMOD=0x20;
TH1=0xfc;
TL1=0xfd;
EA=1;
ES=1;
TR1=1;

while(1){
if(RI){
RI=0;
sbuf=SBUF;
send(sbuf);
}
}
}

void send(unsigned char receive){
SBUF=receive;
while(!TI);
TI=0;
}
不知道是什么原因,在串口调试助手里发送数据总是不能接收到数据。用的是MAX232转换芯片。请高人指点!
分不多了,全给了~
1.波特率正确
2.串口是好的
3.单片机工作
应该怎么办..

1、给你一个试试:
#include<reg51.h>
unsigned char flag,a;
void main()
{

TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
/* if(RI==1)
{
RI=0;
P1=SBUF;
}*/
if(flag==1)
{
ES=0;
flag=0;
SBUF='1';//28;
while(!TI);
TI=0;
SBUF='2';//28;
while(!TI);
TI=0;
SBUF='3';//28;
while(!TI);
TI=0;
ES=1;
}
}
}

void ser() interrupt 4
{
RI=0;
// P1=SBUF;
a=SBUF;
flag=1;
}
2、如果不行,交叉9针插座的2、3两线,再试

1.检查看波特率对了没有
2.串口是好的没?把232的tx与rx对接,pc机发送数据看是否能接收。
3.检查单片机工作没,晶振

我也遇到了这个问题,还在调试程序,可惜今天电脑又中毒了,留个名了再来看,你可以用protus加虚拟串口,以及你的串口调试软件来测试一下。我是这么弄的

试试:自发自收。

1.可以在程序中添加一段程序,使某一空闲的端口