Разработка программы для устройства управления системой очистки лобового стекла автомобиля, страница 2

return:     ret

;подпрограмма задержки

zader:      lxi   h,pov       ;*

zader1:     in    portc       ;**

            ani   kod1        ;**

            jz    zader2      ;**

            mvi   c,povdr     ;

vvod1:      in    portc       ;

            ani   kod1        ;

            jz    zader2      ;

            dcr   c           ;

            jnz   vvod1       ;

            in    portc       ;

            push  h           ;

            lxi   h,klav      ;

            mov   m,a         ;

            pop   h           ;

vvod0:      mvi   c,povdr     ;

vvod2:      in    portc       ;

            ana   a           ;

            jnz   vvod0       ;

            dcr   c           ;

            jnz   vvod2       ;

            pop   h           ;

            jmp   creg        ;была нажата нужная клавиша, выход из подпрограммы (переход на вызов подпрограммы режим)

zader2:     dcx   h           ;**

            mov   a,h         ;**

            ora   l           ;**

            jnz   zader1      ;**

            ret               ;*

flag:       db    0

klav:       db    0

            end

;принцип действия:

;происходит пересылка текущего состояния индикатора из регистра d в аккумулятор

;* смена состояния индикатора на противоположное осуществляется с помощью команды xri mask - исключающее или аккумулятора с данными (mask = 01101100)

;01100000(аккумулятор*) xri 01101100(mask) = 00001100 (00001100 xri 01101100 = 01100000) - полученное значение записывается в аккумулятор и сохраняется еще и в регистре d

;затем аккумулятор выводится на индикацию, вызывается b раз подпрограмма задержки, совершается переход на метку rstr и все повторяется заново до тех пор пока

;не будет нажата клавиша "останов" - 0 или смена режима

;* в данный момент в аккумуляторе хранится текущее состояние индикатора

расчет задержки на 1 секунду

одн(*) + мног(**)∙pov = 1738000

одн = 17+10+10=37 тактов

мног = 10+7+10+5+5+4+10=51 такт

pov = (1738000-Од)/Мн

pov = 1738963/51 = 34077

примечание: тактовая частота процессора установленного в стенде 1,738 Мгц

отсюда число 1738000

3. Листинг программы

     Кросс-ассемблер 80/85 ### Файл листинга lkr10.lst

Входной файл   > lkr10.asm

Объектный файл > lkr10.obj

1 проход

2 проход

  1                     porta equ   80h   ;адреса портов

  2                     portb equ   81h   ;

  3                     portc equ   82h

  4                     porcrl     equ   83h

  5                     pov  equ   34077 ;постоянная времени на одну секунду

  6                     povdr equ   254   ;постоянная времени дребезга

  7                     kod  equ   00001010b   ;код режима через две секунды или через 5 секунд  (клавиши "1" и "3")

  8                     kod1 equ   00001011b   ;код обоих режимов и останова (клавиши "0", "1", "3")

  9                     mask equ   01101100b   ;маска индикации

 10                          org   800h        ;инициализация

 11  0800   31 00 09         lxi   sp,900h

 12  0803   3E 89            mvi   a,89h

 13  0805   D3 83            out   porcrl

 14  0807   3E 60       begin:     mvi   a,01100000b

 15  0809   D3 81            out   portb             ;инициализация регистров микропроцессора

 16  080B   57               mov   d,a        

 17  080C   0E FE       reset:     mvi   c,povdr           ;ожидание нажатия

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

 19  080E   DB 82       vvod: in    portc