当前位置:
文档之家› STC12C5A60S2串口中断接收程序
STC12C5A60S2串口中断接收程序
}
}
LED2=~LED2;
}
}
intmain()
{
chari;
TMOD=0x00;
AUXR=0x00;
LED1=0;
LED2=1;
Init_Uart();
EA=1;//开总中断
printf(Systemisstart...rn);
while(1)
{
if(UART1_Overflow_Flag==1)//串口中断数据接收完毕,开始处理
UART1_Recv_count={实际接收到的数据个数}
以上2种情况触发后UART1_Overflow_Flag标志位置为1,等待MAIN
函数(主程序处理)
*/
voidUART1_Int(void)interrupt4
{
if(RI==1)
{
RI=0;
if(UART1_Overflow_Flag==0)
STC12C5A60S2串口中断接收程序
#defineUART0_BUF_LEN32
intUART1_Recv_count;//接收计数
bitUART1_Overflow_Flag;//缓冲区满标志
idataucharUART1_Recv_BUF[UART0_BUF_LEN];//串口接收缓冲区
//串口初始化
AUXR|=0x01;//串口1选择独立波特率发生器为波特率发生器
AUXR|=0x10;//启动独立波特率发生器
ES=1;//充许串口1中断
}
//串口中断接收程序
/*
说明:
(1)如果缓冲区接收满了,则中断接收程序不在接收数据。
UART1_Recv_count=32
(2)如果接收到回车符、换行符,则中断不在接收数据。
voidInit_Uart()
{
UART1_Overflow_Flag=0;
UART1_Recv_count=0;
//22.1184M晶振115200波特率
PCON&=0x7f;//波特率不倍速
SCON=0x50;//8位数据,可变波特率
BRT=0xFA;//设定独立波特率发生器重装值
AUXR|=0x04;//独立波特率发生器时钟为For(i=0;i
printf(%c,UART1_Recv_BUF[i]);
Appcall(UART1_Recv_BUF,UART1_Recv_count);
printf(rn);
UART1_Recv_count=0;//缓存清零
UART1_Overflow_Flag=0;//允许串口继续接收数据
{
if(UART1_Recv_count
{
UART1_Recv_BUF[UART1_Recv_count++]=SBUF;
if(SBUF==‘r’||SBUF==‘n’)
{
UART1_Overflow_Flag=1;
}
}
else
{
UART1_Overflow_Flag=1;//关闭串口中断,停止接收