Контроллер учета тепловой энергии в батареях отопления. Воронежский государственный университет
Скачать 2.13 Mb.
|
|
| AVR (ATiny2313) | PIC (16C745) | MK-51 (AT89С51) |
ПЗУ (память программ) | 2 Кб | 8 Кб | 4 Кб |
Таймеры/счетчики | 1(8 разрядов) 1(16 разрядов) | 2(16 разрядов) | 2(16 разрядов) |
Число портов ввода/вывода | 18 | 22 | 32 |
Питание | 2,7-5,5 | 2,0-5,5 | 4,0-5,5 |
Архитектура | RISC | RISC | CISC |
Тактовая частота | 20МГц | 24МГц | 24МГц |
Режим экономии энергии | Idle,Power-down, Standby | Sleep | Idle,Power-down |
Память данных | 128 байт | 256 байт | 128 байт |
Стоимость | 50 руб. | 300 руб. | 50 |
микроконтроллер фирмы Атмел - это 8-разрядные RISC микроконтроллер для встраиваемых приложений. Они привлекают внимание наилучшим соотношением показателей быстродействие/энергопотребление, удобными режимами программирования, доступностью программно-аппаратных средств поддержки и широкой номенклатурой выпускаемых кристаллов. Микроконтроллеры обычно поставляются со стертыми встроенными FLASH и EEPROM блоками памяти (содержимое всех ячеек = $FF), готовыми к программированию. Улучшенная RISC (enhanced RISC) архитектура AVR-микроконтроллеров объединяет в себе комплекс решений, направленных на повышение быстродействия микропроцессорного ядра AVR. Арифметико-логическое устройство (ALU), в котором выполняются все вычислительные операции, имеет доступ к 32-м оперативным регистрам, объединенным в регистровый файл. Выборка содержимого регистров, выполнение операции и запись результата обратно в регистровый файл выполняются за один машинный цикл. Большинство встраиваемых микроконтроллеров имеют только один такой регистр, непосредственно доступный ALU, - аккумулятор, что требует включения в программу дополнительных команд его загрузки и считывания. В качестве контроллера рассмотрим ATiny2313, представляющий собой 8-битовый микроконтроллер, имеющий, следующие характеристики: построен на основе расширенной RISC-архитектуры; 2К загружаемой флэш-памяти; 32 рабочих регистра; 2 таймера/счетчика; 128 байтов EEPROM; 15 линий ввода/вывода общего назначения; внешние и внутренние прерывания; встроенный последовательный порт.
Альтернативой может быть контроллер другой серии например PIC 16С745. PIC16F84 - это 8-pазpядные микpоконтpоллеpы с RISC аpхитектуpой, производимые фирмой MicrochipTechnology. Это семейство микpоконтpоллеpов отличается низким энеpгопотpеблением и высокой скоростью. Микpоконтpоллеpы имеют встроенное ЭППЗУ пpогpамм, ОЗУ данных и выпускаются в 20 выводных корпусах. Память данных (ОЗУ) имеет pазpядность 8 бит, память пpогpамм (ППЗУ) для PIC16C84 14. Использование Гаpваpдскойаpхитектуpы позволяет достичь высокой скорости выполнения битовых, байтовых и pегистpовых операций.
МК семейства МК-51 используют гарвардскую архитектуру. Классический микроконтроллер семейства 51 и его улучшенная модификация 52 серии имеет следующие данные: целочисленный 8-разрядный CISC-процессор, использование CISK архитектуры позволяет упростить программу за счет поддержки команд умножения и деления; тактовая частота до 80 МГц; командный цикл до 12 тактов; раздельные адресные пространства программ и данных; встроенная память программ объёмом 2-64 кб; встроенное ОЗУ данных объёмом 128б-64Кб; 40 выводов, 32 линии ввода-вывода; два или 4 8/16-разрядных таймера; последовательный порт RS-232; возможность подключения внешней памяти программ и данных, до 64 кб каждая (некоторые модели до 4Мб); режим пониженного энергопотребления.
Различные модификации дополнительно имеют возможность работы с интерфейсами SPI, I2C, USB.
Обоснование выбора контроллера
Для данной задачи - разработки регистратора параметров технологического процесса - микроконтроллер семейства МК-51 является оптимальным, так как сочетает в себе большие возможности управления, необходимые для решения поставленной мной задачи. Кроме того по существенным параметрам: число портов ввода вывода (32), архитектура (CISC) - микроконтроллер MCS-51 АТ89C51 превосходит микроконтроллеры подобных серий других производителей. Кроме того микроконтроллер серии МК-51 не уступает микроконтроллерам AVR и PIC также в таких параметрах как: число таймеров счетчиков (2), тактовая частота (до 24 МГц), режимы экономии энергии(Idle, Power-down). А так же при серийном выпуске данного изделия большую роль будет играть его малая стоимость и высокая надежность работы.
Краткие характеристики контроллера MCS-51 АТ89С51:
Он обладает высокими техническими характеристиками:
. Частота работы от 0 до 24МГц.
. Объем встроенного флешь ПЗУ - 4КБ.
. Объем регистрового ОЗУ 128 байт.
. Два счетчика 16ти разрядных счетчика\таймера.
. Порт выдерживает нагрузку до 20мА.
. Число портов ввода вывода 32.
. Котроллер поставляется в сорокавыводном корпусе.
. Напряжения питания от 5В +-20% (номинальное 5В).
.2 Выбор элементов схемы
Сначала рассмотрим выбор датчиков температуры.
В качестве датчика температуры рассмотрен вариант реализации DS18B20. Данный датчик может быть подключен по однопроводной сигнальной линии и передает данные по протоколу IWare. Благодаря обеспечению возможности адресного обращения возможно использование одной линии связи для всех датчиков.
Датчик DS18B20 имеет следующие отличительные особенности:
. Точность ±0.5°C от -50°C до +125°C,
. Разрешение от 9 до 12 бит, которое настраивается пользователем,
. Передача данных посредством 1-проводного последовательного интерфейса,
. 64-битный уникальный и неизменяемый серийный номер,
. Многоточечное считывание,
. Рабочее напряжение от 3.0В до 5.5В,
. Вариант датчика с запиткой с линии данных (DS18B20-PAR),
. O-92, 150mil 8-контактный SOIC, или 1.98мм x 1.37мм корпус с шариковыми выводами (±2.0°C).
3. Разработка программы управления
.1 Общий алгоритм работы
При старте системы на ЖКИ (жидкокристаллический индикатор) отображается время и показания датчиков температуры на данный момент, старт системы осуществляется нажатием клавиши «1». Далее пользователь может выбрать режим нажатием клавиши «2», в системе предусмотрено 4 режима работы (автоматический, пользовательский, экономный и «антизаморозка» ), режимы листаются по кругу с 1 по 4. В автоматическом режиме используются параметры, которые заданы по умолчанию, в пользовательском параметры, которые задает сам пользователь, экономный режим - поддержание ночью температуры 20º в спальне, и по 16º в других комнатах, к утру температура возрастает до 23º во всех комнатах, днем если никого нет дома температура понижается во всех комнатах до 16º, режим «антизаморозка» не дает замерзнуть воде в системе, если вода остывает до +3º то включается бойлер, нагрев происходит до +7º затем отключается. При нажатии клавиши «3» пользователь переходит к выбору канала, они листаются по кругу с 1 по 5 (коридор, спальня, кухня, зал, бойлер). Для сохранения параметров заданных пользователем используется клавиша «4». Чтобы увеличить температуру на +1 или уменьшить -1нужно воспользоваться клавишами «5», «6». При нажатии клавиши «7» пользователь может установить часы (+1 час), клавишей «8» установить минуты (+1 мин).
В системе присутствует FLASH ПЗУ для хранения пользовательских настроек.
Пример надписи на ЖКИ:
1 | 2 | : | 0 | 0 | : | 0 | 0 | | К | о | р | и | д | о | р | - | 2 | 1 | ° | | С | п | а | л | ь | н | я | - | 2 | 3 | ° |
К | у | х | н | я | - | 2 | 0 | ° | | | З | а | л | - | 2 | 2 | ° | | | Б | о | й | л | е | р | - | 6 | 5 | ° | | |
3.2 Описание работы программы
При включении в розетку контроллер производит начальную инициализацию основных переменных и массивов, прерываний и необходимых флагов. устанавливаются выставленные по умолчанию параметры, и система переходит к поддержанию нужной температуры, тока, включая охлаждение когда элементы перегреты и т. д. При старте система по умолчанию выключена и на индикаторе ничего не отображается. После нажатия клавиши «1» система включается в работу, на индикатор выводятся установленные по умолчанию параметры (начально все установлено в 0). Таким образом, реализуется простейший алгоритм настройки.
Вначале идёт объявление переменных, стандартные счётчики. Для измерения температуры мы выделили байтовые переменные. Сначала контроллер посылает сигналы датчикам и получает ответы о том, что датчики готовы к работе с ним. Затем контроллер посылает сигнал конкретному датчику и получает от него измеренное значение температуры. После получения результатов от 2 датчиков температуры и АЦП контроллер сравнивает полученные результаты с параметрами температуры, введёнными пользователем, либо с параметрами, установленными по умолчанию. Если температура в комнате оказывается ниже установленной температуры, то микроконтроллер включает нагревательный элемент. Если температура оказалась выше установленной, то, напротив, посылается сигнал об отключении тэна, а вентилятор продолжает работать, втягивая прохладный воздух до тех пор, пока температура не будет равна установленным параметрам, в этом случае система отключается. Для того чтобы была возможность ввести параметры температуры и времени используются соответствующие клавиши которые отслеживаются по моментам нажатия. Для отработки нажатия клавиатура сканируется много раз в секунду и контролируется изменение кода клавиши. При старте системы первым возможным установленным уровнем является 0о С, после каждого последующего нажатия кнопки «4»(+) температура на дисплее увеличивается на 1о, соответственно после каждого нажатия кнопки «5»(-) температура уменьшается на 1 и как только достигает 0, приращение останавливается.
Так как предусмотрен счетчик времени необходимо установить время, совпадающее с действующим. При введении времени сначала высвечиваются минуты, начиная с 1мин., затем, при нажатии на кнопку «6» параметр увеличивается на 1мин., как только параметр становится равен 60с, то время автоматически переводится в часы и, при нажатии на кнопку «7» время увеличивается на 1 час, после того как параметр становится равен 24ч., он переводится в 0, после этого отсчёт начинается заново.
Заключение
Поставленная задача была реализована, разработана функциональная схема. После анализа функциональной схемы рассмотрение множества разработок и отдельных электронных узлов была разработана схема контроллера управления системой отопления, которая реализует поставленную задачу на аппаратном уровне. При схемотехнической реализации блока был произведен выбор наиболее оптимального контроллера для решения задачи.
Вторым этапом реализации проекта стало написание программной части, которая обеспечивает управление оборудованием по заданному алгоритму. Для реализации функций обмена с температурными датчиками был изучен протокол IWare, который и был далее реализован в виде части программного кода. Также было выполнено описание программы и представлен её код.
Результат проекта представлен в виде отчета имеющего два приложения: листинг программы и принципиальная схема.
Приложение 1
Схема устройства
Приложение 2
Листинг программы
#include
#include
//номера датчиковchar const dat1[]={0xDD ,0x05 ,0xEC ,0x67 ,0x3D ,0x34 ,0xb9, 0x11 };char const dat2[]={0xDD ,0x05 ,0xEC ,0xAD ,0x35 ,0xb9 ,0xF9 ,0x32 };char const dat3[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 };char const dat4[]={0x55 ,0x00 ,0x05 ,0x45 ,0x20 ,0x99 ,0x3f, 0x02 }; char const dat5[]={0xDD ,0x05 ,0xEC ,0x67 ,0x3D ,0x34 ,0xb9 ,0x11 }; char const dat6[]={0xDD ,0x05 ,0xEC ,0xAD ,0x35 ,0xb9 ,0xF9 ,0x32 };char const dat7[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 };char const dat8[]={0x55 ,0x00 ,0x05 ,0x45 ,0x20 ,0x99 ,0x3f, 0x02 }; char const dat9[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 };char const str1[]={0x31 ,0x32 ,0x3A ,0x30 ,0x30 ,0x3A ,0x30 ,0x30, 0x40, 0x4B, 0x6F, 0x70, 0xB8, 0xE0, 0x6F, 0x70, 0x2D, 0x }; //умолчаниеchar const str2[]={0xDD ,0x05 ,0x45 ,0x20 ,0x99 ,0xb5 ,0xF9 ,0x42 }; //умолчаниеchar const str3[]={0x50 ,0x65 ,0xB6 ,0xB8 ,0xBC}; //режимchar const str4[]={0x41 ,0xB3 ,0xBF ,0x6F ,0xBC ,0x61 ,0xBF ,0xB8, 0xC0, 0x65, 0x63, 0xBA, 0xB8, B9 }; //автоматический char const str5[]={0xA8 ,0x6F ,0xBB ,0xC4 ,0xB7 ,0x6F ,0xB3 ,0x61, 0xBF, 0x65, 0xBB, 0xC4, 0x63, 0xBA, 0xB9, 0xB8 }; //пользовательскийchar const str6[]={0xС5 ,0xBA ,0x6F ,0xBD ,0x6F ,0xBC ,0xB8 ,0xC0, 0xBD, 0xC3, 0xB9 }; //экономичныйchar const str7[]={0x41 ,0xBD ,0xBF ,0xB8 ,0xB7 ,0x61 ,0xBC ,0x6F, 0x70, 0x6F, 0xB7, 0xBA, 0x61 }; //антизаморозкаchar seksot,sekt,min,hour; //shethiki vremeni for kontrol time work unsigned char key,dop_key1,dop_key2;char i,j,k,pp,n,s,dlo,regim,adrh,adrl,nz;int tis,dd;char iw;fon_off,ff,rwi2c;char const lcdini[]={8,0x3C,4,0x0D,1};char lcd1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };char lcd2[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };char dat[]= {0,0,0,0,0,0,0,0,0}; //for iware T s datchchar chas[]= {0,0,0,0,0,0,0,0,0};char min[]= {0,0,0,0,0,0,0,0,0};char t[]= {45,25,45,25,45,25,45,25,55};char const te[]= {35,20,35,20,35,20,35,18,45};char t[]= {45,25,45,25,45,25,45,25,45};delay (void char t) {for (dd=0;dd
{fok=0;(iware) //start proc
{ iware=0;delay(100); //timeout 500mks=1;delay(14); //timeout 70 mks(!iware)
{delay(86); //500mks
if (iware) {fok=1;}
} } }readiw (void) //чтение IWare
{unsigned char pp,nn;=0; for(nn=0;nn<8;nn++)
{ iware=0; delay (3); //start obmena bit=1; delay(6); //+30мкс для чтения=iware;pp=pp>1;(14);iware=1;(3);}iw=pp; //сохранение результата
}
void writeiw (void char t) //read IWare
{unsigned char pp,nn;=t;for(nn=0;nn<8;nn++)
{ iware=0; delay (3);=pp>1; iware=CY;(20);iware=1;(3);} }uart (void) interrupt 5 using 2
{ if (RI)
{ if(SBUF==0xff){ fon_off=1;}(SBUF==0){fon_off=0;} }(TI) {TI=0;(++step<12)=dat[step];
}
}readkey (void) interrupt 3 //INT1
{key=P2&0x07;(key==0) onsystem=onsystem;
}I2C(unsigned char adrh,adrl)
{=1; scl=1; sda=0; sda=0; scl=0;scl=0; //старт обмена=0xa0; //indeks flach pzu(rwi2c) pp=pp+1; //set reginm read(i=0;i<8;i++)
{ scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;(sda) // read ACK
{ scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;} =adrh;(i=0;i<8;i++)
{ scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;(sda) //read ACK
{ scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;} =adrl;adresl=adresl+8; if (CY) adresh++; //avtoinkrement adresa(i=0;i<8;i++)
{ scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;(sda) // read ACK
{ scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;} (rwi2c)
{
for(j=0;j<8;j++) //regim read
{ pp=0; (i=0;i<8;i++)
{ scl=0;scl=0;scl=0;scl=1;CY=sda;pp=pp>>1;scl=1;} (sda) //write ACK
{ scl=0;sda=0;scl=0;scl=1;scl=1;scl=1;scl=0;}
} }else {
for(j=0;j<8;j++)
{ pp=dat[j];
for(i=0;i<8;i++)
{ scl=0;pp=pp>>1; sda=CY;scl=1;scl=1;scl=1;} =1;
while(sda) //read ACK
{ scl=0;scl=0;scl=0;scl=1;scl=1;scl=1;}
} }}timer0 (void) interrupt 1 using 2 /*Function interrupt timer0*/
{ =0xFC;TL0=0x65; //perepolnen 1000(++tis==1000)
{tis=0;if (++sek==60)
{sek=0;
{if (min
{if (t[1]>dat[1])power1=1 else power1=0; //proverka vozduh
if (t[2]
{if (min
{if (t[3]>dat[3])power2=1 else power2=0; //proverka vozduh
if (t[4]
if (min
{if (t[1]>dat[1])power1=1 else power1=0; //proverka vozduh
if (t[2]
if (min
{if (t[1]
if (t[2]>dat[2])power1=0;} //teplonositel
if (min
{if ((t[9]-10)>dat[9])kotel=1 else kotel=0; //proverka vozduh
if ((t[9]+5)
for(j=0;j<4;j++)
{if (min==min[j*2+1])&&(chas==chas[j*2+1])
{rwi2c=1;
i2c(adresh,adrsl);for(j=0;j<9;j++)chas[j]=dat[j];
i2c(adresh,adrsl);for(j=0;j<9;j++)min[j]=dat[j];
i2c(adresh,adrsl);for(j=0;j<9;j++)t[j]=dat[j];
}
}
if (++min==60)
{min=0; if (++hour==24){hour=0;
}}}
lcd1[0]=hour/10+0x30; lcd1[1]=hour%10+0x30;lcd1[2]=0x2d; //вывод времени[3]=min/10+0x30; lcd1[4]=min%10+0x30;lcd1[5]=0x2d;
lcd1[6]=sek/10+0x30; lcd1[7]=sec%10+0x30;
lcd1[10]=t[1]/10+0x30; lcd1[11]=t[1]%10+0x30;lcd1[10]=0x2d;
if (--dlo<1)&&(fon_off)
{for(j=9;j<32;j++) {lcd1[j]=str1[j];dlo=1;} //восстановление стандартной строки
lcd1[17]=t[1]/10+0x30; lcd1[18]=t[1]%10+0x30;
lcd1[30]=t[3]/10+0x30; lcd1[31]=t[3]%10+0x30;
lcd1[17]=t[5]/10+0x30; lcd1[18]=t[5]%10+0x30;
lcd1[30]=t[7]/10+0x30; lcd1[31]=t[7]%10+0x30;
lcd1[7]=t[9]/10+0x30; lcd1[8]=t[9]%10+0x30;
lcd1[30]=t[3]/10+0x30; lcd1[31]=t[3]%100+0x30;
}
}(tis<5){e=0; rs=0;P0=lcdini[tis];e=1;} // send LCDif(tis<37){e=0; rs=1;P0=lcd1[tis-5];e=1;}if(tis<45){e=0; rs=1;P0=0x20;e=1;}if(tis<77){e=0; rs=1;P0=lcd2[tis-45];e=1;}
// сканирование дополнительной клавиатуры
strob=0;dop_key1=P0;strob=1;
if !(dop_key1==dop_key2)
{ if (dop_key1==0x7F)t[0]++;
if (dop_key1==0xAF)t[0]--;
if (dop_key1==0xDF)t[2]++;
if (dop_key1==0xEF)t[2]--;
if (dop_key1==0xF7)t[4]++;
if (dop_key1==0xFA)t[4]--;
if (dop_key1==0xFD)t[6]++;
if (dop_key1==0xFE)t[6]--;
dop_key2==dop_key1;
}} /*end Function interrupt timer0*/ini(void)
{SCON=0x50; //obmen 8bit takt for timer1=0xDC //for 11.0592MGc COM-9600=0x00 /set temer 20 000 Gc*/=0x22; /*2 regim reload timer*/=1; /*enable interrupt timer0*/=0; /*priority = 0*/=1; /*enable interrupt*/
ES=1; //последовательный порт
EX1=1; //внешнее прерывание (считывается клавиатура)
TR0=1; /*start timet0*/=1;}main (void)
{ init();(1)
{
if (fraboti){
for(j=0;j<32;j++)
{lcd1[j]=str1[j];
lcd2[j]=str2[j];
}
if (key=2)
{for(j=9;j<14;j++)
{lcd1[j]=str3[j];}
regim++; }
if (regim==5) regim=1;
lcd1[15]=regim+0x30;
if (regim==1)
{for(j=17;j<31;j++) {lcd1[j]=str4[j];} t[0]=20;t[1]=45;t[2]=22;t[3]=45;t[4]=22;t[5]=45;t[6]=20;t[7]=45;t[8]=65;}
if (regim==2)
{for(j=17;j<33;j++) {lcd1[j]=str5[j];} }
if (regim==3)
{for(j=17;j<28;j++) {lcd1[j]=str6[j];}t[0]=16;t[1]=35;t[2]=18;t[3]=35;t[4]=22;t[5]=45;t[6]=20;t[7]=45;t[8]=65;}
if (regim==4)
{for(j=17;j<30;j++) {lcd1[j]=str7[j];}t[0]=1;t[1]=5;t[2]=2;t[3]=5;t[4]=2;t[5]=5;t[6]=2;t[7]=5;t[8]=15;}
if (key=3)
{for(j=9;j<14;j++)
{lcd1[j]=str8[j];}
kanal++;
if (kanal==9) kanal=1;
lcd1[15]=kanal+0x30;
if (kanal==1) {for(j=17;j<24;j++)
{lcd1[j]=str9[j];}[25]=0x54;lcd1[27]=t[kanal]/10+0x30;lcd1[28]=t[kanal]%10+0x30;}
if (kanal==2) for(j=17;j<24;j++) {lcd1[j]=str10[j];}
if (kanal==3) for(j=17;j<22;j++) {lcd1[j]=str11[j];}
if (kanal==4) for(j=17;j<20;j++) {lcd1[j]=str12[j];}
if (kanal==5) for(j=17;j<23;j++) {lcd1[j]=str13[j];}
if (kanal==6) for(j=17;j<24;j++) {lcd1[j]=str10[j];}
if (kanal==7) for(j=17;j<22;j++) {lcd1[j]=str11[j];}
if (kanal==8) for(j=17;j<20;j++) {lcd1[j]=str12[j];}
if (kanal==9) for(j=17;j<23;j++) {lcd1[j]=str13[j];}
}
if (key=4) { //сохранение настроек
rwi2c=1;adresh=(24*nz)>>8;adresl=(24*nz);if(++nz=10)nz=0;
for(j=0;j<9;j++)dat[j]=chas[j];i2c(adresh,adrsl);
for(j=0;j<9;j++)dat[j]=min[j];i2c(adresh,adrsl);
for(j=0;j<9;j++)dat[j]=t[j]};i2c(adresh,adrsl);
if (key=5) {t[kanal]++;lcd1[30]=t[kanal]/10+0x30;lcd1[31]=t[kanal]%10+0x30;}
if (key=6) {t[kanal]--;lcd1[30]=t[kanal]/10+0x30;lcd1[31]=t[kanal]%10+0x30;}
if (key=7) {if(++chas[n]==24)chas[n]=0;lcd1[30]=chas[n]/10+0x30;lcd1[31]=chas[n]%10+0x30;}
if (key=8) {if(++min[n]=60) min[n]=0;lcd1[31]=min[n]/10+0x30;lcd[31]=min[n]%10+0x30;}
}
resetiw;
if (fok)
{writeiw(0xCC); //пропустить передачу кода
writeiw(0x44); //запустить оцифровку
while(sotsek<75); //переполнение таймера
resetiw();
writeiw(0x55); //работать по адресу
for(j=0;j<8;j++)
{
writeiw(dat1[j]);
}
writeiw(0xb8); //считываем температуру
readiw();
if (iw==0xff){ readiw(); t[1]=0x80+(iw+1)>>1;} //если температура отрицательная
else {readiw(); t[1]=iw>>1} //если температура положительная
dat[j]=iw;
}
writeiw(dat2[j]);
}
writeiw(0xb8); //считываем температуру
readiw();
if (iw==0xff){ readiw(); t[1]=0x80+(iw+1)>>1;} //если температура отрицательная
else {readiw(); t[1]=iw>>1} //если температура положительная
dat[j]=iw;
}