51单片机通信,串口助手没数据?

COMPUTERZZZ 2010-05-16 04:00:45
我这段程序运行后,串口助手没收到数据?
串品助手:COM3,19200,8,N,1


#include<reg52.h>
#define uchar unsigned char

sbit ledk=P2^5;
sbit wela=P2^7;
sbit dula=P2^6;
uchar buffer[]={0x30,0x31,0x32};


void main()
{

uchar i;
i=0;
// ledk=1;

SCON=0x50; //串口
ES=1; //开串口中断
PCON=0x80; //波特率倍增 19.2k
TMOD=0x20;
TH1=0xfd; //初值
//TL1=0xfd;
TR1=1;
EA=1;


while(i<=2)
{
if(RI==1)
{
P1=SBUF;
RI=0;

SBUF=buffer[i++];//P1;
while (TI==0); //等待发送完成
// if (TI==1)
TI=0;
}
}

while(1);
}
...全文
343 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingkb 2010-05-26
  • 打赏
  • 举报
回复
这程序写的。。。。。
hnhappy 2010-05-26
  • 打赏
  • 举报
回复
进去之后没有关串口中断吧,SBUF无论是接收还是发送数据,都要进入中断的,你前面的中断也打开了,不知道改了后如何
boobaa 2010-05-18
  • 打赏
  • 举报
回复
建议先检查是否连线正确,要根据你的单片机串口硬件设计选用交叉或者非交叉的串口线先,然后才是找软件的毛病。
COMPUTERZZZ 2010-05-18
  • 打赏
  • 举报
回复
反复的重启,那应该是发送很多的0x30

串口助手,应该接收到很多0X30
sqm208 2010-05-18
  • 打赏
  • 举报
回复
程序进入死循环了,而且如果是51单片机的话,如果设置了硬件看门狗,这个程序应该反复的重启
COMPUTERZZZ 2010-05-18
  • 打赏
  • 举报
回复
都是成品
COMPUTERZZZ 2010-05-18
  • 打赏
  • 举报
回复
我是买的的开发板上带的,串口已焊好的,线是USB转串口线
COMPUTERZZZ 2010-05-17
  • 打赏
  • 举报
回复
看后面帖的

哪错了
qzf368 2010-05-17
  • 打赏
  • 举报
回复
能收到数据了?
mj_17 2010-05-17
  • 打赏
  • 举报
回复
你接收和发送函数写错了。。
COMPUTERZZZ 2010-05-17
  • 打赏
  • 举报
回复
我找了,没答案
hallowwar 2010-05-17
  • 打赏
  • 举报
回复
这种问题不应该问,网上搜搜就可以解决了。楼主依赖性不要太强,不好
空影 2010-05-16
  • 打赏
  • 举报
回复
建议楼主只发送个30试试看
zhulongzhulong 2010-05-16
  • 打赏
  • 举报
回复
多调试几遍
COMPUTERZZZ 2010-05-16
  • 打赏
  • 举报
回复
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit ledk=P2^5;
sbit wela=P2^7;
sbit dula=P2^6;
uchar buffer[]={0x30,0x31,0x32};

void delay(uint ms)
{
uint i,j;
for (j=0;j<ms;j++)
for (i=0;i<120;i++);
}

void main()
{

uchar i;
i=0;
SCON=0x50; //串口 方式2
ES=1; //开串口中断
PCON=0x80; //波特率倍增 19.2k
TMOD=0x20;
TH1=0xfd; //初值
TR1=1;
EA=1;

delay(100);
while(i<=2)
{
SBUF=buffer[i];
delay(100);
P1=SBUF;
i=i+1;
while (TI==0); //等待发送完成
TI=0;

}


while(1);
}

我在串口助手中看到显示了 30,30,31,32 有两个30
是为什么呀
myeven 2010-05-16
  • 打赏
  • 举报
回复
我觉得应该是单片机反馈那一块的问题,你检查一下SBUF那一段

具体的程序我忘了,下次看看
COMPUTERZZZ 2010-05-16
  • 打赏
  • 举报
回复
波特率是一样的
dxgung 2010-05-16
  • 打赏
  • 举报
回复
楼上的回答是正解。
如果死循环修改之后还是无法接收数据的话,建议你查看一下串口的波特率设定是否一致。如果不一致的话,有可能也是收不到数据的。或者收到的是乱码
jbb0523 2010-05-16
  • 打赏
  • 举报
回复
大概看了一下楼主的程序,首先我是不懂51单片机的,只能看一下流程,你的程序是发送完一遍后然后主程序进入死循环,你怎么能保证串口能收到你发送的那些数据呢?所以建议把发送数据部分放入主循环,让单片机不断的发送,看看能不能接到。
这个过程中还要看看串口连接是否好了,及串口设置是否是对的等等,总之,如果是新手的话,多试试。。。
COMPUTERZZZ 2010-05-16
  • 打赏
  • 举报
回复
#include<reg52.h>
#define uchar unsigned char

sbit ledk=P2^5;
sbit wela=P2^7;
sbit dula=P2^6;
uchar buffer[]={0x30,0x31,0x32};


void main()
{

uchar i;
i=0;
// ledk=1;

SCON=0x50; //串口
ES=1; //开串口中断
PCON=0x80; //波特率倍增 19.2k
TMOD=0x20;
TH1=0xfd; //初值
//TL1=0xfd;
TR1=1;
EA=1;


while(i<=2)
{
if(RI==1)
{
// P1=SBUF; 这句不要
RI=0;

SBUF=buffer[i];//P1;
i=i+1;
while (TI==0); //等待发送完成
// if (TI==1)
TI=0;
}
}

while(1);
}

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧