程序如下,为什么我的串口中断无法接收数据?求解??
#include <REGX51.H>
typedef unsigned char uchar;
typedef unsigned intuint;
bit rcv_Flag= 0;
uchar Rcv_Buf; //接收缓冲区
uchar Rcv_Sum = 0;
void Uart_Init()
{
SCON= 0x50; //串口工作方式1,接受允许REN = 1,最大能产生57600 串口控制寄存器
TMOD |= 0X20; //定时器1工作方式2,用于自动装入8位计数器,波特率可变时,采用T1定时器
TH1 = 0XFD; //9600baud SMOD为1时19200 TI 不能开中断。
TL1 = 0XFD;
EA = 1; //中断总允许。
ES = 1; //串口中断允许
}
/*-------------------delay1ms()-----------------------*/
void delay1ms(uint i)
{
uchar j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{
;
}
}
}
/*-------------------send_char()-----------------------*/
void send_char(uint ch)
{
SBUF = ch;
while(!TI) //数据没有发送完毕
{
P2 = 0X00; //点灯
}
P2 = 0XFF; //灭灯
}
/*-------------------send_string()---------------------*/
void send_string(uchar *s, uint num)
{
uint i = 0;
for(; i < num; i ++)
{
send_char(*s++);
}
}
int main(void)
{
Uart_Init();
TR1 = 1; //定时器工作
while(1)
{
if(rcv_Flag)
{
rcv_Flag = 0; //中断标志清零
if(Rcv_Sum >= 30) //超过30个字符
Rcv_Buf = '\0';
Rcv_Buf = '\0';
Rcv_Sum = 0; //接收的数目清零
send_string(Rcv_Buf, Rcv_Sum);
}
}
return 0;
}
void INT_UartRcv(void) interrupt 4
{
uchar ch = 0;
if(RI)
{
rcv_Flag = 1; //setup the rcv_Flag
ch = SBUF;
Rcv_Buf = ch;
RI = 0; //clear the interrupt
}
}
我想在串口中断服务程序里面接收多个字符,为什么就不可以呢?求高手解释···
那个串口中断里的if加个else执行清发送中断位 问题解决了,哈哈
页:
[1]