.include "tn13def.inc"
;
.def	sreg_temp1	= R2
.def	sreg_temp2	= R3
;
.def	temp 		= R16		
.def	temp1 		= R17		
;
.def 	temp_1      	= R21
.def 	temp_2      	= R22
.def 	temp_3      	= R23

;
.def 	Tcounter0         	= R18
.def 	Tcounter1         	= R19
.def 	Delaycounter      	= R20
; 
;
;----------------------------------------------------------------------
.EQU ee_adres_ir_key 	=16	;адрес в EEPROM первого 
.EQU num_string		=15	;адрес в EEPROM номер следующей записи.
;
;----------------------------------------------------------------------
;
;.def Byte1_adres1      	= R21

;.def Byte3_adres2      	= R26
;
;.def temp_temp	    	= R27
;---------------------------
.dseg
;
ee_paket_byte1:		.byte	1
ee_paket_byte2:		.byte	1
ee_paket_byte3:  		.byte	1
;
;
;flags:			.byte	1 ;0 бит  светодиод тонера не горит
				   ;1 бит  светодиод тонера горит
;
;
;time_loops:		.byte	1
;flag_ram:			.byte	1

;

;
;
;

;
.EQU	Pin_kon1		= 5   ;Выход управляющий 1 контактом
.SET	Port_kon1	= PORTB
;
.EQU	Pin_kon2	= 3	  ;Выход управляющий  2 контактом	
.SET	Port_kon2	= PORTB
;
.EQU	Pin_kon3	= 4	  ;Выход управляющий 3 контактом
.SET	Port_kon3	= PORTB
;

;
.EQU	Pin_JP		= 0B00100000   ;Маска перемычек 	       JP1,
.EQU	Pin_JP1		= 2         ; Вход считывания перемычки JP1.
.SET	PINB_JP		= PINB
;
.EQU	Pin_motorOn		= 1                     ; Вход от принтера мотор вкл
.SET	PINB_motorOn		= PINB
;
.EQU	Pin_led	= 0  ;            вход от кнопки и светодиода.
.SET	PINB_led	= PINB
;-------------------------------------------------------------
; Interrupt service vectors
.cseg
.org 0
;
	rjmp	Reset		;reset
;	rjmp	INT0addrs	;External Interrupt 0
;
;	rjmp	PCI0addrs	;External Interrupt Request 0
;
	reti			;OVF0addrs	;Timer/Counter0 Overflow
;
;	rjmp	ERDYaddrs	;= 0x0004	; EEPROM Ready
	reti
;	rjmp	ACIaddrs		;= 0x0005	; Analog Comparator
	reti
;	rjmp	OC0Aaddrs	;= 0x0006	; Timer/Counter Compare Match A
	reti
;	rjmp	OC0Baddrs	;= 0x0007	; Timer/Counter Compare Match B
	reti
;	rjmp	WDTaddrs	;= 0x0008	; Watchdog Time-out
;	reti
;	rjmp	ADCCaddrs	;= 0x0009	; ADC Conversion Complete
	reti
;
;-----------------------------------------------------------------
;
;
;
; 	Start Программы
;
Reset:
	ldi     temp,low(ramend)
	out     spl,temp     		;Set the 8 bit stack pointer to the top of ram.
;   
	ldi	temp,0b11111000
	out 	DDRB,temp
   
	ldi	temp,0b00000000 ;10
	out	PORTB,temp
;
;Установка регистров прерывания по изменению уровня на входах
;
	ldi	temp,0b00100000
	out 	GIMSK,temp
;   	
	ldi	temp,0b00000100
	out 	PCMSK,temp
;   	
	ldi	temp,0b00110000	; Sleep enable, idle mode on sleep, low ;
	out	MCUCR,temp
;

;
;------------------------------------
	ldi	temp,0b10000000		;comparator disable
	out	ACSR,temp
;-------------------------

	
	



EEprom_read:       ;чтение еепром
;
	sbic EECR,EEPE
	rjmp EEprom_read
;
	out	EEARL, ZL
;
	sbi 	EECR,EERE
; Read data from Data Register
	in 	temp_1,EEDR
;
;	ret

	; еепром проверка флага для  процедуры сброса тонера
	
	ldi	temp,0b00000001  ; загрузим в темп константу

	cpse temp,temp_1 ;    сравним регистры
	rjmp loop_sleep    ;   если равны пропустим эту команду
	rjmp toner_reset   ;   уйдем к процедуре обнуления тонера
 
	
;

	                  
;
;-------------------------
;
main_programm:
;
loop_sleep:
     sei  ; разрешим прерывания

	ldi	temp,0b01011110		; Прерывание от сторожевого таймера
	out 	WDTCR,temp
;
	sleep
;
loop_alarm:
;
	nop
;  
    cli                    ; запретим прерывания
	rcall	eeprom_flagON  ; идем в подпрограмму записи флага еепром
	rcall   stop_pause     ; идем в бесконечный цикл ожидания перезагрузки

;Подпрограмма асинхронного прерывания от WDT
;------------------------------------------------
;
WDTaddrs:

	reti

toner_reset: ; процедура обнуления тонера
nop       
nop        ; здесь будет программа нажатия датчиков для обнуления тонера
nop         
rjmp toner_reset


eeprom_flagON:
    ldi temp, 0b00000001    ; установим флаг окончания тонера для записи в еепром
	mov temp_1, temp


EEprom_write:               ;цикл записи в еепром есче не доделал
;
	sbic 	EECR,EEPE
	rjmp 	EEprom_write
;
	out 	EEARL, ZL
;
	out 	EEDR, temp_1
;
	sbi 	EECR,EEMPE
; Start eeprom write by setting EEPE
	sbi 	EECR,EEPE
;
;
	

ret

stop_pause:   ; цикл ожидания перезагрузки принтера
nop
nop
nop
rjmp stop_pause
