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

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

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

2. Программа на языке ассемблера

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

portb       equ   81h         ;

portc       equ   82h

porcrl      equ   83h

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

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

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

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

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

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

            lxi   sp,900h

            mvi   a,89h

            out   porcrl

begin:      mvi   a,01100000b

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

            mov   d,a        

reset:      mvi   c,povdr     ;ожидание нажатия

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

vvod:       in    portc

            ani   kod  

            jz    reset

            dcr   c

            jnz   vvod

            in    portc

;запоминание нажатой клавиши

            lxi   h,klav

            mov   m,a

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

rept:       mvi   c,povdr

out:        in    portc

            ana   a

            jnz   rept

            dcr   c

            jnz   out

;конец защиты от дребезга

creg:       call  reg         ;вызов подпрограммы режим

            mov   a,m         ;при выполнения подпрограммы режим flag устанавливается в 0 или 1 (flag - специально организованный флаг, сигнализирующий нажатие клавиши 0 - останов, если нажата клавиша 0, то flag устанавливается в 0)

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

            ana   a           ;проверка флага

            jz    begin       ;флаг = 0, переход на начало

rstr:       mov   a,d         ;флаг = 1,выполняется следующий шаг программы - пересылка текущего (начального) состояния индикатора из регистра в аккумулятор

            out   portb       ;вывод на индикацию

            xri   mask        ;смена состояния индикатора на противоположное*

            mov   d,a         ;пересылка из a в d

            mov   b,e         ;пересылка из e в b эталона количества секунд

crcl:       call  zader       ;* вызов подпрограммы задержки на 1 секунду

            dcr   b           ;уменьшение количества секунд на единицу

            jnz   crcl        ;отработана задержка на заданное количество секунд?,нет, продолжаем отработку задержки

            mvi   a,0         ;

            out   portb       ;погашенные индикаторы

            call  zader

            call  zader

            jmp   rstr  (зацикливание)

;***подпрограммы***

;подпрограмма режим()

reg:        lxi   h,klav      ;определение нажатой клавиши

            mov   a,m         ;

            ani   01b         ;нажата кл. 0 ?

            jnz   off         ;да, переход на метку off

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

            lxi   h,flag      ;загрузка в пару h адреса ячейки flag

            mvi   m,1         ;установка флага в 1

            ani   010b        ;нажата кл. 1?

            jnz   fast        ;да, переход на метку fast

            mvi   e,5         ;нет, значит загружаем в эталон количества секунд 5

            jmp   return      ;выход

fast:       mvi   e,2         ;нажата клавиша 1, эталон количества секунд - 2

            jmp   return      ;выход

off:        lxi   h,flag      ;

            mvi   m,0         ;установка флага в 0

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

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