标题: 这个单片机程序我接收数据的时候一直输出相同的数据 [打印本页]
作者: dwx31 时间: 2023-7-29 20:41
标题: 这个单片机程序我接收数据的时候一直输出相同的数据
void UartInit(void) //9600bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xB8; //设置定时初始值
TH1 = 0xB8; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
}
void UART_SendByte(u8 Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
void main()
{
UartInit();
UART_SendByte(0x05);
}
然后在烧录之后一直在接收05,并不是接受到一个后停止
而且我还没有复位嘞
各位大佬有没有什么解决办法啊
作者: wulin 时间: 2023-7-29 21:53
void main()
{
UartInit();
UART_SendByte(0x05);
while(1);
}
作者: dwx31 时间: 2023-7-30 08:44
试过,这样直接就不输出了,一个05都发不进去
作者: AiChiTang 时间: 2023-7-30 12:03
本帖最后由 AiChiTang 于 2023-7-30 16:06 编辑
u8 flag_a=0;
void UART_SendByte(u8 Byte)
{ if(flag_a==1)
{
delay(50000)
}
if(flag_a==0 )
{
SBUF=Byte;
while(TI==0);
TI=0; flag_a=1;
}
}
void main()
{
delay(50000)
UartInit();
UART_SendByte(0x05);
}
void Delayms(u16 i)//延时函数i=100延时1ms左右
{
while(i--);
}
//我感觉这样写应该是只能发一次的,用标志位开了之后就不进去。
/*我觉得WuLin那个改的没问题的,进入死循环之后应该是不工作的,但是不知道为什么不对。有没有可能是最开始发送的时候不稳定,没发出去,因为只发了一次,所以没看到效果。或者先开的发送端,再开的接收端,错过了。我觉得可以先用延时函数看一下。调好之后再把延时函数删了。
作者: AiChiTang 时间: 2023-7-30 15:06
u8 i=0;
void UART_SendByte(u8 Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |