单片机串口通信过程

来源:百度知道 编辑:UC知道 时间:2024/05/24 03:33:53
#include<reg51.h>
#define uchar unsigned char;
#define uint unsigned int;
void output();
void display();

void init_interrupt();
uchar data flag,m,put=2;
uchar table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
main()
{ init_interrupt();
while(1)
{output();
display();
}
}
void init_interrupt()
{TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
SCON=0x50;
ES=1;
EA=1;
TR1=1;
}
void output(void)
{if (flag==1)
flag=0;
ES=0;
SBUF=put;
while(!TI);
TI=0;
ES=1;
}
void serial() interrupt 4
{ RI=0;

put=SBUF;

flag=1;
}
void display()
{P2=table[put];
P1=0x02;
}
此程序是想从串口中输入一数字并在数码管上显示,但是在用串口调试工具的时候发现:只要打开串口,就立即无限地显示接受数据,而且在数码管上没有显示。并且我也不太清楚串口冲断的问题,因为接受和发送完毕都会产生中断,那在中断子程序中到底应该写什么程序?因为我没有分了,所以不能用分数

void output(void)
{if (flag==1)
flag=0;
ES=0;
SBUF=put;
while(!TI);
TI=0;
ES=1;
}
错误在于此:“SBUF=put;”,你是一直在让单片机串口发送put值(2),所以串口调试助手一直在接收数据。
改正的办法是:把这个output函数删去,我刚才用单片机开发板验证了,这样就能显示串口发送的数字了。
还有什么问题,可以Hi我。

while(1)
{output();
display();
}

你有这句,单片机当然会一直发送了。。。。