51
main.c
    Uart_Sent_Char(ox8a);             //采集开
    Uart_Sent_Char(ox88);             //采集关
  
  if(uart_rx_flag == 1)                       //串口接收到数据
  {
    uart_rx_flag = 0;
    if(uart_buf[0] == 0xff)                   //正确数据
    {
      blood_H = uart_buf[71];                 //收缩压
      blood_L = uart_buf[72];                 //舒张压
    }
  }
  
  blood_press = (blood_H + 2*blood_L)/3;      //血压
  
  if(blood_press > blood_value)               //取血压最大值
    blood_value = blood_press;


/****
*******定时器0初始化函数
*****/
void Time0_init()
{
  TMOD |= 0x01;
  TH0 = (65535-921)/256;
  TL0 = (65535-921)%256;
  
  EA = 1;
  ET0 = 1;
  TR0 = 1;
}

/****
*******定时器0中断函数
*****/
void Time0() interrupt 1
{
  
  TH0 = (65535-921)/256;
  TL0 = (65535-921)%256;
  
  if(uart_num != 0)               //串口接收到数据
    uart_time++;
  if(uart_time >= 10)             //10毫秒后数据接收完,
  {
    uart_time = 0;                //计时清零
    uart_num = 0;                 //数据位数清零
    uart_rx_flag = 1;             //接收标志位为1
  }
    
    
}
uart.c
/**********************************
包含头文件
**********************************/
#include "uart.h"


/**********************************
变量定义
**********************************/
uchar uart_num,uart_buf[90],uart_time;        //串口接收相关变量
bit uart_rx_flag;                                                //串口接收标志位


/**********************************
函数定义
**********************************/
/****
*******串口初始化函数
*****/
void Uart_Init(void)
{
    SCON=0x50;                                                   //配置串口为模式 1
    
    /* 用定时器2,注释四行 */
//    PCON |= 0X80;                    //
//    TMOD|=0x20;                                                  //配置 T1 为模式 2
//    TL1 = TH1 = 256-11059200/12/16/9600;            //
//    TR1=1;                         //                            //启动 T1
    
    /* 不用定时器2,注释5行 */
    RCLK = 1;                        //串口接受时钟由定时器2提供
    TCLK = 1;                        //串口发送时钟由定时器2提供
    
    TH2 = RCAP2H = (65536 - 11059200/32/38400)/256;       //设置波特率 把 9600 改成115200 波特率就是115200
    TL2 = RCAP2L = (65536 - 11059200/32/38400)%256;       //设置波特率
    TR2 = 1;                        //启动 定时器2
/*********/
    ES=1;                                                             //打开串口中断
    EA=1;                                                                //打开总中断

//    UART_EN=1;  //485一直在写
}

/****
*******串口发送一个字节函数
*****/
void Uart_Sent_Char(uchar date)
{
    SBUF=date;
    while(!TI);
    TI=0;
}

///****
//*******串口发送字符串函数
//*****/
//void Uart_Sent_Str(uchar *date)
//{
//    while(*date != '\0')
//    {
//        Uart_Sent_Char(*date);
//        date++;
//    }
//}

/****
*******    串口中断服务程序函数 
*****/
void ser() interrupt 4
{
//    static uchar string[1];        //接收一位数据,如果接收两位数据,则string[2]
    if(RI)
    {
        RI=0;
//        string[0]=SBUF;

//        switch(string[0])
//        {
//            case('A'):  uart_num = 1  ;break;

//            case('B'):  uart_num = 2  ;break;

//            default: break;
//        }
    uart_buf[uart_num++] = SBUF;
    uart_time = 0;
    }    
}

uart.h

#ifndef _UART_H_
#define _UART_H_


/**********************************
包含头文件
**********************************/
#include "main.h"

//extern uchar uart_num,uart_buf[80],uart_time;        //串口接收相关变量
//extern bit uart_rx_flag;                                                //串口接收标志位

/**********************************
函数声明
**********************************/
void Uart_Init(void);                                            //串口初始化函数
void Uart_Sent_Char(uchar date);                    //串口发送一个字节函数
void Uart_Sent_Str(uchar *date);                    //串口发送字符串函数

#endif
32
//串口3的数据获取
uint8_t uart3_value;      //串口传的单个数据
//串口的储存数组,串口的接收时间,串口存值的数量
uint8_t uart3_buf[36],uart3_time,uart3_num;
uint8_t uart3_rx_flag;//串口的获取值的标志位

              u3_printf("%c",0x8a);     //采集打开
              u3_printf("%c",0x88);     //采集关闭

    if(uart3_rx_flag == 1)            //接收蓝牙指令
  {
    uart3_rx_flag = 0;    
    
    if(uart3_buf[0] == 0xff)
    {
      xueya_H1 = uart3_buf[71];     //收缩压
      xueya_L1 = uart3_buf[72];     //舒张压
    }
  }

  HAL_UART_Receive_IT(&huart3, &uart3_value, 1);

    //定时器中串口3处理过程
    if(uart3_num != 0) //串口接收到数据传来
        {
            uart3_time++;       //计时开始
            if(uart3_time >= 10)//一帧数据接受完成
            {
        //将标志位清零
                uart3_time = 0;   
                uart3_num = 0;
        //接收标志位置1
                uart3_rx_flag = 1;
            }
        }


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance == huart3.Instance)//串口2触发中断
    {
    //获取串口2的数据,uart2_value
        HAL_UART_Receive_IT(&huart3, &uart3_value, 1);
    //将数据存储到uart2_buf中
        uart3_buf[uart3_num++] = uart3_value;
        uart3_time = 0;
    }

}

 

发表回复

后才能评论