y"> Блок видачі даних
Видає накопичені дані в послідовний порт в разі його виявлення.
Лістинг програмної частини
kurs: do;
$ include (reg51.dcl) data (384) byte auxiliary; /* Масив даних */
/* Оголошення змінних */AUXR1 register at (0a2h); ADCON register at (0c5h); ADCH register at (0c6); PUMP bit at (085h) register;/* p0.5 */ DRAIN bit at (086h) register;/* p0.6 */P20 bit at (0a0h) register; P21 bit at (0a1h) register; P22 bit at (0a2h) register; P23 bit at (0a3h) register; P24 bit at (0a4h) register; P25 bit at (0a5h) register; P26 bit at (0a6h) register; P27 bit at (0a7h) register; t word;/* Лічильник 20х часток секунди */sec word; /* Лічильник секунд */sf byte;/* Прапор секунди */sf5 byte;/* Прапор 5х хвилинного інтервалу */ptr word;/* Покажчик на кінець блоку даних */lvl byte;/* Заданий рівень */status word ;/* Значення бітів PUMP і DRAIN */lastlvl byte;/* Останній зафіксований рівень */connected byte; /* Прапор підключеного пристрою */i word; key byte; span>
/* Обробка переривання таймера * /: procedure interrupt 1; = 0; = t-1; t = 0 then /* Пройшла 1 хвилина * /; = 1200 ; = 1; = sec-1; sec = 0 then/* Пройшов інтервал в 5 хв * /; = 5; = 1;;; = 03ch; = 0b0h; = 0; = 1; = 1; timer; span>
/* Інінціалізація */= 0; = 0; = 255; /* P2 на вхід */= 0;/* Обнулення прапорів */= 0; = 1200;/* 20інтервалов по 50000мкс = 1сек */= 5; = 0;/* скидаємо прапор переповнення */= 1; = 1; = 03ch; /* 15536 ​​- рахунок до 65536 -> 50000 тактів таймера по 1мкс */= 0b0h; = 00000001b; /* 1-ий режим таймера 0 */= 00000001b; = 0; = 0; = 0; = 0; /* Якщо 0 -> пристрій не підключений */
/* Інінціалізація АЦП */= 1;/* Встановлення 8бітних перетворення */=;
/* ------------------------------- */
while 1; /* Головний цикл */
/* Визначення натиснутоюклавіші */= -1; p20 = 0 then key = 0; p21 = 0 then key = 1; p22 = 0 then key = 2; p23 = 0 then key = 3 ; p24 = 0 then key = 4; p25 = 0 then key = 5; p26 = 0 then key = 6; p27 = 0 then key = 7;
/* Якщо кнопка була натиснута - фіксуємо новий рівень */(key> 0) lvl = key; = lastlvl + status;/* Виводимо рівень на індикатор */sf = 1 then/* Якщо пройшла одна секунда * /;
/* Очікування перетворення */= 01000b;/* Початок перетворення */
/* Очікування закінчення перетворення */while (ADCON AND 010000b) = 0; end;
/* Виділяємо старші три біти результату */= ADCH/32;
/* Включення насоса ...