Код: Выделить всё
//=================================================================================================
//          ОБРАБОТКА И ОТПРАВКА ПАРАМЕТРОВ В MCU
// 1.Функция вызывается периодически с периодом 100ms;
// 2.Во временных переменных(outxx) сохраняются выводимые параметры;
// 3.Проверяется изменение переменных outxx (с использованием переменных agoxx).
//   Если есть изменение, устанавливается значение cmdPack=2;
// 4.Проверяется счетчик cntPack>10 для контроля достижения 1сек.
//   Если cntPack>10, устанавливается значение cmdPack=1;
//=================================================================================================
//=================================================================================================
//       1.СОХРАНЕНИЕ ВЫВОДИМЫХ ПАРАМЕТРОВ В ПОЛЬЗОВАТЕЛЬСКИХ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//--- Адрес - 1 -------------//
out01=1         // Передача заданной температуры в МК (значение разделено на 10)
out02=2          // Передача заданной температуры в МК (остаток после деления для сложения в МК)
out03=3        // Передача заданной Влажности в МК
out04=4
out05=5
//--- Адрес - 2 -------------//
out06=6
out07=7
out08=8
out09=9
out10=10
//--- Адрес - 3 -------------//
out11=11
out12=12
out13=13
out14=14
out14=15
//--- Адрес - 4 -------------//
out11=16
out12=17
out13=18
out14=19
out14=20
//=================================================================================================
//       2.ПРОВЕРКА НА ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//--- Адрес - 1 -------------//
if(ago01!=out01)
{
  cmdPack=2
  ago01=out01
}
if(ago02!=out02)
{
  cmdPack=2
  ago02=out02
}
if(ago03!=out03)
{
  cmdPack=2
  ago03=out03
}
if(ago04!=out04)
{
  cmdPack=2
  ago04=out04
}
if(ago05!=out05)
{
  cmdPack=2
  ago05=out05
}
//--- Адрес - 2 -------------//
if(ago06!=out06)
{
  cmdPack=2
  ago06=out06
}
if(ago07!=out07)
{
  cmdPack=2
  ago07=out07
}
if(ago08!=out08)
{
  cmdPack=2
  ago08=out08
}
if(ago09!=out09)
{
  cmdPack=2
  ago09=out09
}
if(ago10!=out10)
{
  cmdPack=2
  ago10=out10
}
//--- Адрес - 3 -------------//
if(ago11!=out11)
{
  cmdPack=2
  ago11=out11
}
if(ago12!=out12)
{
  cmdPack=2
  ago12=out12
}
if(ago13!=out13)
{
  cmdPack=2
  ago13=out13
}
if(ago14!=out14)
{
  cmdPack=2
  ago14=out14
}
if(ago15!=out15)
{
  cmdPack=2
  ago15=out15
}
//--- Адрес - 4 -------------//
if(ago16!=out16)
{
  cmdPack=2
  ago16=out16
}
if(ago17!=out17)
{
  cmdPack=2
  ago17=out17
}
if(ago18!=out18)
{
  cmdPack=2
  ago18=out18
}
if(ago19!=out19)
{
  cmdPack=2
  ago19=out19
}
if(ago20!=out20)
{
  cmdPack=2
  ago20=out20
}
//=================================================================================================
//       3.ПРОВЕРКА НА ДОСТИЖЕНИЕ ВРЕМЕНИ 1 СЕК ПРИ ОТСУТСТВИИ ИЗМЕНЕНИЯ outxx
//=================================================================================================
cntPack++
if(cntPack>=10)
{
  cmdPack=1
}
//=================================================================================================
//       4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0)     //--Проверка команды отправки (по изменению или 1 раз в сек)
{
  cmdPack=0       //--Очистка команды управления;
  cntPack=0     //--Очистка счетчика времени;
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=1            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5        //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out01
  crc+=out02
  crc+=out03
  crc+=out04
  crc+=out05
  //------------------------
  crc=crc&0xFF     //--Нормализация crc до байта:
  //-----Вычисление  crc с двумя дополнениями------------------------------------------------------
  crc=0xFF-crc
  crc+=1
  crc&=0xFF
  //-----Отправка посылки в UART-------------------------------------------------------------------
  prints head,1      //--Отправка заголовка;
  prints func,1      //--Отправка кода функции;
  prints adr,1      //--Адрес записи
  prints qntReg,1   //--Кол-во записываемых регистров;
  prints qntByte,1   //--Кол-во отправляемых байт;
  prints out01,1    //--Отправка байта регистра 1;
  prints out02,1    //--Отправка байта регистра 2;
  prints out03,1    //--Отправка байта регистра 3;
  prints out04,1    //--Отправка байта регистра 4;
  prints out05,1    //--Отправка байта регистра 5;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка второго пакета данных =======================
  //========================================================================
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=6            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5       //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out06
  crc+=out07
  crc+=out08
  crc+=out09
  crc+=out10
  //------------------------
  crc=crc&0xFF     //--Нормализация crc до байта:
  //-----Вычисление  crc с двумя дополнениями------------------------------------------------------
  crc=0xFF-crc
  crc+=1
  crc&=0xFF
  //-----Отправка посылки в UART-------------------------------------------------------------------
  prints head,1      //--Отправка заголовка;
  prints func,1      //--Отправка кода функции;
  prints adr,1      //--Адрес записи
  prints qntReg,1   //--Кол-во записываемых регистров;
  prints qntByte,1   //--Кол-во отправляемых байт;
  prints out06,1    //--Отправка байта регистра 6;
  prints out07,1    //--Отправка байта регистра 7;
  prints out08,1    //--Отправка байта регистра 8;
  prints out09,1    //--Отправка байта регистра 9;
  prints out10,1    //--Отправка байта регистра 10;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка третьего пакета данных =======================
  //========================================================================
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=11            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5       //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out11
  crc+=out12
  crc+=out13
  crc+=out14
  crc+=out15
  //------------------------
  crc=crc&0xFF     //--Нормализация crc до байта:
  //-----Вычисление  crc с двумя дополнениями------------------------------------------------------
  crc=0xFF-crc
  crc+=1
  crc&=0xFF
  //-----Отправка посылки в UART-------------------------------------------------------------------
  prints head,1      //--Отправка заголовка;
  prints func,1      //--Отправка кода функции;
  prints adr,1      //--Адрес записи
  prints qntReg,1   //--Кол-во записываемых регистров;
  prints qntByte,1   //--Кол-во отправляемых байт;
  prints out11,1    //--Отправка байта регистра 11;
  prints out12,1    //--Отправка байта регистра 12;
  prints out13,1    //--Отправка байта регистра 13;
  prints out14,1    //--Отправка байта регистра 14;
  prints out15,1    //--Отправка байта регистра 15;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
    //========================================================================
  //======================= Отправка четвёртого пакета данных =======================
  //========================================================================
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=16            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5       //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out16
  crc+=out17
  crc+=out18
  crc+=out19
  crc+=out20
  //------------------------
  crc=crc&0xFF     //--Нормализация crc до байта:
  //-----Вычисление  crc с двумя дополнениями------------------------------------------------------
  crc=0xFF-crc
  crc+=1
  crc&=0xFF
  //-----Отправка посылки в UART-------------------------------------------------------------------
  prints head,1      //--Отправка заголовка;
  prints func,1      //--Отправка кода функции;
  prints adr,1      //--Адрес записи
  prints qntReg,1   //--Кол-во записываемых регистров;
  prints qntByte,1   //--Кол-во отправляемых байт;
  prints out16,1    //--Отправка байта регистра 16;
  prints out17,1    //--Отправка байта регистра 17;
  prints out18,1    //--Отправка байта регистра 18;
  prints out19,1    //--Отправка байта регистра 19;
  prints out20,1    //--Отправка байта регистра 20;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
}
//=================================================================================================