.include "e:\asm\edu3\m8def.inc"

.def temp  = r16
.def temp1 = r17
.def temp2 = r18

.cseg 
.org 0

rjmp reset
rjmp int_0
.org 9
rjmp timer_0_ovf

reset:
     ldi temp,low(RAMEND)
     out spl,temp
     ldi temp,high(RAMEND)
     out sph,temp
     
     ldi temp,(1<<int0)             ;разрешение прерываня
     out gicr,temp                  ;по int0 
     ldi temp,(0<<ISC01)|(1<<ISC00) ;прерывание по любому 
     out mcucr,temp                 ;изменению
	 	 	 
     ser temp
     out ddrb,temp        ;порт b выход, к нему подключен сдвоенный 
	                  ;7-разрядный катодный индикатор
     ldi temp,0b00000011  ;0,1 нога порта c выход, подключены разряды 
     out ddrc,temp        ;индикатора
	 
     sei

inf: rjmp inf             ;ожидание внешнего прерывания

int_0: 
      sbic pind,2        ;проверка кнопки
      rjmp off           ;если лог 1, то выключение 
      rcall init_tim     ;инициализация тайимера
      rcall init         ;инициализация матрици
      reti
	  
timer_0_ovf:
	    lpm temp,z+
	    cpi temp,0b01101111 ;проверка с девяткой
	    breq init           ;инициализурую начало матрици
		    

	    sei       ;разрешение прерывания по срабатыванию таймера
	    rjmp inf2 ;переход на бесконечный вывод

inf2:
    out portb,temp
    ;delay             ;возможность регулировки частоты 
    out portb,temp1
    ;delay
    rjmp inf2
             
init_tim:
	 ldi temp,(1<<toie0)                      ;включаем прерывание по таймеру
	 out timsk,temp         
	 ldi temp,(1<<cs02)|(1<<cs01)|(0<<cs00)   ;от внешнего генератора
         out tccr0,temp
	 ret                                      ;возврат 

init:
     ldi zl,low(matrix*2)
     ldi zh,high(matrix*2)
     ret                                          

off:
    clr temp
    out portb,temp
    ldi temp,(1<<toie0)  ;отключение прерывания по таймеру
    out timsk,temp
    reti
	  
matrix:
          ;      gfedcba    gfedcba
	  .db 0b00111111,0b00000110 ;0,1
	  .db 0b01011011,0b01001111 ;2,3
	  .db 0b01100110,0b01101101 ;4,5
	  .db 0b01111101,0b00000111 ;6,7
	  .db 0b01111111,0b01101111 ;8,9 