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

最近在做关于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个回答  2009-10-23
1.可以在程序中添加一段程序,使某一空闲的端口进行高低变化,频率为1hz左右,程序运行后,用表量的该口有高低电平的变化,说明程序在电路内是能够执行的。否则要查晶振、电源等硬件方面的问题;
2.用protenus进行模拟仿真,检验程序编制是否正确,模拟通过之后再进行电路试验。这样可大大提高效率
第2个回答  2009-10-23
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两线,再试本回答被网友采纳
第3个回答  2009-10-23
1.检查看波特率对了没有
2.串口是好的没?把232的tx与rx对接,pc机发送数据看是否能接收。
3.检查单片机工作没,晶振
第4个回答  2009-10-29
MAX232是国产的?要用美信原装的才好,尤其是波特率高的时候
第5个回答  2009-10-23
试试:自发自收。
相似回答
大家正在搜