本帖最后由 zch305 于 2019-7-21 11:40 编辑
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xE8; //设定定时初值
T2H = 0xFF; //设定定时初值
AUXR |= 0x10; //启动定时器2
REN = 1; //允许接收
ES = 1; //允许中断
EA = 1; //允许全局中断
}
void weizhi()
{
int send_num=0;
B_TX1_Busy = 0;
RX1_Cnt = 0;
TX1_Cnt = 0;
S1_8bit(); //8位数据
S1_USE_P30P31(); //UART1 使用P30 P31口 默认
//UartInit();
while (1)
{
if((TX1_Cnt!=RX1_Cnt)&&(!B_TX1_Busy)) //收到数据,发送空闲
{
SBUF = RX1_Buffer[TX1_Cnt]; //把收到的数据远样返回
B_TX1_Busy = 1; //标志发送忙
send_num=send_num+1;
if(++TX1_Cnt >= RX1_Lenth) TX1_Cnt = 0; //避免溢出处理
}
/* if(send_num==4) {break;} */
}
}
void UART1(void) interrupt 4 // 串行口1中断函数
{
if(RI)
{
RI = 0;
RX1_Buffer[RX1_Cnt] = SBUF;
if(++RX1_Cnt >= RX1_Lenth) RX1_Cnt = 0; //避免溢出处理
}
if(TI)
{
TI = 0;
B_TX1_Busy = 0; //清除发送忙标志
}
}
void main()
{
UartInit();
weizhi();
(1);
weizhi();
}
我想用串口1将接收的数据发送出去,但是程序在while循环里出不来,执行不了(1),大家有什么办法可以跳出while循环或者是不用while循环也可实现,并且第二次也可以将发送给串口的数据发送出去
|