Программа таймера реального времени для УМПК80, страница 3

0170   08BF             ;ТЕПЕРЬ ПРОИЗВОДИМ СЧИТЫВАНИЕ КЛАВИШИ 'F'

0171   08BF             ;НЕОБХОДИМО УСТРАНИТЬ "ДРЕБЕЗГ"

0172   08BF             ;Т.Е. ЕСЛИ КЛАВИША НАЖАТА, ТО НЕ УЧИТЫВАТЬ ЕЕ ПОВТОРНО

0173   08BF             ;ЧТО ВЫЗЫВАЕТ БЛИКИ НА ИНДИКАЦИИ

0174   08BF 3E 7F                         MVI    A,01111111B ;МАСКА ДЛЯ 'D' 'E' 'F'

0175   08C1 D3 28                         OUT   28H

0176   08C3 DB 18                         IN    18H

0177   08C5 E6 04                         ANI   0100B        ;ВЫДЕЛЯЕМ КЛАВИШУ 'F'

0178   08C7 0F                            RRC

0179   08C8 0F                            RRC

0180   08C9 4F                            MOV   C,A       ;ЗАПИСАЛИ В МЛАДШИЙ БИТ C КОД 'F' (0 ИЛИ 1)

0181   08CA 0F                            RRC             ;ПОЛУЧИЛИ В ПЕРЕНОСЕ КЛАВИШУ 'F'

0182   08CB             ;ТЕПЕРЬ НЕОБХОДИМО УСТАНОВИТЬ ПЕРЕМЕННУЮ STOP

0183   08CB             ;ЕСЛИ ОНА РАВНЯЕТСЯ 1, ТО БУДЕТ ВЫВОДИТЬСЯ "ЗАМОРОЖЕННОЕ"  ЗНАЧЕНИЕ

0184   08CB             ;БУФЕРА ИНДИКАЦИИ

0185   08CB 21 19 0B                      LXI   H,STOP   ;ЗАГРУЖАЕМ АДРЕС ПЕРЕМЕННОЙ STOP В (H,L)

0186   08CE DA D9 08                      JC     A1      ;ЕСЛИ ПЕРЕНОС=1, ТО 'F' НЕ НАЖАТА

0187   08D1 3A 1A 0B                      LDA    OLD_KEY ;ЗАГРУЗИЛИ В АККУМУЛЯТОР СТАРУЮ КНОПКУ

0188   08D4 1F                            RAR

0189   08D5 D2 D9 08                      JNC   A1       ;ЕСЛИ OLD_KEY=0, ТО НАЖАТИЕ НЕ ПРОИЗОШЛО

0190   08D8 34                            INR   M

0191   08D9 21 1A 0B    A1:               LXI   H,OLD_KEY ;ПОЛУЧИЛИ АДРЕС ПРОШЛОЙ НАЖАТОЙ КЛАВИШИ

0192   08DC 71                            MOV   M,C       ;СОХРАНИЛИ КОД НАЖАТОЙ КЛАВИШИ

0193   08DD C9                            RET

0194   08DE             ;=========================================

0195   08DE             ;ДАННЫЕ НЕОБХОДИМЫЕ ДЛЯ РАБОТЫ ПРОГРАММЫ

0196   0B00                             .ORG    0B00H

0197   0B00 00          TEMP:           .DB     0

0198   0B01             ;ЦИФРЫ                СТАРШАЯ         МЛАДШАЯ

0199   0B01             ;                       |               |

0200   0B01 000000000000 IND_BUF:        .DB     0,0,0,0,0,0,0,0,0 ;БУФЕР, ОТОБРАЖАЕМЫЙ НА ИНДИКАЦИИ

0200   0B07 000000

0201   0B0A             ;СМЕЩЕНИЕ^^^            0 1 2 3 4 5 6 7 8

0202   0B0A             ;ЦИФРЫ               МЛАДШАЯ   СТАРШАЯ

0203   0B0A             ;                       |       |

0204   0B0A 0000000000  COUNTER:        .DB     0,0,0,0,0 ;ПЯТЬ БАЙТ ДЛЯ СЧЕТЧИКА

0205   0B0F             ;СМЕЩЕНИЕ^^^            0 1 2 3 4

0206   0B0F             ;ТАБЛИЦА ДЛЯ ПЕРЕКОДИРОВКИ ЦИФР В КОДЫ СЕМИСЕГМЕНТНОГО ИНДИКАТОРА

0207   0B0F             ;                          0   1   2    3    4    5    6    7   8    9

0208   0B0F 3F065B4F666D SEG_CODE:        .DB      03FH,06H,05BH,04FH,066H,06DH,07DH,07H,07FH,06FH

0208   0B15 7D077F6F

0209   0B19 00          STOP:            .DB      0

0210   0B1A 01          OLD_KEY:    .DB      1

0211   0B1B 00          SHIFT:           .DB   0

0212   0B1C                             .END

tasm: Number of errors = 0