.include "C:\avr\avrasm\appnotes\m16def.inc"
        .def      temp=R16  ;
        .def      temp1=r17 ;
        .def      temp2=r18 ;задержка
        .def      temp3=r19 ;задержка
        .def      temp4=r20 ;задержка
        .def      temp5=r21 ;
        .def      zdr=r22 ;
        .def      stroka=r23;
        .def      number=r24;
        .def      count=r25 ;
        .cseg
        .org 0
;**********-=initialize=-************
reset:
        .macro ldiw               
        ldi @0H,high(@1)          ;инициализация стека
        ldi @0L, low(@1)          
        .endmacro                 
        ldiw    Y,RAMEND          
        out     SPL,YL            
        out     SPH,YH          
                

        
        ldi     temp,0xff         ;настройка направления портов
        out     ddrc,temp         
        out     ddra,temp
        out			ddrb,temp
        ldi     temp,0x00
        out     ddrd,temp
        ldi			temp,0x00
        out			porta,temp
        out			portb,temp
;**********-=LCD_init=-*************
																		;инициализация ЖКИ (по крайней мере попытка)
				ldi			zdr,230							;отправляем сначала три команды 0x30 (шина - 8 бит, повешена на порт А,  выводы RS , R/W , E повешены соответственно на порт В - 0, 1, 2
				rcall		delay_ms						; перед первой задержка - 200 мс, перед второй, тртьей и 4ой - 50 мс
				ldi			stroka,0b00110000		;посмледующие задержки стандартны по ДШ
				rcall		send_lcd_inst
				
				ldi			zdr,50
				rcall		delay_ms
				rcall		send_lcd_inst
				
				ldi			zdr,20
				rcall		delay_ms
				rcall		send_lcd_inst
				
				ldi			zdr,20
				rcall		delay_ms
				ldi			stroka,0b00111000
				rcall		send_lcd_inst
				
				ldi			zdr,70
				rcall		delay_Us
				ldi			stroka,0b00001111
				rcall		send_lcd_inst
				
				rcall		delay_Us
				ldi			stroka,0b00000001
				rcall		send_lcd_inst
				
				ldi			zdr,2
				rcall		delay_ms
				ldi			stroka,0b00000110
				rcall		send_lcd_inst
				
				ldi			zdr,70
				rcall		delay_Us
				sei
;///////////////////////////////////////////////////////////////////////////////////////////////
;проверяем, что програма дошла до этой точки, светодиоды подключенные к порту С должны замигать

				
cycle:	in			temp,portc
				com			temp
				out			portc,temp
				ldi			zdr,70
				rcall		delay_ms
				rjmp		cycle
				
				rjmp		pc					;на всякий случай
				
				
;***********-=send_lcd_data=-*********
send_lcd_data:												;подпрграмма отправляющая данные в жки
				sbi Portb,0
				out Porta,stroka
				sbi Portb,2
				nop
				nop
				nop
				nop
				nop
				nop
				cbi Portb,2
				cbi Portb,0
				ret
;***********-=send_lcd_inst=-*********
send_lcd_inst:												;подпрограмма отправляющая инструкции в жки
				cbi Portb,0
				out Porta,stroka
				sbi Portb,2
				nop
				nop
				nop
				nop
				nop
				nop
				cbi Portb,2
				ret
;***********-=Delay_Us=-***********  ;задержка в микросекундах
delay_us:
loop3:  mov     temp2,zdr
loop1:  ldi     temp4,8
wait2:  dec     temp4
        brne    wait2
        dec     temp2
        brne    loop1
        ret 
;***********-=Delay_ms=-***********  ;задержка	в милисекундах
delay_ms:
        mov     temp2,zdr
loop:   ldi     temp3,40
loop2:  ldi     temp4,200
wait:   dec     temp4
        brne    wait
        dec     temp3
        brne    loop2
        dec     temp2
        brne    loop
        ret 
