write;
/* Обробка прийнятих від LPT координат */
send: procedure;
if a = 0ffh then goto label1; /* Якщо користувач засилає 0ffh, то дисплей очищається і знову готовий до прийому */
counter = counter +1; counter = 2 then; = 0; = a ;/ * координата по Y */
mask = 10000000b;
if x> 7 then bait = y * 30 + x/8;/* обчислення байти на бітовій карті дисплея */
else bait = y * 30; = bait; = x mod 8 ;/ * обчислення біта */
mask = ror (mask, ostatok)/* циклічний зсув вправо змінної mask на ostatok позицій */
call read ;/ * читання байта з дисплея */
a = mask or a ;/ * накладення маски на лічений байт */
call status ;/ * перевірка готовності дисплея */
p2 = 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 */2 = p2 and 11111011b ;/ * cd = 0 */
call write ;/ * висновок байти на дисплей */
p2 = p2 or 00010000b ;/ * готовий до прийому */
end;; = a ;/ * координата по X */
a = 0; = p2 or 00010000b ;/ * ack = 1 * /; send;
* Отримання байта від LPT */
receive: procedure interrupt 0;
a = p1; /* зчитування з порту P1 */
call send ;/ * виклик процедури обробки прийнятого байта */
end receive;
/* Ініціалізація дисплея * /: procedure; i = 0 to 20;
a = inibyte (i); status ;/ * перевірка готовності дисплея */
p2 = p2 or 00000100b ;/ * cd = 1 */
call write ;/ * висновок байти на дисплей */
p2 = p2 and 11111011b ;/ * cd = 0 * /;
end initialization;
/* ------------------- ПОЧАТОК ПРОГРАМИ ------------------- -------- */
/* Програмне скидання дисплея протягом 2-х мікросекунд */
label1: p2 = p2 and 11110111b; /* RST = 0 */i = 0 to 25;
end; = p2 or 00001000b ;/ * RST = 1 */
/* ініціалізація дисплея */initialization;
/* acknowledge - готовий до прийому */= p2 or 00010000b ;/ * Ack = 1 */;/ * дозвіл переривань */= 0; while 1;;;
При написанні програми була використана бібліотека, зазначена в програмі як файл reg51.dcl. Його лістинг наведено нижче:
/* Cop...