以下是关于这个电路最核心的解码函数,基于C51语言,用户可根据自己用途对其进行扩展。
void UART_init()//初始化串行口和波特率发生器
{
SCON =0x50; //选择串口工作方式1,打开接收允许
TMOD =0x20; //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xA0; //实现波特率1200(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1; //启动定时器T1
ET1 =0;
ES=1; //允许串行口中断
PS=1; //设计串行口中断优先级
EA =1; //单片机中断允许
}
//********************************************
void com_interrupt(void) interrupt 4
{
unsigned char ch;
if(RI)//处理接收中断
{
ch=SBUF;//接收串口数据
if((ch==0x04)&&(start==0)) //0x04代表为单数据消息格式,还未开始接收
{
buffer[0]=ch;//开始保存第一字节
start=1; //置开始接收标志
i=1;//数组指针第二个字节
}
else if(start==1)//如果已开始接收
{
buffer[i++]=ch; //存放
}
if(i>1 && buffer[1]>25)//接收超过了25个字节(我简单用来防干扰后不退出的情况)
{
i=1;//变量复位
start=0;
}
if(i>2 && i>(buffer[1]+2)) //取完了长度字节标示的长度 (原来是 if(i>2 && i>(buffer[1]+2)))
{
Length=i;
New_Number=1;
i=1; //变量复位
start=0;
}
}
TI=0; //清除中断标志位
RI=0; //清除中断标志位
}
void UART_init()//初始化串行口和波特率发生器
{
SCON =0x50; //选择串口工作方式1,打开接收允许
TMOD =0x20; //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xA0; //实现波特率1200(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1; //启动定时器T1
ET1 =0;
ES=1; //允许串行口中断
PS=1; //设计串行口中断优先级
EA =1; //单片机中断允许
}
//********************************************
void com_interrupt(void) interrupt 4
{
unsigned char ch;
if(RI)//处理接收中断
{
ch=SBUF;//接收串口数据
if((ch==0x04)&&(start==0)) //0x04代表为单数据消息格式,还未开始接收
{
buffer[0]=ch;//开始保存第一字节
start=1; //置开始接收标志
i=1;//数组指针第二个字节
}
else if(start==1)//如果已开始接收
{
buffer[i++]=ch; //存放
}
if(i>1 && buffer[1]>25)//接收超过了25个字节(我简单用来防干扰后不退出的情况)
{
i=1;//变量复位
start=0;
}
if(i>2 && i>(buffer[1]+2)) //取完了长度字节标示的长度 (原来是 if(i>2 && i>(buffer[1]+2)))
{
Length=i;
New_Number=1;
i=1; //变量复位
start=0;
}
}
TI=0; //清除中断标志位
RI=0; //清除中断标志位
}
200字以内,仅用于支线交流,主线讨论请采用回复功能。