Код: Выделить всё
//=================================================================================================
// ОБРАБОТКА И ОТПРАВКА ПАРАМЕТРОВ В 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 //--Отправка кодов завершения посылки
}
//=================================================================================================