单片机--串口通信---11
Uart1_Drive.h #ifndef Uart1_Drive #define Uart1_Drive
extern void Uart1_Init(); extern void Uart1_Up_Data_Drive(); extern u8 xdata Uart1_Up_Num_Buffer[10]; //数字部分
#endif
Uart1_Drive.c
#include “all.h” bit Uart1_Flag=1; u8 code Uart1_Up_Symbol_Buffer[30]={" 温度: 遥控解码: 超声波:mm"}; // 是空字符 是换行 是回车 u8 xdata Uart1_Up_Num_Buffer[10];
//*************************************************************************** //函数:串口发送数据初始化 //功能:初始化串口,配置串口寄存器 //出口:void //入口:void //*************************************************************************** void Uart1_Init() { SM0=1; SM1=1; //上述两个指定串行通信的工作方式.9 REN=1; //串口接收允许位。上面三个配置,相当于SCON=0x50;
PCON&=0x3f; //0011 1111 AUXR|=0x01; //0000 0001 AUXR|=0x14; //0001 0100 T2H=0xfc; T2L=0xf3; ES=1;
}
//*************************************************************************** //函数:串口发送数据 //功能:发送串口数据 //出口:void //入口:void //***************************************************************************
void Uart1_Up_Data_Drive() { static u8 xdata count=0; if(Uart1_Flag) { Uart1_Flag=0; count++;
switch(count)
{
case 1:SBUF=Uart1_Up_Symbol_Buffer[0];break;
case 2:SBUF=Uart1_Up_Symbol_Buffer[1];break;
case 3:SBUF=Uart1_Up_Symbol_Buffer[2];break;
case 4:SBUF=Uart1_Up_Symbol_Buffer[3];break;
case 5:SBUF=Uart1_Up_Symbol_Buffer[4];break;
case 6:SBUF=Uart1_Up_Symbol_Buffer[5];break;
case 7:SBUF=Uart1_Up_Symbol_Buffer[6];break; //排序发送到温度后面的分号:
case 8:SBUF=Uart1_Up_Num_Buffer[0];break;
case 9:SBUF=Uart1_Up_Num_Buffer[1];break;
case 10:SBUF=Uart1_Up_Num_Buffer[2];break;
case 11:SBUF=Uart1_Up_Num_Buffer[3];break; //显示温度
case 12:SBUF=Uart1_Up_Symbol_Buffer[7];break;
case 13:SBUF=Uart1_Up_Symbol_Buffer[8];break;
case 14:SBUF=Uart1_Up_Symbol_Buffer[9];break;
case 15:SBUF=Uart1_Up_Symbol_Buffer[10];break;
case 16:SBUF=Uart1_Up_Symbol_Buffer[11];break;
case 17:SBUF=Uart1_Up_Symbol_Buffer[12];break;
case 18:SBUF=Uart1_Up_Symbol_Buffer[13];break;
case 19:SBUF=Uart1_Up_Symbol_Buffer[14];break;
case 20:SBUF=Uart1_Up_Symbol_Buffer[15];break;
case 21:SBUF=Uart1_Up_Symbol_Buffer[16];break;
case 22:SBUF=Uart1_Up_Symbol_Buffer[17];break;
case 23:SBUF=Uart1_Up_Num_Buffer[5];break;
case 24:SBUF=Uart1_Up_Num_Buffer[6];break;
case 25:count=0;;break;
}
}
}
void Uart1_Routine() interrupt 4 { static char Uart1_ser_n=0; if(RI) //接收中断,单片机发送信息给电脑 { RI=0; Uart1_Flag=1; if(SBUF==0x7f) //9600波特率 { Uart1_ser_n++; if(Uart1_ser_n>=10) { Uart1_ser_n=0; IAP_CONTR|=0xe0;
}
}
}
if(TI) //发送中断,电脑发信息给单片机
{
TI=0;
Uart1_Flag=1;
Uart1_Up_Data_Drive();
}
}
main.c //*************************************************************************** //函数:Uart1_Allot() 串口发送数据程序 //功能:发送串口数据 //出口:void //入口:void //*************************************************************************** void Uart1_Allot() { static xdata u8 count=0; count++; if(count>250) //间隔时间太短会出现错误。 { count=0; Uart1_Up_Num_Buffer[0]=0x30+Ds18B20_Read_Buffer[0]/10; //加一个0x30数据才可以变成ASIC码。 Uart1_Up_Num_Buffer[1]=0x30+Ds18B20_Read_Buffer[0]/10%10; Uart1_Up_Num_Buffer[2]=’.’; Uart1_Up_Num_Buffer[3]=0x30+Ds18B20_Read_Buffer[1]/10%10; Uart1_Up_Num_Buffer[5]=0x30+Ray_Read_Buffer[2]/16; Uart1_Up_Num_Buffer[6]=0x30+Ray_Read_Buffer[2]%16; Uart1_Up_Data_Drive(); }
}
