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

            ora   l          ; ** 4

            jnz   zader1     ; ** 10 нет, постоянная времени еще не равна 0, переход  

                            ; к следующему циклу временной задержки на 1 сек.

                            ; да, постоянная времени равна “0”

            ret              ; * 10 возврат из подпрограммы задержки на 1 сек.

                            ;

                            ; подпрограмма табличного преобразования

tabcn:     push  d          ; временное сохранение в теке содержимого пары d

                            ; так как оно еще понадобится

            lxi   h,base     ; загрузка в пару h базового адреса таблицы                                    ; кодов для семисегментных индикаторов

            mov   e,a        ; формирование 16-разрядного смещения для получения

            mvi   d,0        ; действительного адреса кода цифры

            dad   d          ; получение действительного адреса кода цифры

            mov   a,m        ; пересылка кода цифры из памяти (таблицы) в рег.а

            pop   d          ; восстановление из стека содержимого пары d

            ret              ; возврат из подпрограммы табличного преобразования

                            ;

klav:      db    0          ; ячека памяти в которой временно хранится код

                            ; нажатой клавиши клавиатуры

                            ;

rab:       db    0          ; ячека памяти в которой временно хранится

                            ; текущее сосотояние секундомера “0” - секундомер стоит

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

                            ;

                            ; таблица кодов необходимых для индикации цифр на

                            ; семисегментном индикаторе

base:      db    0fch       ; код цифры “0”

            db    60h        ; “1”

           db    0dah       ; “2”

           db    0f2h       ; “3”

           db    66h        ; “4”

           db    0b6h       ; “5”

           db    0beh       ; “6”

           db    0e0h       ; “7”

           db    0feh       ; “8”

           db    0f6h       ; “9”

           end              ; директива ассемблера, означающая конец текста

                            ; программы

Расчет временной задержки.

Составим уравнение Од + Мн * Pov = 2000000

где Од - суммарное количество тактов команд, выполняющихся однократно при формировании временной задержки (помечены знаком *)

Мн - суммарное количество тактов команд, выполняющихся в цикле (помечены знаком **)

Pov- количество повторений цикла

2000000 - количество тактов в 1 секунде (для тактовой частоты 2МГц)

Од = 17+10+10=27 тактов

Мн = 10+7+10+5+5+4+10=51 такт

Pov = (2000000-Од)/Мн

Pov=(2000000-37)/51=  39214,96078431

В качестве Pov берется целое число проходов 39214