Изучение программы “секундомер”

Страницы работы

Содержание работы

; Программа “секундомер”.

; Выполняемые функции: нажатие на клавишу    “0” - запуск секундомера;

;                                            “1” - останов секундомера

;                                            “2” - смена режима счета:

; по умолчанию включен режим увеличения состояния на 1 сек., нажатие на эту

; клавишу приводит к включению режима смены состояний через 2 сек. Повторное

; нажатие на эту клавишу переводит в режим смены состояний через 1 сек. И т.д.

;               

; Распределение регистров микропроцессора.

; B   -     счетчик времени, (текущее время в двоично-десятичном коде),

; С   -     защита от дребезга,

; D   -     эталон количества секунд,

; Е   -     текущее количество секунд,

; D,E -     индекс таблицы,

; H,L -     постоянная времени на 1 секунду,

; H,L -     адрес таблицы для вывода

;

porta      equ   80h        ; адрес первого индикатора

portb      equ   81h        ; адрес второго индикатора

portc      equ   82h        ; адрес клавиатуры

porcrl     equ   83h        ; адрес порта управления внешними устройствами

pov        equ   39214      ; постоянная времени зад. на 1 сек.

povdr      equ   254        ; пост. времени защиты от дребезга (кол. повторов).

kodkl      equ   5h         ; код пуска и смены режима 00000101 (кл. “0” и “2”).

kodkl1     equ   6h         ; код останова и смены режима 00000110 (кл. “1” и “2”).

                            ;

           org   800h       ; стартовый адрес программы в ОЗУ стенда

                            ; инициализация

           lxi   sp,900h    ; инициализация указателя стека

           mvi   a,89h      ; загрузка управляющего байта внешних устройств

           out   porcrl     ; вывод управляющего байта в порт управления

      mvi   b,0        ; инициализация регистров микропроцессора

           mvi   e,0

      mvi   d,1

      mvi   a,0fch     ; код цифры ноль для вывода

           out   porta      ; вывод нулей на индикацию

      out   portb

                            ;

                            ; ожидание пуска или смены режима

circl:     mvi   c,povdr    ; загрузка кол. повторов при защ. от дребезга

rept:      in    portc      ; опрос клавиатуры

           ani   kodkl      ; нажат “пуск” или “смена режима” ?

           jz    circl      ; ничего не нажато

                            ; защита от дребезга при нажатии

           dcr   c          ; да, нажато, уменьшение счетчика повторов при защ. от

; дребезга

      jnz   rept       ; дребезг еще не окончен

                       ; дребезг при нажатии окончен

                       ; сохранение кода нажатой клавиши

      in    portc      ; чтение кода нажатой клавиши                     

      lxi   h,klav     ; занесение в пару h адреса ячейки памяти в которой

                      ; необходимо сохранить код нажатой клавиши

      mov   m,a        ; пересылка кода нажатой клавиши в ячейку памяти, адрес

                       ; которой находится в паре h

reset1:    mvi   c,povdr    ; ожидание отпускания клавиши    

rept1:     in    portc      ; опрос клавиатуры

           ana   a          ; ни одна клавиша не нажата ?

      jnz   reset1     ; нет, что-то нажато

                       ; защита от дребезга при отпускании клавиши

           dcr   c          ; ничего не нажато, уменьшение счетчика повторов при

     ; защ. от дребезга

      jnz   rept1      ; дребезг еще не окончен

                            ; дребезг при отпускании окончен

Похожие материалы

Информация о работе