51单片机串口发送问题
voidUart_Init(){TMOD|=0x20;SCON=0x40;PCON|=0x80;TH1=0xf3;TL1=0xf3;TR1=1;ES=1;EA=1;}vo...
void Uart_Init()
{
TMOD|=0x20;
SCON=0x40;
PCON|=0x80;
TH1=0xf3;
TL1=0xf3;
TR1=1;
ES=1;
EA=1;
}
void Send_Byte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
void main()
{
while(1)
{
Uart_Init();
if(P37==0&&Send_flag==0)
{
Send_Byte(0x00);
Send_flag=1;
if(P37==1)
{
Send_flag=0;
}
}
}
}
我想要的功能是p37=0时,串口给PC发送一次0x00;然后p37=1,当p37再次变成0时,再发送一次0x00。现在的情况是,上电之后p37发送一次,然后不管p37状态怎么变化,都不发送;单片机复位后,p37=0,就会发送了。新人求前辈帮忙 展开
{
TMOD|=0x20;
SCON=0x40;
PCON|=0x80;
TH1=0xf3;
TL1=0xf3;
TR1=1;
ES=1;
EA=1;
}
void Send_Byte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
void main()
{
while(1)
{
Uart_Init();
if(P37==0&&Send_flag==0)
{
Send_Byte(0x00);
Send_flag=1;
if(P37==1)
{
Send_flag=0;
}
}
}
}
我想要的功能是p37=0时,串口给PC发送一次0x00;然后p37=1,当p37再次变成0时,再发送一次0x00。现在的情况是,上电之后p37发送一次,然后不管p37状态怎么变化,都不发送;单片机复位后,p37=0,就会发送了。新人求前辈帮忙 展开
1个回答
展开全部
void Uart_Init()
{
TMOD|=0x20;
SCON=0x40;
PCON|=0x80;
TH1=0xf3;
TL1=0xf3;
TR1=1;
ES=1;
EA=1;
}
void Send_Byte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void main()
{
Uart_Init();//只需要初始一次
while(1)
{
if(P37==0&&Send_flag==0)
{
Send_Byte(0x00);
Send_flag=1;
P37=1;//加了这个
if(P37==1)
{
Send_flag=0;
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////
还可以这样:
void Uart_Init()
{
TMOD|=0x20;
SCON=0x40;
PCON|=0x80;
TH1=0xf3;
TL1=0xf3;
TR1=1;
ES=1;
EA=1;
}
void Send_Byte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void main()
{
Uart_Init();
while(1)
{
if(P37==0)
{
Send_Byte(0x00);
}
while(P37==0); //等等P37变为1
}
}
{
TMOD|=0x20;
SCON=0x40;
PCON|=0x80;
TH1=0xf3;
TL1=0xf3;
TR1=1;
ES=1;
EA=1;
}
void Send_Byte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void main()
{
Uart_Init();//只需要初始一次
while(1)
{
if(P37==0&&Send_flag==0)
{
Send_Byte(0x00);
Send_flag=1;
P37=1;//加了这个
if(P37==1)
{
Send_flag=0;
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////
还可以这样:
void Uart_Init()
{
TMOD|=0x20;
SCON=0x40;
PCON|=0x80;
TH1=0xf3;
TL1=0xf3;
TR1=1;
ES=1;
EA=1;
}
void Send_Byte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void main()
{
Uart_Init();
while(1)
{
if(P37==0)
{
Send_Byte(0x00);
}
while(P37==0); //等等P37变为1
}
}
追问
我的硬件可以使p37置1,改了之后还是需要单片机复位才能再次发送
追答
ES=1;
改为
ES=0;
没有串口中断服务程序,所以跑飞了
/////////////////////////////////////////////////
又或者加入以下函数:
//====================================串口接收中断函数 ======================================
void ReceDatCom () interrupt 4 using 3
{
unsigned char k;
if(RI)
{
RI=0;
k=SBUF;
}
else
{
TI=0;
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询