#include <REGX51.H>
typedef unsigned char uchar;
typedef unsigned int uint;
bit rcv_Flag = 0;
uchar Rcv_Buf[30]; //接收缓冲区
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[Rcv_Sum] = ' ';
Rcv_Buf[Rcv_Sum + 1] = ' ';
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[Rcv_Sum ++] = ch;
RI = 0; //clear the interrupt
}
}
我想在串口中断服务程序里面接收多个字符,为什么就不可以呢?求高手解释···
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>