лей надсилається послідовність з 21 байта (сім команд).
Потім мікроконтролер посилає на лінію Ack # LPT порту через вихід Р2.4 логічну одиницю, яка б означала готовність до прийому, після чого дозволяє всі переривання. p align="justify"> По приходу логічного нуля на 12 лінію мікроконтролера виникає переривання INT0, вступає в дію обробник цього переривання, який зчитує дані з порту Р1 і запускає процедуру обробки прийнятого байта. p align="justify"> У викликаної процедурі прийнятий байт запам'ятовується і мікроконтролер очікує наступного байта виставляючи одиницю на Р2.4.
Коли приходить другий байт, процедура обробки прийнятого байта, використовуючи перший байт, обчислює координату на бітовій карті дисплея. p align="justify"> Потім мікроконтролер зчитує з LCD байт з таким же місцем розташування, наступним способом:
В· На вихід Р2.2 виставляється одиниця, що означає що буде команда.
В· На порт Р0 надсилається почергово три байти команди установки позиції на бітовій карті дисплея.
В· Зчитується байт, записаний в цій позиції.
Потім на лічений байт накладається маска, яка вказує який біт необхідно засвітити, і байт посилається назад на своє місце на дисплеї.
У програмі також передбачена можливість очищення дисплея, яка відбувається при надсиланні з LPT порту байта 0FFH.
4.2 Лістинг програми
ts: do;
$ include (reg51.dcl) (i, r0, r1, a, a1, x, y, bait, ostatok, nomer, counter, mask, j) byte, (*) byte constant ( 80h, 07h, 40h,
eh, 00h, 41h,
h, 00h, 42h,
eh, 00h, 43h,
00h, 00h, 81h,
h, 00h, 24h,
h, 00h, 98h);
/* Перевірка готовності дисплея */
status: procedure; c byte; = p2 or 00000100b;/* cd = 1 */= 0ffh; = 0bh; = 0; while r1-c <> 0; = p2 and 11111101b; /* rd = 0 */= p0; = p2 or 00000010b; /* rd = 1 */= r1 and c;; status;
/* Читання байта з дисплея * /: procedure; status; = p2 or 00000100b;/* cd = 1 */= low (nomer); = p2 and 11111110b;/* wr = 0 * /= p2 or 00000001b;/* wr = 1 */= high (nomer); = p2 and 11111110b;/* wr = 0 */= p2 or 00000001b;/* wr = 1 */= 24h; = p2 and 11111110b ;/* wr = 0 */= p2 or 00000001b;/* wr = 1 */= p0 and 11111011b;/* cd = 0 */= p2 and 11111101b;/* rd = 0 */= p0; = p2 or 00000010b;/* rd = 1 */read;
/* Запис байта на дисплей */
write: procedure;
p0 = a; = p2 and 11111110b;/* wr = 0 */= p2 or 00000001b;/* wr = 1 */...