Выбрать главу

          brne D100_1

          dec FreqConst

          brne D100_2

          dec BeepDuration

          brne D100_3

          ret

;================

; проверка приема данных от клавиатуры

GetKey:

          clt; Сброс признака, что была нажата клавиша

          ldi r31,$0Е; Младшая тетрада — запрос в порт, старшая -

          rcall GetKeyAnswer; смещение ответа

          brne KeyPressed

          ldi r31,$3D

          rcall GetKeyAnswer

          brne KeyPressed

          ldi r31,$6B

          rcall GetKeyAnswer

          brne KeyPressed

          ldi r31,$97

          rcall GetKeyAnswer

          brne KeyPressed

          ret

KeyPressed:

          set

          swap r31

          andi r31,$0F

          swap Key

          andi Key,$07

CCFind: inc r31; Поиск, какой конкретно бит установлен

          lsr Key

          brcc CCFind

          breq NoMu1

          clt; Если нажато несколько клавиш, то не нажата ни одна

NoNuclass="underline" mov Key,r31

; Проверка, нажата ли кнопка Ring, если нажата, то будет выдан звуковой сигнал

; без сообщения об этом вызывающей функции

          cpi Key,KeyRiog

          breq Ring

          rjmp NoRing

Ring: sbrc KeyPass1,0; Выбор типа мелодии в зависимости от четности

          rjmp SimpleRing; старей цифры секретного кода

          rcall Delay100

;Проигрываем сложную мелодию (Отговорила роща золотая)

;1 ми 1/8

          ldi FreqConst,Note_mi1

          ldi BeepDuration,2*DURATI0N/Note_mi1

          rcall Beep_Del

;1 ми 1/8

          ldi F reqConst,Note_mi1

          ldi BeepDuration,2*DURATION/Note_mi1

          rcall Beep_Del

; 1 ми 1/8

          ldi FreqConst,Notejnii

          ldi BeepDuration.2*DURATION/Note_mi1

          rcall Beep_Del

;1 фа 3/8

          Idi FreqConst,Note_fa1

          ldi BeepDuration,6*DURATI0N/Note_fa1

          rcall Beep_Del

;1 ми 1/8

          ldi F reqConst,Note_mi1

          ldi BeepDuration,2*DURATION/Note_mi1

          rcall Beep_Del

;1 фа 3/8

          Idi FreqConst,Note_fa1

          ldi BeepDuration,6*DURATI0N/Note_fa1

          rcall Beep_Del

;1 ми 1/16 (1/8)

          ldi FreqCoost,Note_mi1

          ldi BeepDuration,2*DURATI0N/Note_mi1

          rcall Beep_Del

;1 ре 1/8

          ldi FreqConst,Note_re1

          ldi BeepDuration,2*DURATlON/Note_re1

          rcall Beep_Del

;1 до 1/8

          ldi FreqConst,Note_do1

          ldi BeepDuration,2*DURATION/Note_do1

          rcall Beep_Del

;1 си 1/4

          ldi FreqConst,Note_ci0

          ldi BeepOuration,4*DURATION/Note_ci0

          rcall Beep_Del

; 1 фа 3/8

          ldi FreqConst.Note_fa1

          ldi BeepDuration,6*DIRATION/Note_fa1

          rcall Beep_Del

;1 Фа 1/8

          ldi FreqConst,Note_fa1

          ldi BeepDuration,2*DURATION/Note_fa1

          rcall Beep_Del

; 1 ми 3/8

          ldi FreqConst.Note_mi1

          ldi BeepDuration,6*DURATIOIN/Note_mi1

          rcall Beep_Del

;1 ми 1/6

          ldi FreqConst.Note.mil

          ldi BeepDoration. 3*DURATI0N/Note_mi1

          rcall Beep_Del

; 1 ми 1/8

          ldi FreqConst.Note_mi1

          ldi BeepDuration,2*DURATIOIN/Note_mi1

          rcall Beep_Del

;1 Фа 1/8

          ldi FreqConst,Note_fa1

          ldi BeepDuration,2*DURATION/Note_fa1

          rcall Beep_Del

;1 си 1/8

          ldi FreqConst,Note_ci0

          ldi BeepOuration,2*DURATION/Note_ci0

          rcall Beep_Del

;1 ре 1/8

          ldi FreqConst,Note_re1

          ldi BeepDuration,2*DURATlON/Note_re1

          rcall Beep_Del

;1 Фа 1/8

         ldi FreqConst,Note_fa1

         ldi BeepDuration,2*DURATION/Note_fa1

         rcall Beep_Del

; 1 ми 5/8

         ldi FreqConst.Note_mi1

         ldi BeepDuration,10*DURATIOIN/Note_mi1

         rcall Beep_Del

         rjmp EndRing

SimpleRing:; Проигрываем простую мелодию