新人求助【51单片机串口问题】

u010787887 2013-05-22 09:47:54
各位前辈,小弟刚刚接触51单片机,用的郭天祥老师的教学板,但是在【写串口通信以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来】这个程序时,出现了问题,每次打开串口,用串口调试器发送数据只能发送16个字节,也就是 发送俩次后,再用串口调试工具发送就发送不过去,板子上的发送灯都不闪一下~~~

程序如下,去前辈指点迷津!

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char flag;
unsigned char b=0;
uint temp;
sbit dula=P2^6;
sbit wela=P2^7;

uchar code table[]={ //数码显示器初值数组
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void init(){
/*TMOD=0x20;
TH1=0xfd;
TL1=0xfd;

SM0=0;
SM1=1;
REN=1;
TR1=1;
EA=1;
ES=1; */

TMOD = 0x20;
TH1 = 0XFD;
TL1 = 0XFD;
SM0 = 0;
SM1 = 1;
EA = 1;
TR1 = 1;
ES = 1;
REN = 1;
}

void display(uint c)
{

uchar A1,A2,A3,A4,A5;
A1=c/10000;
A2=c%10000/1000;
A3=c%1000/100;
A4=c%100/10;
A5=c%10;
dula=1;
P0=table[A1];
dula=0;
P0=0XFF;
wela=1;
P0=0xfe;
wela=0;
delayms(1);

dula=1;
P0=table[A2];
dula=0;
P0=0XFF;
wela=1;
P0=0xfd;
wela=0;
delayms(1);

dula=1;
P0=table[A3];
dula=0;
P0=0XFF;
wela=1;
P0=0xfb;
wela=0;
delayms(1);

dula=1;
P0=table[A4];
dula=0;
P0=0XFF;
wela=1;
P0=0xf7;
wela=0;
delayms(1);

dula=1;
P0=table[A5];
dula=0;
P0=0XFF;
wela=1;
P0=0xef;
wela=0;
delayms(1);
}

void main(){
init();
while(1){
if(flag==1)
{
flag=0;
if(b==0)
temp=SBUF*256;
if(b==1)
temp=temp+SBUF;
b++;
if(b==2) {
b=0;
ES = 0;
SBUF = temp;
while(!TI);
TI = 0;
ES = 1;
}
}
display(temp);
}
}

void ser() interrupt 4{
RI=0;
flag=1;
}
...全文
122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010787887 2013-05-24
  • 打赏
  • 举报
回复
引用 3 楼 wangfan027 的回复:
如果你是换串口调试工具的话,那开始那个调试工具软件应该是有BUG, PC上位机发送数据时不会去检查下位机是不是收到了,它只负责成功发送,如果发不出去可能是硬件故障比如TX无法拉低或者无法拉高,但电脑后面的串口出硬件故障的概率小,所以最有可能的就是调试软件的BUG
嗯,谢谢! 不过其实我没有用直接串口的我用的是USB转串口 因为是笔记本~没有串口~
dceacho 2013-05-22
  • 打赏
  • 举报
回复
如果你是换串口调试工具的话,那开始那个调试工具软件应该是有BUG, PC上位机发送数据时不会去检查下位机是不是收到了,它只负责成功发送,如果发不出去可能是硬件故障比如TX无法拉低或者无法拉高,但电脑后面的串口出硬件故障的概率小,所以最有可能的就是调试软件的BUG
u010787887 2013-05-22
  • 打赏
  • 举报
回复
引用 1 楼 wangfan027 的回复:
每次打开串口,用串口调试器发送数据只能发送16个字节,也就是 发送俩次后,再用串口调试工具发送就发送不过去, 你换个串口调试工具看看,或者把RS232拔下来看电脑那边还能不能继续发
谢谢 我换了个串口发现可以一直发了 呵呵 我郁闷 我都调了一晚上了 不知道为什么·· 可以的话 说说和串口工具之间为什么会有关系么?
dceacho 2013-05-22
  • 打赏
  • 举报
回复
每次打开串口,用串口调试器发送数据只能发送16个字节,也就是 发送俩次后,再用串口调试工具发送就发送不过去, 你换个串口调试工具看看,或者把RS232拔下来看电脑那边还能不能继续发

27,374

社区成员

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

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