;=======================================================
; Проект 10. Светофор (красный PB0, жёлтый PB1, зелёный PB2)
; ATmega8, 8 МГц
;=======================================================
.include "m8def.inc"

.def    temp  = r16
.def    blink = r17
.def    secs  = r18
.def    d1    = r19
.def    d2    = r20
.def    d3    = r21

.cseg
.org    0x0000
        rjmp    RESET

RESET:
        ldi     temp, low(RAMEND)
        out     SPL, temp
        ldi     temp, high(RAMEND)
        out     SPH, temp
        ldi     temp, 0b00000111        ; три светодиода — выходы
        out     DDRB, temp

MAIN:
        ldi     temp, 0b00000001        ; КРАСНЫЙ
        out     PORTB, temp
        ldi     secs, 10
        rcall   DELAY_N

        ldi     temp, 0b00000011        ; красный + жёлтый
        out     PORTB, temp
        ldi     secs, 2
        rcall   DELAY_N

        ldi     temp, 0b00000100        ; ЗЕЛЁНЫЙ
        out     PORTB, temp
        ldi     secs, 10
        rcall   DELAY_N

        ldi     blink, 6                ; зелёный мигает
GR_BLINK:
        in      temp, PORTB
        ldi     r22, 0b00000100
        eor     temp, r22
        out     PORTB, temp
        rcall   DELAY500
        dec     blink
        brne    GR_BLINK

        ldi     temp, 0b00000010        ; ЖЁЛТЫЙ
        out     PORTB, temp
        ldi     secs, 2
        rcall   DELAY_N
        rjmp    MAIN

;--- задержка secs * 500 мс ---
DELAY_N:
        rcall   DELAY500
        dec     secs
        brne    DELAY_N
        ret

DELAY500:
        ldi     d3, 20
M3L:    ldi     d2, 255
M2L:    ldi     d1, 255
M1L:    dec     d1
        brne    M1L
        dec     d2
        brne    M2L
        dec     d3
        brne    M3L
        ret
