Проектирование устройства состоящего из 15 микросхем, страница 3

K_7:      cmp BL, 00111000b;        7

              jne K_8;

              mov BL, 07h;                    код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_8:      cmp BL, 00000001b;        8

              jne K_9;

              mov BL, 08h;                    код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_9:      cmp BL, 00001001b;        9

              jne K_A;

              mov BL, 09h;                    код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_A:     cmp BL, 00010001b;        A

              jne K_B;

              mov BL, 0Ah;                   код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_B:      cmp BL, 00011001b;        B

              jne K_C;

              mov BL, 0Bh;                    код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_C:      cmp BL, 00100001b;

              jne K_D;

              mov BL, 0Ch;                    код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_D:     cmp BL, 00101001b;

              jne K_E;

              mov BL, 0Dh;                   код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_E:      cmp BL, 00110001b;

              jne K_F;

              mov BL, 0Eh;                    код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_F:      cmp BL, 00111001b;        F

              jne K_Ap;

              mov BL, 0Fh;                    код кнопки - ее значени

              jmp Input;                          уходим на ввод в нужную позицию

K_Ap:   cmp BL, 00000010b;        ADRES

              je K_adr;

              cmp BL, 00001010b;        A+

              je K_Aplus;

              cmp BL, 00010010b;        A-

              je K_Amin;

              cmp BL, 00011010b;        DATA

              je K_data;

ret;

При нажатии на кнопку «инкремент адреса» происходит увеличение текущего адреса, сравнение его с 999 – чтобы не выйти за диапазон и происходит обновление индикатора:

;#######################################################################

;             кнопка увеличения адреса и ввода данных данных

;#######################################################################

K_Aplus:

              inc AX; декремент текущего адреса

              cmp AX, 999;      проверка на количество 1000

              jnge vse_ok1;      если не больше или равно то дальше

              mov AX, 999;     иначе пишим макс допустимое значени

vse_ok1:

              call Indic;            отображаем то что по этому адресу

ret;

При нажатии на кнопку «декремент адреса» происходит уменьшение  текущего адреса, сравнение его с 0 – чтобы не выйти за диапазон и происходит обновление индикатора:

;#######################################################################

;             кнопка уменьшения адреса и ввода данных данных

;#######################################################################

K_Amin:

              dec AX;               декремент текущего адреса

              cmp AX, 999;      проверка на количество 1000

              jnge vse_ok2;      если не больше или равно то дальше

              mov AX, 999;     иначе пишим макс допустимое значени

vse_ok2:

              call Indic;            отображаем то что по этому адресу

ret;

При нажатии кнопки перевода в режим прямого ввода адреса в счетчик ввода помещается число вводимых символов, и очищаем индикатор, выводом на него «_», на нем будут появляться введенные цифры:

;#######################################################################

;             кнопка прямого ввода адреса

;#######################################################################

K_Adr:

              mov count, 6; счетчик вводимых символов 6 = 4(адрес) + 2(данные)

; все разряды - нижнее подчеркивание _

                                           ; команда записи в ОЗУ отображения      

              mov BL, 10010000; устанавливаем 0й адрес ОЗУ отображения с автоинкрементированием

              mov KKD_RU, BL;

              mov CX, 8;

K_Adr_1:

              mov KKD_D, 00001000b;              запись в ОЗУ отображения _

              dec cx;

              jnz K_Adr_1;

ret;

При нажатии кнопки ввода данных по текущему адресу активируется редим ввода данных, на индикаторе разряды в которых отображаются данные заменяются на «_» и в счетчик вводимых цифр записывается 2:

;#######################################################################

;             кнопка ввода данных по текущему адресу

;#######################################################################

K_data:

              mov count, 2;      счетчик вводимых символов 2(данные)

; все разряды данных (2 младших) - нижнее подчеркивание _

                                           ; команда записи в ОЗУ отображения      

              mov BL, 10010000; устанавливаем 0й адрес ОЗУ отображения с автоинкрементированием

              mov KKD_RU, BL;

              mov CX, 2;

K_Amin_1:

              mov KKD_D, 00001000b;              запись в ОЗУ отображения _

              dec cx;

              jnz K_Amin_1;

ret;

При нажатии кнопок цифр осуществляется ввод в текущую позицию (она определяется счетчиком позиции) и обновляется индикатор. Если счетчик позиции содержит 0, то нажатия этих кнопок игнорируются: