//*********************************《人人學會單片機》視頻教程,祁緒電子2020-05
//串口發送函數。主函數調用,或者串口發送完中斷后馬上調用
//*********************************《人人學會單片機》視頻教程,祁緒電子2020-05
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; //發送漢字的ASCII
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; //發送漢字的ASCII
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 : SBUF=Uart1_Up_Symbol_Buffer[18];break;//發送漢字的ASCII
case 26 : SBUF=Uart1_Up_Symbol_Buffer[19];break;
case 27 : SBUF=Uart1_Up_Symbol_Buffer[20];break;
case 28 : SBUF=Uart1_Up_Symbol_Buffer[21];break;
case 29 : SBUF=Uart1_Up_Symbol_Buffer[22];break;
case 30 : SBUF=Uart1_Up_Symbol_Buffer[23];break;
case 31 : SBUF=Uart1_Up_Symbol_Buffer[24];break;
case 32 : SBUF=Uart1_Up_Symbol_Buffer[25];break;
case 33 : SBUF=Uart1_Up_Symbol_Buffer[26];break;
case 34 : SBUF=Uart1_Up_Num_Buffer[7];break; //發送數值 超聲波
case 35 : SBUF=Uart1_Up_Num_Buffer[8];break;
case 36 : SBUF=Uart1_Up_Num_Buffer[9];break;
case 37 : SBUF=Uart1_Up_Symbol_Buffer[27];break;//發送漢字的ASCII
case 38 : SBUF=Uart1_Up_Symbol_Buffer[28];break;
case 39 :count=0;break;//最后一步 沒有發送字節,串口TI不會置1,所以不再發送
}
}
}
//*********************************《人人學會單片機》視頻教程,祁緒電子2020-05
//串口中斷,接收一個字節,馬上發送N個字節,發送數組顯示到電腦
//*********************************《人人學會單片機》視頻教程,祁緒電子2020-05
void Uart1_Routine() interrupt 4
{
static char Uart1_ser_n=0; //用于接收計數
if(RI) //如果接收到一個字節
{
RI=0; //標志位清除
Uart1_Flag=1; //串口發送允許
if(SBUF==0x7f)//9600波特率 //判斷連續多個0x7f
{
Uart1_ser_n++; //判斷連續多個0x7f
if(Uart1_ser_n>=10) //判斷連續多個0x7f
{
Uart1_ser_n=0; //清0
IAP_CONTR|=0xe0; //執行自動軟復位,可以做調試用
}
}
}
if(TI) //如果上一個字節發送完成了
{
TI=0; //標志位清除
Uart1_Flag=1; //串口發送允許
Uart1_Up_Data_Drive(); //執行串口發送下一個字節
}
}