请高手帮我看看我的89c51的串口通信程序那里不对啊

来源:百度知道 编辑:UC知道 时间:2024/06/26 03:29:43
代码如下:我找了一天也不知道那里不对,编译也没错,可是连上串口就是有发没收,我想做的是任意6位数据串口收发程序,我的硬件是绝对没问题的,因为测试过其他可行的程序的,谢谢各位高手了哦,在线等!!

#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int
#define len 6

sbit LED=P1;
bit uart_flag=0;

uchar uartd[len];
uchar rd,com_count;

void init_uart(void)
{
SCON=0X50;//模式1,允许接收
TMOD=0X20;//定时器1模式2
TH1=0XFD;//9600bps
TL1=0XFD;
// PCON=0X00;//波特率不曾倍
TR1=1;//启动定时器
}

void send_ch(uchar ch)
{ SBUF=ch;
while(!TI)
TI=0;
}
void send_com(uchar *sd,uchar sc)//字符串发送
{
uint k=0;
do
{
send_ch(*sd+k);
k++;
}while(k<sc);
}

uchar recv_com(void)
{
while(!RI)
RI=0;

rd=SBUF;
com_count=0;
uartd[com_count]=rd;
com_count++;

if(com_count>5)
{
uart_flag=1;
}
else
uart_flag=0;

while(!ri) ;你把{}加上去试试,如下.
{
RI=0;
rd=SBUF;
com_count=0;
uartd[com_count]=rd;
com_count++;
}

void send_ch(uchar ch)
{
SBUF=ch;
while(!TI) //这里有错,应该在后面加分号。
TI=0;
}

改为:
void send_ch(uchar ch)
{
SBUF=ch;
while(!TI);
TI=0;
}

我觉得你的send_com那个子程序有问题~你把数据和数据长度混在一起了