C语言单片机串口程序怎么改?

问题遇到的现象和发生背景

不会定义这个sample_Liquid液位信息

问题相关代码,请勿粘贴截图

#include <reg52.h>
#include <intrins.h> //包含头文件

union uint_uchar{
unsigned int Bint;
unsigned char Bchar[2];
}sample_num; //采样次数单元

    unsigned char rev_statu;       //接收状态单元



            

void sys_init(void)
{
/串行口初始化/
TMOD|=0x20; //定时器1工作在定时方式2
SCON=0x50; //串行口工作在方式1,允许接收
TH1=0xfd;
TL1=0xfd; //设定波特率为9600
TR1=1; //启动定时器1
ES=1; //开串口中断
EA=1; //总中断允许
}

void UART_ISR(void) interrupt 4
{
unsigned char temp;

if(RI==1)
{
RI=0;
temp=SBUF;

     if((temp=='S')&&(rev_statu==0))

     {

       rev_statu=1;                      //准备接收'T'

     }
     else if((temp=='T')&&(rev_statu==1))

     {
       rev_statu=2;                          //准备接收'A'

  }
      else if((temp=='A')&&(rev_statu==2))

      {
        rev_statu=0;                      //接收到字符串“STA”
         sample_num.Bint+=1;           //采集次数单元加1
         temp=sample_Liquid();         //采集液位信息
         SBUF=0xff;                        //发送起始符

        while(TI==0); 

       TI=0;
       SBUF=temp;                    //发送液位数据

        while(TI==0); 
       TI=0; 

        SBUF=sample_num.Bchar[0];    //发送采样次数
      while(TI==0);
       TI=0;
        SBUF= sample_num.Bchar[1];    //发送采样次数
      while(TI==0);
        TI=0; 
     temp+=sample_num.Bchar[0];     //计算校验和

     temp+=sample_num.Bchar[1];
   SBUF=temp;                     //发送校验和
    while(TI==0);
     TI=0; 


   }
       else

       {
     rev_statu=0;                 //返回准备重新接收

    }

}
else if(TI==1) //若满足说明发送数据已完成

{TI=0;} //对于此任务可不写
}

void main(void)

{
sample_num.Bint=0;

  sys_init();

  while(1);

}

我想要达到的结果

这个串口程序用串口助手调试发送STA返回12345即可

不建议在串口中断里进行发送。可以定义一个全局标志,当串口接收检测到STA后,设置这个全局标志。在主程序里检测到标志后,执行发送操作即可。
因为这个标志在中断里被更改,定义的时候别忘记加上volatile。