

.include "tn2313def.inc"  ;присоединение файла описаний
.list                 ;включение листинга

.dseg

cegment:   .byte 4

.cseg
.org 0

;---Прерывания---


rjmp RESET                  ;  0x000 RESET           Внешний сброс, сброс при включении питания, сброс по сробатыванию охранного таймера
nop                         ;  0x001 INT0            Внешний запрос на прерывание по входу INT0
nop                         ;  0x002 INT1            Внешний запрос на прерывание по входу INT1
nop                         ;  0x003 TIMER1 CAPT     Прерывание по захвату таймера/счетчика 1
nop                         ;  0x004 TIMER1 COMPA    Прерывание по совпадению таймера/счетчика 1.Канал А
nop                         ;  0x005 TIMER1 OVF      Прерывание по переполнению таймера/счетчика 1
nop                         ;  0x006 TIMER0 OVF      Прерывание по переполнению таймера/счетчика 0
nop                         ;  0x007 USART0,RX       USART0, прием завершен
nop                         ;  0x008 USART0,UDRE     USART0 буфер данных пуст
nop                         ;  0x009 USART0,TX       USART0, передача завершена
nop                         ;  0x00A ANALOG COMP     Прерывание от аналогового компаратора
nop                         ;  0x00B PCINT           Прерывание по изменению на любом из выводов
nop                         ;  0x00C TIMER1 COMPB    Прерывание по совпадению таймера/счетчика 1.Канал В
nop                         ;  0x00D TIMER0 COMPA    Прерывание по совпадению таймера/счетчика 0.Канал В
nop                         ;  0x00E TIMER0 COMPB    Прерывание по совпадению таймера/счетчика 0.Канал А
nop                         ;  0x00F USI START       Прерывание по USI. Готовность к старту 
nop                         ;  0x010 USI OVERFLOW    Прерывание по USI. Переполнение
nop                         ;  0x011 EE READY        Готовность EEPROM
nop                         ;  0x012 WDT OVERFLOW    Переполнение охранного таймера

;---------------------------------

RESET:

sei ;глобальное разрешение прерываний

;---Инициализация стека---

ldi r16,low(RamEnd)       
out SPL,r16

;---Инициализация портов---

ldi r16,0b11111111
out DDRB,r16

ldi r16,0b11111111
out DDRD,r16

;---Загрузка начального значения---

ldi r16,10
sts cegment,r16

ldi r16,10
sts cegment+1,r16

ldi r16,10
sts cegment+2,r16

ldi r16,10
sts cegment+3,r16



;---Динамическая индикация---

Display:


              lds r16,cegment
			  rcall Decoder       
              cbi PortB,3
			  out PortD,r16      
 			  sbi PortB,0
			  rcall delay      
              
              lds r16,cegment+1
			  rcall Decoder       
              cbi PortB,0
			  out PortD,r16      
 			  sbi PortB,1
			  rcall delay 

			  lds r16,cegment+2
			  rcall Decoder       
              cbi PortB,1
			  out PortD,r16      
 			  sbi PortB,2
			  rcall delay 


			  lds r16,cegment+3  
			  rcall Decoder       
              cbi PortB,2
			  out PortD,r16      
 			  sbi PortB,3
			  rcall delay 



              rcall Display

;---Десодер---

;преобразование двоичного числа
;в код 7-сегментного индикатора
Decoder:

              ldi ZL,Low(DcMatrix*2)   ;инициализация массива
              ldi ZH,High(DcMatrix*2)

              ldi r17,0             ;прибавление переменной
              add ZL,r16            ;к 0-му адресу массива
              adc ZH,r17

              lpm                     ;загрузка значения
              mov r16,r0
 ret             
;---Массив---

;массив - таблица истинности декодера
DcMatrix:
        ;     hgfedcba    hgfedcba
              .db 0b11000000, 0b11111001	;0,1
              .db 0b10100100, 0b10110000	;2,3
              .db 0b10011001, 0b10010010	;4,5
              .db 0b10000010, 0b11111000	;6,7
              .db 0b10000000, 0b10010000	;8,9
			  .db 0b11111111, 0b10111111    ;пусто,-

;---Задержка---
Delay:
              
              ldi r16,0
              ldi r17,10


d11:          dec r16
              brne d11
              dec r17
              brne d11
			  
ret

