单片机--串口通信---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(); }

}

经验分享 程序员 微信小程序 职场和发展