;=======================================================
; Проект 04. Кнопка-триггер: нажал — включил, нажал — выключил
; ATmega8, 8 МГц. Кнопка PD0, светодиод PB0
;=======================================================
.include "m8def.inc"

.def    temp = r16
.def    d1   = r17
.def    d2   = r18

.cseg
.org    0x0000
        rjmp    RESET

RESET:
        ldi     temp, low(RAMEND)
        out     SPL, temp
        ldi     temp, high(RAMEND)
        out     SPH, temp

        ldi     temp, (1<<PB0)
        out     DDRB, temp
        cbi     DDRD, PD0
        sbi     PORTD, PD0              ; подтяжка кнопки

MAIN:
        sbic    PIND, PD0               ; ждём нажатия
        rjmp    MAIN
        rcall   DEBOUNCE
        sbic    PIND, PD0               ; ложное срабатывание?
        rjmp    MAIN

        in      temp, PORTB             ; инвертируем состояние
        ldi     r20, (1<<PB0)
        eor     temp, r20
        out     PORTB, temp

WAIT_REL:
        sbis    PIND, PD0               ; ждём отпускания
        rjmp    WAIT_REL
        rcall   DEBOUNCE
        rjmp    MAIN

DEBOUNCE:
        ldi     d2, 210
G2L:    ldi     d1, 255
G1L:    dec     d1
        brne    G1L
        dec     d2
        brne    G2L
        ret
