
; сформирован градус цельсия  01h

;***************************************************************************
.include "m8def.inc"

.def	min			=	r1	;минуты 0-59
.def	hour		=	r2	;часы 0-23
.def	day			=	r3	;день недели 1-7
.def 	t_ud		=	r4
.def	korr		=	r5
.def	cnt			=	r6	;счетчик при выводе знака в лсд для мерцания
.def	day2		=	r7	;день недели 1-7 для уст темп по дням и времени
.def	temp_e_old	=	r8
.def	koord		=	r9
.def	koord_old	=	r10

.def	t1sreg		=	r13
.def	buf			=	R16		;General use working register buf for calling subroutines
.def	return		=	r16	;return value from subroutines
.def	temp		=	r17
.def	dosek		=	r18	;пересчет до секунды
.def	sek			=	r19	;секунды 0-59
.def	flags		=	r20
.def	index 		=	r21 	;координаты ветвей
.def	temp_e		=	r22

;-----------------------------
.def	xx			=	r16		;multiplicand x
.def	yy			=	r17		;multiplier		y x*y
.def	m8uL		=	r17		;result Low byte
.def	m8uH		=	r30		;result High byte
.def	mcnt8u		=	r31		;loop counter
;--------------------------------
;--------------------------------
.def	wreg		=R23
.def 	duration	=R24
.def  	lbyte		=R25
.def	hbyte		=R26
.def	ds_command	=R27
.def	wr_counter	=R28
;------------------------------
.equ	LCD_RS	= 1
.equ	LCD_RW	= 2
.equ	LCD_E	= 3  

.equ	gist	=1
.equ	line1   =0x80		;строка 1 LCD
.equ	line2   =0xC0		;строка 2 LCD 
;-------------------------------------------------------------

;  sbrc  sbr
;r20.0  $1  	; 1- eeprom  уже считан \0- можно ситывать
;r20.1  $2  	; 1- обойти заполнение temp_e_old  0-норма
;r20.2  $4  	; 1- прошел час и день можно считать темпер из eeprom 0- читать нельзя
;r20.3  $8  	; 1- было включение 0 опустились ниже гистерезиса можно включать
;r20.4  $10 	; 1- питание пропало 0 -питание норма
;r20.5  $20 	; 1- обход 0- можно однократность temp_e из lbyte  в режиме ТЕРМОСТАТ
;r20.6  $40	    ; 1- запрет коррекции 0- можно коррекцию (нужен если коррекция в минус)
;r20.7  $80 	; 

;***** Code
.cseg
 rjmp RESET ; Reset Handler
 reti ;EXT_INT0 ; IRQ0 Handler
 reti ;EXT_INT1 ; IRQ1 Handler
 reti ;TIM2_COMP ; Timer2 Compare Handler
 reti ;TIM2_OVF ; Timer2 Overflow Handler
 reti ;TIM1_CAPT ; Timer1 Capture Handler
 rjmp t1 ;TIM1_COMPA ; Timer1 CompareA Handler
 reti ;TIM1_COMPB ; Timer1 CompareB Handler
 reti ;TIM1_OVF ; Timer1 Overflow Handler
 reti ;TIM0_OVF ; Timer0 Overflow Handler
 reti ;SPI_STC ; SPI Transfer Complete Handler
 reti ;USART_RXC ; USART RX Complete Handler
 reti ;USART_UDRE ; UDR Empty Handler
 reti ;USART_TXC ; USART TX Complete Handler
 reti ;ADC ; ADC Conversion Complete Handler
 reti ;EE_RDY ; EEPROM Ready Handler
 reti ;ANA_COMP ; Analog Comparator Handler
 reti ;TWSI ; Two-wire Serial Interface 
 reti ;SPM_RDY ; Store Program Memory Ready 

RESET:
	ldi r16,high(RAMEND); Main program start
	out SPH,r16 ; Set Stack Pointer to top of RAM
	ldi r16,low(RAMEND)
	out SPL,r16
;-----------------------------------------------------------------------
;настроим timer1 по совпадению делит до 10 Гц 0,1 сек
	ldi R16,0B00010000  	; разр прерывания  Т1 по совпадению
	out timsk,r16			; прерывание по совпадению t1
	clr R16
	out tccr1a,r16		
	ldi R16,0B00001011 		; очистка по совпадению	предделитель  таймера-1 64
	out tccr1b,r16		
; значения для совпадения  (6250)
	ldi r30,$18
	ldi r31,$6A
	out ocr1ah,r30
	out ocr1al,r31
;настроим линии порта C
	ldi R16,0B11000000 		; 5-0 -входы кнопок 
	out DDRC,R16	
	ldi R16,0B00111111
	out portC,r16        	; вкл подтяг резиcтор 


;настроим линии порта b
	ldi R16,0B11101110 		; 
	out DDRB,R16	
	ldi R16,0B11101110
	out portB,r16        	; вкл подтяг резиcтор 
;настроим WDT на 2 сек
	ldi r16,0b00011000
	out wdtcr,r16
	ldi r16,0b00001111
	out wdtcr,r16
; начальные значения
; считаем korr по адресу 00 eeprom
	clr buf				; в buf адрес ячейки для чтения 
	rcall r_eeprom		; прочтем, значение в buf
	mov korr,buf	
	ldi buf,168	;10101000 1_40
	cp korr,buf
	brlo jj
	clr korr ;###
jj:

	ldi dosek,10
	clr hour
	clr min
	clr sek
	ldi buf,1
	mov day,buf
	mov day2,buf
	clr index
	clr cnt
	clr flags
	ldi temp_e,5
	sbr flags,4	; нач счит eeprom
	rcall	LCD_init
;загрузим символ градус цельсия
		ldi	buf,$48	; пишем в cgram с адреса 0х01
		rcall	lcd_command
		ldi zl,low(strel*2)
		ldi zh,high(strel*2)			
		ldi r24,8
cgram:
		lpm
		mov buf,r0
		rcall	LCD_putchar
		adiw	ZL,1
		dec r24
		brne cgram
; градус цельсия загружен
	sei
;=================================================================================
;заполним озу $70 строкой
 	ldi	ZH,high(2*time)	; эти значения определять перед вызовом пп
	ldi	ZL,low(2*time)	;
	ldi	YH,0
	ldi	YL,$70
	rcall in_ram	
;заполним озу $80 строкой
 	ldi	ZH,high(2*nastr1)	; эти значения определять перед вызовом пп
	ldi	ZL,low(2*nastr1)	;
	ldi	YH,0
	ldi	YL,$80
	rcall in_ram
;заполним озу $90 строкой
 	ldi	ZH,high(2*nastr2)	; эти значения определять перед вызовом пп
	ldi	ZL,low(2*nastr2)	;
	ldi	YH,0
	ldi	YL,$90
	rcall in_ram			
;заполним озу $A0 строкой
 	ldi	ZH,high(2*konf1)	; эти значения определять перед вызовом пп
	ldi	ZL,low(2*konf1)	;
	ldi	YH,0
	ldi	YL,$A0
	rcall in_ram
;заполним озу $C0 строкой
 	ldi	ZH,high(2*ts)	; эти значения определять перед вызовом пп
	ldi	ZL,low(2*ts)	;
	ldi	YH,0
	ldi	YL,$C0
	rcall in_ram
loop:	rjmp loop	
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
; ПРЕРЫВАНИЕ КАЖДЫЕ 0,1 СЕК
T1:		
	in t1sreg,sreg
	push buf
	push r30
	push r31
	push r28
	push r29
	wdr
;-------------------------------------------
KN:
; секция отработки нажатий кнопок считаем байт порта С
	in buf,pinC
	andi buf,0b00111111
	cpi buf,0b00111111	; проверим кнопки нажаты или нет
	brne y_kn 
	rjmp no_kn	; кнопки не нажаты
y_kn:
; длительность нажатия кнопки
	dec t_ud
	breq ud_OK
	sbi portb,1		; откл beep 
	Rjmp beep_on		;	
ud_OK:
	cbi portb,1	; вкл beep 
	ldi r31,2	
	mov t_ud,r31
; beep кнопкb отработан анализируем кнопку
	cpi buf,0b00001111	; это <> ТЕРМОСТАТ
	brne no_EF
	tst index
	breq y_ind_0
	rjmp beep_on
y_ind_0:
	ldi index,12	; режим термостат
	rjmp beep_on
no_EF:
; проверим кнопку 1
	cpi buf,0b00111110	; это Escape
	brne no_kn0
;+++++++++++++++++++++++++++++++++++++++++++++
	sbr flags,$4	; ускорим считывание темп из  eeprom (а то только при переходе часа)
	cbr flags,$20   ; можно temp_e<lbyte  в ТЕРМОСТАТЕ
	cpi index,15
	brlo men_00f
	cbr flags,$01	;	повторный считывание ееprom разрешим
	rcall koord_write
	swap index
	lsr index	;преобразуем
	andi index,0b00000111
	rjmp beep_on
men_00f:
;проверим если index=13 ото была коррекция запишем значение в eeprom
	cpi index,8
	brlo no_ind_8
;-------------	
	clr buf
	out eearl,buf	; адрес ячейки для записи
	out eearh,buf	; адрес ячейки для записи
	out eedr,korr		; в buf значение для записи
; запись в EEPROM
	rcall w_eeprom
	nop
no_ind_8:
	clr index
	rjmp beep_on
no_kn0:
;+++++++++++++++++++++++++++++++++++++++++++++
	cpi buf,0b00111101	;это F вход
	brne no_kn1
;орг предыдущего значения темп
	cpi index,15
	brlo li
	mov buf,koord_old
	sbr flags,2
	rcall read_to_pred	
	rjmp beep_on
li:
	tst index
	breq index_1	; если 0 сделаем index=1
; если уже 1 сделаем 00х 00000 где х1-7
	cpi index,$08	; проверим меньше 8
	brlo men_08		; если меньше
	rjmp beep_on
men_08:
	swap index
	lsl index	;преобразуем
	rjmp beep_on
index_1:
	ldi index,1
	rjmp beep_on
;+++++++++++++++++++++++++++++++++++++++++++++
no_kn1:
	cpi buf,0b00111011	;вверх
	breq rrr
	rjmp no_kn2
rrr:
	tst index
	breq no_0zz	;beep_on
;----------------------
; проверим index если больше 12 в конфиге изменим пок темп
	cpi index,12;15
	brlo mense_12
	inc temp_e
	cpi temp_e,36
	brlo men_36
	ldi temp_e,5
men_36:
	rjmp beep_on
mense_12:
	cpi index,8		;что бы работал и при index1-7,8
	brsh up_88
	inc day2
	ldi buf,8
	cp day2,buf
	brne no_w
	ldi buf,1
	mov day2,buf
no_w:
	mov index,day2
	rjmp beep_on
up_88:
	cpi index,8		;
	brne indno888
	inc day
	ldi buf,8
	cp day,buf
	brne no_0zz
	ldi buf,1
	mov day,buf
	rjmp beep_on
indno888:
	cpi index,9
	brne indno999
	inc hour
	ldi buf,24
	cp hour,buf
	brne no_0zz
	clr hour
	rjmp beep_on
indno999:
	cpi index,10
	brne indno100
	inc min
	ldi buf,60
	cp min,buf
	brne no_0zz
	clr min
	rjmp beep_on
indno100:
	cpi index,11	;коррекция
	brne no_0zz
;-------------
	rol korr
	brcc no_c	; сброшен?	проверим бит 7 в С если =1 то в  минусе
	set
	rjmp yes_c
no_c:
	clt
yes_c:
	lsr korr

	inc korr
	ldi buf,30
	cp korr,buf
	brlo vost_korr
	clr korr
	clt	;	сбросим признак минуса
no_0zz:
	rjmp beep_on
vost_korr:
	brtc no_0zz	; восстановим признак знака korr
	lsl korr	;	установим 7 бит
	sec
	ror korr
	rjmp beep_on

;+++++++++++++++++++++++++++++++++++++++++++++
no_kn2:
	cpi buf,0b00110111	; вниз
	breq qq1
	rjmp no_kn3
qq1:
	tst index
	breq no_0zz	;beep_on
;----------------------
; проверим index если больше 12 в конфиге изменим пок темп
	cpi index,12;15
	brlo mense_122
	dec temp_e
	cpi temp_e,5
	brsh men_366
	ldi temp_e,35
men_366:
	rjmp beep_on
mense_122:

	cpi index,8		;что бы работал и при index1-7,8
	brsh dd_88
	dec day2
	tst day2
	brne no_ww
	ldi buf,7
	mov day2,buf
no_ww:
	mov index,day2
	rjmp beep_on
dd_88:

	cpi index,8		; 
	brne indno8d
	dec day
	ldi buf,0
	cp day,buf
	brne no_0zz
	ldi buf,7
	mov day,buf
	rjmp beep_on
indno8d:
	cpi index,9
	brne indno9d
	tst hour
	brne na_dec_hour
	ldi buf,23
	mov hour,buf
	rjmp beep_on
na_dec_hour:
	dec hour
	rjmp beep_on
indno9d:
	cpi index,10
	brne indno10d
	tst min
	brne na_dec_min
	ldi buf,59
	mov min,buf
	rjmp beep_on
na_dec_min:
	dec min
	nop
	nop
	nop
	rjmp beep_on

indno10d:
	cpi index,11	;коррекция
	brne no_0z

;-------------
	rol korr
	brcc no_cc	; сброшен?	проверим бит 7 в С если =1 то в  минусе
	set
	rjmp yes_cc
no_cc:
	clt
yes_cc:
	lsr korr
	tst korr
	brne na_dec_korr
	ldi buf,29
	mov korr,buf
	lsl korr	;	установим 7 бит
	sec
	ror korr	
	rjmp beep_on
na_dec_korr:
	dec korr
	brtc no_0zzz	; восстановим признак знака korr
	lsl korr	;	установим 7 бит
	sec
	ror korr		;	установим 7 бит
no_0zzz:
	rjmp beep_on
;+++++++++++++++++++++++++++++++++++++++++++++
no_kn3:
	cpi buf,0b00101111	;лево
	brne no_kn4
;проверим мы в термостате?
	cpi index,12
	breq no_kn4
;проверим на индекс 8 9 10
	cpi index,11
	brne i11
	ldi index,10
	rjmp beep_on
i11:
	cpi index,10
	brne i10
	ldi index,9
	rjmp beep_on
i10:
	cpi index,9
	brne i9
	ldi index,8
	rjmp beep_on
i9:
	cpi index,8
	brne i8
	ldi index,11
	rjmp beep_on
i8:
;-------------
	tst index
	breq no_0z
	cpi index,15
	brlo men_f
;--------пров может уже ноль  тогда или 7 или х_23 
	cbr flags,$01	;	повторный считывание ееprom разрешим

	rcall koord_write

	mov buf,index
	andi buf,0b00011111
	brne ne_nol
	andi index,0b11100000
	ori index, 0b00010111 ;x_23
	rjmp beep_on
ne_nol:
	dec index	;001_10111 1_23
	rjmp beep_on
men_f:
	dec index	;01-07
	brne no_0z
	ldi index,7
no_0z:
	rjmp beep_on
;+++++++++++++++++++++++++++++++++++++++++++++
no_kn4:
	cpi buf,0b00011111	; право кнопка 5
	brne no_kn5	
;проверим мы в термостате?
	cpi index,12
	breq no_kn5	
;проверим на индекс 8 9 10
	cpi index,8
	brne i88
	ldi index,9
	rjmp beep_on
i88:
	cpi index,9
	brne i99
	ldi index,10
	rjmp beep_on
i99:
	cpi index,10
	brne i100
	ldi index,11
	rjmp beep_on
i100:
	cpi index,11
	brne i111
	ldi index,8
	rjmp beep_on
i111:
;--------пров может уже 7 или х_23 	тогда 1 или х_00
	tst index
	breq no_0z
	cpi index,$0f	;8
	brlo men_58
	cbr flags,$01	;	повторный считывание ееprom разрешим
	rcall koord_write
	mov buf,index
	andi buf,0b00011111
	cpi buf,23
	brne ne_23
	andi index,0b11100000
	rjmp beep_on
ne_23:
	inc index
	rjmp beep_on
	;-----------
men_58:
	inc index
	cpi index,8
	brlo mmen_08
	ldi index,1
mmen_08:
	rjmp beep_on
no_kn5:
;проверим может настройка часов
	cpi buf,0b00110011	;  кнопка 2 +3
	brne no_0z	; нет выход
	sbr flags,4	; чтобы после уст часов считать тек темп из eeprom
	tst index
	brne no_0z	
;да 2+3 при index=0
	ldi index,8
	rjmp beep_on
;-------------------------------------------
no_kn:
	ldi r31,2	
	mov t_ud,r31
	sbi portB,1		; откл бип
;ЗДЕСЬ ИНДЕКС ГОТОВ ПРОДОЛЖЕНИЕ ВЫПОЛНЕНИЯ ПРЕРЫВАНИЯ
beep_on:
	dec dosek 
	brne no_dosek 
	ldi dosek,10
	inc sek			;секунды
	cpi sek,60
	brne no_sek
	clr sek
	inc min			;минуты
	ldi buf,60
	cp min, buf
	brne no_min
	clr min
	inc hour		;часы
	cpi index,12
	breq no_set
	sbr flags,4	;можно считать при смене часа значение темп из eeprom
no_set:
	ldi buf,24
	cp hour, buf
	brne no_hour
	clr hour
	cbr flags,$40	;сброс признак обход корр в этот день
	inc day			; дни недели
	ldi buf,8
	cp day,buf
	brne no_day
	clr day
	inc day
no_day:
no_hour:
no_min:
no_sek:
no_dosek:
	sbrs flags,2	; однократное считывание eeprom
	rjmp ell
	cbr flags,4
;сформируем из дня и часа координату для счит eeprom
	mov xx, day
	ldi yy,24
;***** Code
mpy8u3:	
	clr	m8uH		;clear result High byte
	ldi	mcnt8u,8	;init loop counter
	lsr	yy		;rotate multiplier
m8u_13:
	brcc	m8u_23		;carry set 
	add 	m8uH,xx	;   add multiplicand to result High byte
m8u_23:
	ror	m8uH		;rotate right result High byte
	ror	m8uL		;rotate right result L byte and multiplier
	dec	mcnt8u		;decrement loop counter
	brne	m8u_13		;if not done, loop more
;поместим в koord ответ xx*yy 1-7*24
    mov buf,m8uL	;в buf координата 1-7*24+0-23
	add buf,hour
	rcall r_eeprom

	cpi buf,36
	brlo m24
	ldi buf,5
m24:
	cpi buf,5
	brsh m34
	ldi buf,5
m34:
	mov temp_e,buf
ell:
; введем коррекцию каждые сутки в 00:00:30 или +korr или -korr
	tst hour
	brne no_korrek
	tst min
	brne no_korrek	
	cpi sek,30
	brne no_korrek	
;старший бит korr признак + или -
; по биту определим была коррекция в этот час или нет если была обход
	sbrc flags,6
	rjmp no_korrek
	sbr flags,$40	;уст признак обход корр в этот день
	mov buf,korr
	rol buf
	brcc na_add
	lsr buf
	sub sek,buf
	rjmp no_korrek
na_add:
	lsr buf
	add sek,buf
no_korrek:
	tst index
	breq norm_rab
na_reti:
	cpi index,12
	breq na_termostat

	cpi index,8
	brlo na_konf
	cpi index,15
	brsh na_konf
; СЕКЦИЯ НАСТРОЙКА ЧАСОВ===========
;вывод строк $80  и $90 озу в LCD 
	rcall time_num2
	clr r31
	ldi r30,$90
	rcall in_lcd2
	ldi r30,$80
	rcall in_lcd1
	rjmp na_reti2
norm_rab:
; СЕКЦИЯ НОРМАЛЬНАЯ РАБОТА=====================================================================================================================================================
na_termostat:
;	in buf,ddrb
;	push buf
	rcall ds
;	pop buf
;	out ddrb,buf
;перекодирования показаний часов мин сек в десятичное вывод в буфер  $70
	cpi index,12
	breq obh_1_sek
	cpi dosek,5			;организация вывода каждую 1 сек кроме режима термостат
	brne na_reti2
obh_1_sek:
	rcall time_num
;вывод строк $60  и $70 озу в LCD 
	clr r31
	ldi r30,$70
	rcall in_lcd2
;если мы в термостате выведем строку $0C
	cpi index,12
	breq sett_0C
	ldi r30,$60
	rjmp c
sett_0C:
	ldi r30,$C0
c:
	rcall in_lcd1
	rjmp na_reti2
na_konf:
; СЕКЦИЯ КОНФИГУРАЦИЯ===========
;организуем однократность считывания eeprom, новое считывание при нажатии лево право
	cpi index,15
	brlo j1
	sbrc flags,0
	rjmp j1
	sbr flags,$01	;	повторный считывание ееprom пока запретим
	rcall koord_read
j1:
	rcall time_num3
	clr r31
	ldi r30,$b0
	rcall in_lcd2
	ldi r30,$a0
	rcall in_lcd1
;	rjmp na_reti2


;====================================
na_reti2:
	pop r29
	pop r28
	pop r31
	pop r30
	pop buf
	out sreg,t1sreg
	RETI
;===================================================
; вывод строк $70 озу в LCD  читаем по адр Z пишем  в buf
; вывод строк $B0  озу в LCD  читаем по адр Z пишем  в buf
in_lcd2:	
	ldi	buf, line2 ; 
	rcall	LCD_command
elc:
	inc cnt
; выводим по счетчику CNT
	mov buf,cnt
	cpi buf,17
	breq renc
	ld buf,z+
;-----------
	cpi index,8
	brsh up_8
	tst index
	breq na_put	
	ldi temp,1
	cp cnt,temp
	breq blink
	ldi temp,2
	cp cnt,temp
	breq blink
up_8:
	cpi index,8
	brne prov_i_9	
	ldi temp,1
	cp cnt,temp
	breq blink
	ldi temp,2
	cp cnt,temp
	breq blink
prov_i_9:
	cpi index,9
	brne prov_i_10	
	ldi temp,4
	cp cnt,temp
	breq blink
	ldi temp,5
	cp cnt,temp
	breq blink
prov_i_10:
	cpi index,10
	brne prov_i_11
	ldi temp,7
	cp cnt,temp
	breq blink
	ldi temp,8
	cp cnt,temp
	breq blink
prov_i_11:
	cpi index,11
	brne na_up11
	ldi temp,10
	cp cnt,temp
	breq blink
	ldi temp,11
	cp cnt,temp
	breq blink

na_up11:
	cpi index,15	; индекс в настройки темпер по времени те более 11
	brlo na_put
	ldi temp,12
	cp cnt,temp
	breq blink
	ldi temp,13
	cp cnt,temp
	breq blink
	rjmp na_put

blink:
	cpi dosek,5
	brlo na_put
	ldi buf,$20
na_put:
	rcall	LCD_putchar
	rjmp	elc
renc:	; строка из пам программ ПЕРЕПИСАНа в озу
	clr cnt
	ret
;-----------------
in_lcd1:
	ldi	buf, line1 ; 
	rcall	LCD_command
elc1:
; выводим по счетчику CNT
	inc cnt
	mov buf,cnt
	cpi buf,17
	breq renc1
	ld buf,z+
	rcall	LCD_putchar
	rjmp	elc1
renc1:	; строка из пам программ ПЕРЕПИСАНа в озу
	clr cnt
	ret
;======================================================================================
time_num:  	; подпрограмма перекодирования показаний часов мин сек в десятичное вывод в буфер ;70
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	mov buf,sek
	add zl,buf
	adc zh,r0
	lpm					
	mov buf,r0
; номер секунд в buf надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $77,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $76,buf
; теперь минуты
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	mov buf,min
	add zl,buf
	adc zh,r0
	lpm					
	mov buf,r0
; номер секунд в buf надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $74,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $73,buf
; теперь часы
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	mov buf,hour
	add zl,buf
	adc zh,r0
	lpm					
	mov buf,r0
; номер секунд в buf надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $71,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $70,buf

; теперь температуру из DS
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	mov buf,lbyte
	add zl,buf
	adc zh,r0
	lpm					
	mov buf,r0
; температуру надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $7c,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение

	breq uberem_0
	ori buf,$30
	rjmp jumpp 
uberem_0:
	ldi buf,' '
	sts $7b,buf ;6b
jumpp:
	sts $7b,buf ;6b
	ldi buf,1;'C'
	sts $7f,buf
;проверим может мы в режиме термостат
	cpi index,12
	brne no_tstat2
; мы в термостате
	sbrs flags,5
	mov temp_e,lbyte
	sbr flags,$20	;однократность при ТЕРМОСТАТ
no_tstat2:
; теперь температуру из eeprom
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	mov buf,temp_e
	add zl,buf
	adc zh,r0
	lpm					
	mov buf,r0
; температуру надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $6e,buf		;младшее зн сек
	sts $Ce,buf		;младшее зн сек для термостата
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	breq uberem_00	;уберем нули в ст разряде
	ori buf,$30
	rjmp jumpp0
uberem_00:
	ldi buf,' '
jumpp0:
	sts $6d,buf ;6b
	sts $Cd,buf ; для термостата
	rjmp juq
	ori buf,$30
	sts $6d,buf ;6b
	sts $Cd,buf ; для термостата
juq:
	ldi buf,1;'C'
	sts $6f,buf
	sts $CF,buf ; для термостата

;проверим может мы в режиме термостат тогда день недели обойдем
	cpi index,12
	brne no_tstat3
	ret
;---------
no_tstat3:
; строку день недели
	ldi	YH,0
	ldi	YL,$60
	mov buf,day
	cpi buf,1
	brne no_pn
	ldi	zh,High(2*pn)
	ldi	zl,Low(2*pn)	
	rjmp in_ramm
no_pn:
	cpi buf,2
	brne no_vt
	ldi	zh,High(2*vt)
	ldi	zl,Low(2*vt)	
	rjmp in_ramm
no_vt:
	cpi buf,3
	brne no_sr
	ldi	zh,High(2*sr)
	ldi	zl,Low(2*sr)	
	rjmp in_ramm
no_sr:
	cpi buf,4
	brne no_ct
	ldi	zh,High(2*ct)
	ldi	zl,Low(2*ct)	
	rjmp in_ramm
no_ct:
	cpi buf,5
	brne no_pt
	ldi	zh,High(2*pt)
	ldi	zl,Low(2*pt)	
	rjmp in_ramm
no_pt:
	cpi buf,6
	brne no_sb
	ldi	zh,High(2*sb)
	ldi	zl,Low(2*sb)	
	rjmp in_ramm
no_sb:
	ldi	zh,High(2*vs)
	ldi	zl,Low(2*vs)
in_ramm:		
rcall in_ram

	ret

;для настройки часов
time_num2:  	; подпрограмма перекодирования показаний часов мин сек в десятичное вывод в буфер ;90 
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
; проверим бит 7 korr и выведем знак + или - в буфер LCD
	push korr
	rol korr
	brcc no_c2	; сброшен?	проверим бит 7 в С если =1 то в  минусе
	ldi buf,$2D
	sts $98,buf	;знак - 2D
	rjmp yes_c2
no_c2:
	ldi buf,$2B
	sts $98,buf		; знак + $2B
yes_c2:
	lsr korr
	mov buf,korr
	pop korr


	add zl,buf
	adc zh,r0
	lpm			
	mov buf,r0
; номер коррекции секунд в buf надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $9a,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $99,buf
; теперь минуты
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	mov buf,min
	add zl,buf
	adc zh,r0
	lpm					
	mov buf,r0
; номер секунд в buf надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $97,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $96,buf
; теперь часы
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	mov buf,hour
	add zl,buf
	adc zh,r0
	lpm					
	mov buf,r0
; номер секунд в buf надо разбить на тетрады и записать каждую  в озу
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $94,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $93,buf
;---------
; строку день недели
	ldi	YH,0
	ldi	YL,$90
	mov buf,day
	cpi buf,1
	brne no_pn2
	ldi	zh,High(2*w11)
	ldi	zl,Low(2*w11)	
	rjmp in_ramm2
no_pn2:
	cpi buf,2
	brne no_vt2
	ldi	zh,High(2*w12)
	ldi	zl,Low(2*w12)	
	rjmp in_ramm2
no_vt2:
	cpi buf,3
	brne no_sr2
	ldi	zh,High(2*w13)
	ldi	zl,Low(2*w13)	
	rjmp in_ramm
no_sr2:
	cpi buf,4
	brne no_ct2
	ldi	zh,High(2*w14)
	ldi	zl,Low(2*w14)	
	rjmp in_ramm2
no_ct2:
	cpi buf,5
	brne no_pt2
	ldi	zh,High(2*w15)
	ldi	zl,Low(2*w15)	
	rjmp in_ramm2
no_pt2:
	cpi buf,6
	brne no_sb2
	ldi	zh,High(2*w16)
	ldi	zl,Low(2*w16)	
	rjmp in_ramm2
no_sb2:
	ldi	zh,High(2*w17)
	ldi	zl,Low(2*w17)
in_ramm2:		
rcall in_ram
	ret

;для настройки часов
time_num3:  	; подпрограмма перекодирования дня, index  и уст темп  в десятичное вывод в буфер ;B0 

	cpi index,15
	brsh hi_12	;меньше или равно
;---------
; строку день недели
	ldi	YH,0
	ldi	YL,$B0
	mov buf,day2
	cpi buf,1
	brne no_pn3
	ldi	zh,High(2*w1)
	ldi	zl,Low(2*w1)	
	rjmp in_ramm3
no_pn3:
	cpi buf,2
	brne no_vt3
	ldi	zh,High(2*w2)
	ldi	zl,Low(2*w2)	
	rjmp in_ramm3
no_vt3:
	cpi buf,3
	brne no_sr3
	ldi	zh,High(2*w3)
	ldi	zl,Low(2*w3)	
	rjmp in_ramm3
no_sr3:
	cpi buf,4
	brne no_ct3
	ldi	zh,High(2*w4)
	ldi	zl,Low(2*w4)	
	rjmp in_ramm3
no_ct3:
	cpi buf,5
	brne no_pt3
	ldi	zh,High(2*w5)
	ldi	zl,Low(2*w5)	
	rjmp in_ramm3
no_pt3:
	cpi buf,6
	brne no_sb3
	ldi	zh,High(2*w6)
	ldi	zl,Low(2*w6)	
	rjmp in_ramm3
no_sb3:
	ldi	zh,High(2*w7)
	ldi	zl,Low(2*w7)
in_ramm3:		
	rcall in_ram
	ret
hi_12:
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
; если index больше 12 разложим на часы
;	cpi index,15
;	brlo loo_12	;меньше или равно
	mov buf,index
	andi buf,0b00011111
	add zl,buf
	adc zh,r0
	lpm			
	mov buf,r0
; номер часа в настройки темп в buf
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $B4,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $B3,buf
; выведем считанную из eeprom температуру
	mov buf,temp_e	
	clr r0
	ldi	zh,High(2*num)
	ldi	zl,Low(2*num)
	add zl,buf
	adc zh,r0
	lpm			
	mov buf,r0
	andi buf,$0f	; младшее значение
	ori buf,$30
	sts $Bc,buf		;младшее зн сек
	mov buf,r0
	swap buf
	andi buf,$0f	; старшее значение
	ori buf,$30
	sts $Bb,buf
	ldi buf,$C0	;ч
	sts $B5,buf
	ldi buf,'a'
	sts $B6,buf
	ldi buf,'c'
	sts $B7,buf

	ldi buf,' '
	sts $B8,buf
	ldi buf,'t'
	sts $B9,buf
	ldi buf,'='
	sts $Ba,buf

	ldi buf,','
	sts $Bd,buf
	ldi buf,'0'
	sts $Be,buf
	ldi buf,1;'C'
	sts $Bf,buf
	ret
in_ram:	; читаем по адр Z пишем по адр Y
el:
		lpm	; считали
		tst	r0		; Check if we've reached the end of the message
		breq ren
		st y+,r0	; записали
		adiw	ZL,1		; Increase Z registers
		rjmp	el
ren:	; строка из пам программ ПЕРЕПИСАНа в озу
	ret
;-------------------------------------------------
;ПОДПРОГРАММА расчет координаты EEprom из index
koord_read:
	mov xx, index
	andi xx,0b11100000
	swap xx
	lsr xx
	ldi yy,24
;***** Code
mpy8u:	
	clr	m8uH		;clear result High byte
	ldi	mcnt8u,8	;init loop counter
	lsr	yy		;rotate multiplier
m8u_1:
	brcc	m8u_2		;carry set 
	add 	m8uH,xx	;   add multiplicand to result High byte
m8u_2:
	ror	m8uH		;rotate right result High byte
	ror	m8uL		;rotate right result L byte and multiplier
	dec	mcnt8u		;decrement loop counter
	brne	m8u_1		;if not done, loop more
;поместим в koord ответ xx*yy 1-7*24
	mov buf,index
	andi buf,0b00011111
	add buf,m8uL	;в buf координата 1-7*24+0-23
	mov koord_old,koord
	mov koord,buf
	tst koord_old
	brne n_k
	mov koord_old,koord
n_k:
read_to_pred:
; в buf адрес ячейки для чтения 
	rcall r_eeprom		; прочтем, значение в buf
; проверим пределы темп 5-35
	sbrs flags,1
	mov temp_e_old,buf
	cbr flags,2
	cpi buf,36
	brlo m2
	ldi buf,5
m2:
	cpi buf,5
	brsh m3
	ldi buf,5
m3:
	mov temp_e,buf
	ret	
;------
;ПОДПРОГРАММА расчет координаты EEprom из index
koord_write:
; если значение temp_e не изменилось запись не делать
	cp temp_e,temp_e_old
	breq no_eqe
	out eearl,koord	; адрес ячейки для записи
	clr buf
	out eearh,buf	; адрес ячейки для записи
	out eedr,temp_e		; в buf значение для записи
; запись в EEPROM
	rcall w_eeprom
	nop
no_eqe:
	ret	
;----------------------------------------------------------------------------
lcd_command8:	;used for init (we need some 8-bit commands to switch to 4-bit mode!)
	in	temp, DDRD		;we need to set the high nibble of DDRD while leaving
					;the other bits untouched. Using temp for that.
	sbr	temp, 0b11110000	;set high nibble in temp
	out	DDRD, temp		;write value to DDRD again
	in	temp, PortD		;then get the port value
	cbr	temp, 0b11110000	;and clear the data bits
	cbr	buf, 0b00001111	;then clear the low nibble of the buf
					;so that no control line bits are overwritten
	or	temp, buf		;then set the data bits (from the buf) in the
					;Port value
	out	PortD, temp		;and write the port value.
	sbi	PortD, LCD_E		;now strobe E
	nop
	nop
	nop
	cbi	PortD, LCD_E
	in	temp, DDRD		;get DDRD to make the data lines input again
	cbr	temp, 0b11110000	;clear data line direction bits
	out	DDRD, temp		;and write to DDRD
	rcall	LCD_wait
	ret
lcd_putchar:
	push	buf		;save the argmuent (it's destroyed in between)
	in	temp, DDRD		;get data direction bits
	sbr	temp, 0b11110000	;set the data lines to output
	out	DDRD, temp		;write value to DDRD
	in	temp, PortD		;then get the data from PortD
	cbr	temp, 0b11111110	;clear ALL LCD lines (data and control!)
	cbr	buf, 0b00001111	;we have to write the high nibble of our buf first
					;so mask off the low nibble
	or	temp, buf		;now set the buf bits in the Port value
	out	PortD, temp		;and write the port value
	sbi	PortD, LCD_RS		;now take RS high for LCD char data register access
	sbi	PortD, LCD_E		;strobe Enable
	nop
	nop
	nop
	cbi	PortD, LCD_E
	pop	buf		;restore the buf, we need the low nibble now...
	cbr	temp, 0b11110000	;clear the data bits of our port value
	swap	buf		;we want to write the LOW nibble of the buf to
					;the LCD data lines, which are the HIGH port nibble!
	cbr	buf, 0b00001111	;clear unused bits in buf
	or	temp, buf		;and set the required buf bits in the port value
	out	PortD, temp		;write data to port
	sbi	PortD, LCD_RS		;again, set RS
	sbi	PortD, LCD_E		;strobe Enable
	nop
	nop
	nop
	cbi	PortD, LCD_E
	cbi	PortD, LCD_RS
	in	temp, DDRD
	cbr	temp, 0b11110000	;data lines are input again
	out	DDRD, temp
	rcall	LCD_wait
	ret
lcd_command:	;same as LCD_putchar, but with RS low!
	push	buf
	in	temp, DDRD
	sbr	temp, 0b11110000
	out	DDRD, temp
	in	temp, PortD
	cbr	temp, 0b11111110
	cbr	buf, 0b00001111
	or	temp, buf
	out	PortD, temp
	sbi	PortD, LCD_E
	nop
	nop
	nop
	cbi	PortD, LCD_E
	pop	buf
	cbr	temp, 0b11110000
	swap	buf
	cbr	buf, 0b00001111
	or	temp, buf
	out	PortD, temp
	sbi	PortD, LCD_E
	nop
	nop
	nop
	cbi	PortD, LCD_E
	in	temp, DDRD
	cbr	temp, 0b11110000
	out	DDRD, temp
	rcall	LCD_wait
	ret
LCD_getaddr:	;works just like LCD_getchar, but with RS low, return.7 is the busy flag
	in	temp, DDRD
	andi	temp, 0b00001111
	out	DDRD, temp
	cbi	PortD, LCD_RS
	sbi	PortD, LCD_RW
	sbi	PortD, LCD_E
	nop
	in	temp, PinD
	andi	temp, 0b11110000
	mov	return, temp
	cbi	PortD, LCD_E
	nop
	nop
	sbi	PortD, LCD_E
	nop
	in	temp, PinD
	andi	temp, 0b11110000
	swap	temp
	or	return, temp
	cbi	PortD, LCD_E
	cbi	PortD, LCD_RW
	ret
LCD_wait:				;read address and busy flag until busy flag cleared
	rcall	LCD_getaddr
;	ret	;#####
	wdr
	andi	return, 0x80
	brne	LCD_wait
	ret
LCD_delay:	;50 msek
	clr	r2
	LCD_delay_outer:
	clr	r3
	LCD_delay_inner:
	dec	r3
	brne	LCD_delay_inner
	dec	r2
	brne	LCD_delay_outer
	ret
LCD_init:
	ldi	temp, 0b00001110	;control lines are output, rest is input
	out	DDRD, temp
	rcall	LCD_delay		;first, we'll tell the LCD that we want to use it
	rcall	LCD_delay		;first, we'll tell the LCD that we want to use it
	rcall	LCD_delay		;first, we'll tell the LCD that we want to use it
	rcall	LCD_delay		;first, we'll tell the LCD that we want to use it
	ldi	buf, 0x20		;in 4-bit mode.
	rcall	LCD_command8		;LCD is still in 8-BIT MODE while writing this command!!!
	ldi	buf, 0x28		;NOW: 2 lines, 5*7 font, 4-BIT MODE!
	rcall	LCD_command		;
	ldi	buf, 0x0C		;now proceed as usual: Display on, cursor off, blinking off
	rcall	LCD_command
	ldi	buf, 0x01		;clear display, cursor -> home
	rcall	LCD_command
	ldi	buf, 0x06		;auto-inc cursor
	rcall	LCD_command
	ret
; п/п считывания EEPROM	в buf
r_eeprom:	
	out eearl,buf
	sbi eecr,eere
	in buf,eedr
no_s_eere:	
	sbic eecr,eere
	rjmp no_s_eere	
	ret
; п/п записи в eeprom 
w_eeprom:
;	out eedr,buf		; в buf значение для записи
	sbi eecr,eemwe
	sbi eecr,eewe
no_s_eewe:	
	sbic eecr,eewe
	rjmp no_s_eewe
	nop
	ret
;********************* DS18B20 *******************
Ds:
		cpi dosek,5	; на преоразование
		breq nach_preob
	   	cpi dosek,6	; на считывание результата
		breq schit_dat
nach_preob:
		rcall 	ds_reset 				; вызов обнуления линии
		ldi 	ds_command, 0xCC		; пропуск идентификации
		rcall 	ds_write
		ldi 	ds_command, 0x44 		; начало преобразования
		rcall 	ds_write
; здесь надо выйти и сделать паузу
		ret
;----------------------------
schit_dat:
		rcall 	ds_reset 				; вызов обнуления линии
		ldi 	ds_command, 0xCC
		rcall 	ds_write
		ldi 	ds_command, 0xBE 		;чтение блокнота, получение результата
		rcall 	ds_write
		ldi		wreg, 5
		rcall	ds_delay
		rcall 	ds_read					; принять 8 бит
		ret
ds_delay:
		ldi 	duration, 2				; 2,75uS*wreg
		cycle:
		nop
		dec 	duration
		brne	cycle
		dec 	wreg
		brne	ds_delay
		ret
ds_reset:
		cbi	 	PORTB,	PB0
		ldi		wreg, 0xFF				; Portb выход
		out		DDRB, wreg
		ldi 	wreg, 	220				; обнуление 600мкс
		rcall 	ds_delay
		ldi		wreg, 0xFE				; Portb.0 вход
		out		DDRB, wreg
		ldi 	wreg, 	220 			; принятие импульса присутствия 600мкс
		rcall 	ds_delay
		ret
ds_write:
		ldi 	wr_counter,8
		Label1:
		lsr 	ds_command			; лог сдвиг 0 бит -> CF
		brcs 	one_wr				; пререход если CF=1
		rjmp 	zero_wr
one_wr:
		cbi 	PORTB, PB0
		ldi 	wreg, 0xff
		out		DDRB, wreg			; PORTB - выход
		ldi 	wreg, 1				; 2,7мкс
		rcall 	ds_delay 
		ldi		wreg, 0xFE			; PORTB - вход
		out		DDRB, wreg
		ldi 	wreg,20 			; 60мкс - продление "1"
		rcall 	ds_delay	
		rjmp 	Label2
zero_wr:
		cbi 	PORTB, PB0
		ldi 	wreg, 0xff
		out		DDRB, wreg			; PORTB - выход
		ldi 	wreg, 26			; 70мкс
		rcall 	ds_delay 
		ldi		wreg, 0xFE			; PORTB - вход
		out		DDRB, wreg
Label2:
		ldi 	wreg, 1				; задержки между посылками битов 2,7мкс
		rcall 	ds_delay
		dec 	wr_counter
		brne 	Label1				; проверка счетчика
		ret
ds_read:
	ldi wr_counter, 9
	ldi lbyte, 0x00
; new section
	cbi PORTB,PB0
	ldi wreg, 0xFF				; PB0 - output
	out DDRB, wreg
	ldi wreg,2
	rcall ds_delay				; синхроимпульс 2,7мкс
	ldi wreg, 0xFE 				; PB0 - input
	out DDRB, wreg 
	ldi wreg, 3
	rcall ds_delay				; проверка через 8мкс
	ldi wreg, 22				; 60мкс
	rcall ds_delay
;2
	cbi PORTB,PB0
	ldi wreg, 0xFF				; PB0 - output
	out DDRB, wreg
	ldi wreg,2
	rcall ds_delay				; синхроимпульс 2,7мкс
	ldi wreg, 0xFE 				; PB0 - input
	out DDRB, wreg 
	ldi wreg, 3
	rcall ds_delay				; проверка через 8мкс
	ldi wreg, 22				; 60мкс
	rcall ds_delay
;3
	cbi PORTB,PB0
	ldi wreg, 0xFF				; PB0 - output
	out DDRB, wreg
	ldi wreg,2
	rcall ds_delay				; синхроимпульс 2,7мкс
	ldi wreg, 0xFE 				; PB0 - input
	out DDRB, wreg 
	ldi wreg, 3
	rcall ds_delay				; проверка через 8мкс
	ldi wreg, 22				; 60мкс
	rcall ds_delay
; end of section
label3:
	cbi PORTB,PB0
	ldi wreg, 0xFF				; PB0 - output
	out DDRB, wreg
	ldi wreg,2
	rcall ds_delay				; синхроимпульс 2,7мкс
	ldi wreg, 0xFE 				; PB0 - input
	out DDRB, wreg 
	ldi wreg, 3
	rcall ds_delay				; проверка через 8мкс
	cpi wr_counter, 1
	breq sign
	sbis PINB, PB0				; проп. след ком если PB0=1
	rjmp zero_r
one_r:
	lsr lbyte
	ori lbyte,0x80
	rjmp label4
zero_r:
	lsr lbyte
	nop
	label4:
	ldi wreg, 22				; 60мкс
	rcall ds_delay

	dec wr_counter
	brne label3					; переход если ds_counter > 0
sign:
	ldi hbyte, 0xFF
	sbis PINB, PB0				; проп. след ком если PB0=1
	ldi hbyte, 0x00
	nop
	ldi wreg, 22				; 60мкс
	rcall ds_delay
; здесь температура в Hbyte и Lbyte
;проверим на отрицательную
	tst hbyte
	breq no_otr
	neg lbyte
	ldi buf,'-'
	sts $7a,buf
	rjmp minus
no_otr:
	ldi buf,'+'
	sts $7a,buf
minus:
	clc
	ror lbyte
	brcs set_5
	ldi buf,$30
	sts $7e,buf
	rjmp jum_5
set_5:	
	ldi buf,$35
	sts $7e,buf
jum_5:
; ограничим диапазон срабатывания от 5 до 35
	tst hbyte
	brne sys_off
	cpi lbyte,2
	brlo sys_off
	cpi lbyte,36
	brsh sys_off
;здесь темпер в пределах +5 +35
; сравним lbyte -темп DS и еуьз_у  ntvgth bp уузкщь на текущий час
	cp lbyte,temp_e
	brlo rel_on
sys_off:
	sbr flags,8	;признак включились для гистерезиса
	cbi portB,3	;реле
	sbi portB,2	;вкл реле
	ret
rel_on:
	sbrs flags,3
	rjmp yyy_on
	mov buf,temp_e
	subi buf,gist
	cp lbyte,buf
	brlo yyy_on
	ret
yyy_on:
	cbr flags,8	;признак отключились для гистерезиса
	sbi portB,3		;реле
	cbi portB,2	;откл вкл реле
	ret

time:
.db "21:22:45  -22,5C",0

PN:
.db $A8,"OHE",$E0,"E",$A7,"bH",$A5,"K +",0 ;ponedelbnik
VT:
.db "BTOPH",$a5,"K     +",0
SR:
.db "CPE",$e0,"A       +",0
CT:
.db  $AB,"ETBEP",$a1,"     +",0
PT:
.db $a8,$b1,"TH",$a5,$e1,"A     +",0
SB:
.db "C",$a9,$a0,$a0,"OTA     +",0
VS:
.db "BOCKPECEHbE +",0

nastr1:
.db " ",$E0,"EHb/",$AB,"AC",$AE,"/KOPP ",0	;$80
nastr2:
.db "pn 00:00-10     ",0	;$90

konf1:
.db "  KOH",$AA,$A5,$A1,$A9,"PA",$E1,$A5,$B1,"  ",0	;a0 конфигурация
;konf2:
;.db "PN --cas t=--,0C",0	;B0

ts:
.db "TEPMOCTAT   +   ",0	;$C0

w1:
.db $A8,"H              ",0
w2:
.db "BT              ",0
w3:
.db "CP              ",0
w4:
.db $AB,"T              ",0
w5:
.db $A8,"T              ",0
w6:
.db "C",$A0,"              ",0
w7:
.db "BC              ",0


w11:
.db $A8,"H",0
w12:
.db "BT",0
w13:
.db "CP",0
w14:
.db $AB,"T",0
w15:
.db $A8,"T",0
w16:
.db "C",$A0,0
w17:
.db "BC",0


num:
.db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09
.db $10,$11,$12,$13,$14,$15,$16,$17,$18,$19
.db $20,$21,$22,$23,$24,$25,$26,$27,$28,$29
.db $30,$31,$32,$33,$34,$35,$36,$37,$38,$39
.db $40,$41,$42,$43,$44,$45,$46,$47,$48,$49
.db $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60

strel:
.db $18,$1e,$09,$08,$08,$09,$06,$00
;.db $01,$03,$07,$0f,$07,$03,$01,$00




.EXIT

