Всем привет попробовал переделать код по статье "LCD16s2d+avr (4bit)" для Atmega 8515.Не работает не судите строго я только учусь

ПОМОГИТЕ ПОЖАЛУЙСТА!!!
Вот код:
;*******************************************************************
;********************************************************************
; ----------
;| Набор процедур для управления |
;| LCD16S2D ----------
; ----------| By Pa5ha |
; ----------
.include file "C:\AVR\AvrAssembler2\Appnotes\m8515def.inc"
.def Temp = R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
;.equ RS = 5
;.equ RW = 6
;.equ E = 7
.equ SPEED = 14 ; 14 äëÿ XTAL=16MHz, 10 äëÿ XTAL=8MHz,
; 6 äëÿ XTAL=4MHz, 5 äëÿ XTAL<4MHz
.cseg
.org 0
;*********************************************************
rjmp Reset ;âåêòîðà ïðåðûâàíèé
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_compA
rjmp Timer1_compB
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp SPI_STC
rjmp USART_RX
rjmp USART_UDRE
rjmp USART_TX
rjmp ANA_COMP
rjmp INT_2
rjmp TIMER0_COMP
rjmp EE_RDY
rjmp SPM_RDY
;Reset: ;RESET
INT_0: ;1 INT0
INT_1: ;2 INT1
Timer1_capt1:;3 Çàõâàò Ò/Ñ T1
;Timer1_compA:;4 Ñîâïàäåíèå "A" Ò/Ñ T1
Timer1_compB:;5 Ñîâïàäåíèå "B" Ò/Ñ T1
Timer1_OVF1:;6 Ïåðåïîëíåíèå Ò/Ñ T1
Timer0_OVF0: ;7 Ïåðåïîëíåíèå Ò/Ñ T0
SPI_STC: ;8 Ïåðåäà÷à ïî SPI çàâåðøåíà
USART_RX: ;9 USART, ïðè¸ì çàâåðø¸í
USART_UDRE: ;10 Ðåãèñòð äàííûõ USART ïóñò
USART_TX: ;11 USART, ïåðåäà÷àçàâåðøåíà
ANA_COMP: ;12 Àíàëîãîâûé êîìïàðàòîð
INT_2: ;13 INT2
TIMER0_COMP: ;14 Ñîâïàäåíèå Ò/Ñ T0
EE_RDY: ;15 EEPROM, ãîòîâî
SPM_RDY: ;16 Ãîòîâíîñòü SPM
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset:
ldi Temp,0b11111111 ; íàñòðîéêà ïîðòîâ
;ser temp
out DDRA, temp
out DDRD, temp
ldi Temp,0
out PortD,Temp
InitAvr:
;Initialize stack pointer
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
;*********************
;Ðàáîòà ñ LCD
rcall Delay40mks ; Ïàóçà ïåðåä âêëþ÷åíèåì
rcall Init_LCD16s2d ; Èíèöèàëèçàöèÿ äèñïëåÿ
rcall Write_CGRAM ; Ñîçäàíèå ñîáñòâåííîãî ñèìâîëà
ldi Temp,0b10000000
rcall WriteCmd ; Óñòàíîâêà êóðñîðà
ldi ZL,Low(Text01*2)
ldi ZH,High(Text01*2)
rcall WriteLn ; Âûâîä ñòðîêè
ldi Temp,0b11000001
rcall WriteCmd ; Óñòàíîâêà êóðñîðà
ldi ZL,Low(Text02*2)
ldi ZH,High(Text02*2)
rcall WriteLn ; Âûâîä ñòðîêè
;*********************
ldi Temp,0b01000000 ;ðàçðåøèòü ïðåðûâàíèÿ êîìïàðàòîðà
out TIMSK,Temp
ldi Temp,0b00000011 ;òàêòîâûé ñèãíàë = CK/64
out TCCR1B,Temp
ldi Temp,0x4C ;èíèöèàëèçàöèÿ êîìïàðàòîðà
out OCR1AH,Temp
ldi Temp,0x4B
out OCR1AL,Temp
ldi Temp1,0b00000001 ;Èíèöèàëèçàöèÿ èíäèêàòîðà
ldi Temp,0 ;îáíóëåíèå òàéìåðà
out TCNT1H,Temp
out TCNT1L,Temp
sei ;ðàçðåøèòü ïðåðûâàíèÿ
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf:
rjmp Inf ;áåñêîíå÷íûé öèêë
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************
Timer1_compA:
ldi Temp,0 ;îáíóëåíèå òàéìåðà
out TCNT1H,Temp
out TCNT1L,Temp
Shift: cpi Temp1,0b10000000 ;ñðàâíèòü ñ êðàéíèì çíà÷.
breq Init ;åñëè ðàâíî - çàãðóçêà íà÷. çíà÷.
lsl Temp1 ;èíà÷å - ñäâèã âëåâî
rjmp Output ;ïåðåéòè íà âûâîä â ïîðò
Init: ldi Temp1,0b00000001 ;çàãðóçèòü íà÷. çíà÷åíèå
Output: out PortA,Temp1 ;âûâîä â ïîðò
reti ;âûõîä èç îáðàáî÷èêà
;****************************************************
; Пауза
;****************************************************
Delay40mks:
push Temp
ldi Temp,0
Loop:
dec Temp
brne Loop
pop Temp
ret
;****************************************************
; Пауза
;****************************************************
Delay1500mks:
push Temp
push Temp1
ldi Temp,0
ldi Temp1,20
Loop3:
dec Temp
brne Loop3
dec Temp1
brne Loop3
pop Temp1
pop Temp
ret
;****************************************************
; Инициализация LCD
;****************************************************
;êîìàíäû sbi, cbi - óñòàíîâêà/ñáðîñ áèòà
;a0 pd6
;r/w pd5
;e pd4
;db4 pd0
;db5 pd1
;db6 pd2
;db7 pd3
INIT_LCD16S2D:
ldi R16,0
out PortD,R16
rcall Delay40mks
ldi Temp1,16
ldi ZL,Low(LCD_INIT_DATA*2)
ldi ZH,High(LCD_INIT_DATA*2)
Init_next0:
lpm
out PortD,r0;Temp
adiw ZL,1 ; AddImmedaiate to Word. Èíêðåìåíòèòñÿ ñëîâî.
nop ;?? ????? 40íñ
nop
sbi PortD,4
nop ;?? ????? 230íñ
nop
nop
nop
nop
nop
cbi PortD,4
rcall Delay40mks
dec Temp1
brne Init_next0
rcall Delay1500mks
; ldi Temp,0
; out PortD,Temp
ret
LCD_INIT_DATA:
; are3210 are3210
;8bit
.db 0b00000011,0b00000011 ; 30h ????????? ???????????
.db 0b00000011,0b00000010 ; 20h ????????? ???????????
;4bit
.db 0b00000010,0b00001000 ; 28h ????????? ???????????
.db 0b00000000,0b00001000 ; 0Ch ?????????? ???????
.db 0b00000000,0b00000110 ; 06h ????????? ??????????? ? ?????????? ??????
.db 0b00000000,0b00001111 ; 0Fh ???????? ????????? ? ???????? ??????
.db 0b00001000,0b00000000 ; ?????? ?????
.db 0b00000000,0b00000001 ; 01h ???????, ?????? ?????
;****************************************************
; Установка адреса для последующих операции и
; выбор оласти DDRAM.
; Входные данные: R16(Temp) - адрес DDRAM + 0x80.
; Изменяется регистр R16(Temp).
;****************************************************
WriteCmd:
push Temp
;Swap Temp
lsr Temp
lsr Temp
lsr Temp
lsr Temp
andi Temp,0b00001111
out PortD,Temp
nop ;íå ìåíåå 40íñ
nop
sbi PortD,4
nop ;íå ìåíåå 230íñ
nop
nop
nop
nop
nop
cbi PortD,4
nop ;íå ìåíåå 270íñ
nop
nop
nop
nop
nop
nop
pop Temp
andi Temp,0b00001111
out PortD,Temp
nop ;?? ????? 40??
nop
sbi PortD,4
nop ;?? ????? 230??
nop
nop
nop
nop
nop
cbi PortD,4
rcall Delay40mks
ret
;****************************************************
; Вывод текстовой строки на дисплей.
; Входные данные: регистр Z - адрес строки в
; программной памяти. '$' - конец строки.
; Изменяется регистр R16(Temp), Z.
;****************************************************
WriteLn:
lpm
mov Temp,r0
cpi Temp,'$'
breq WriteLnEnd
adiw ZL,1
push Temp
Swap Temp
andi Temp,0b00001111
ori Temp,0b01000000
out PortD,Temp
nop ;?? ????? 40íñ
nop
sbi PortD,4
nop ;?? ????? 230íñ
nop
nop
nop
nop
nop
cbi PortD,4
nop ;?? ????? 270íñ
nop
nop
nop
nop
nop
nop
pop Temp
andi Temp,0b00001111
ori Temp,0b01000000
out PortD,Temp
nop ;?? ????? 40íñ
nop
sbi PortD,4
nop ;?? ????? 230íñ
nop
nop
nop
nop
nop
cbi PortD,4
rcall Delay40mks
rjmp WriteLn
WriteLnEnd:
ret
;****************************************************
; Всякие тексты, чтоб выводить
;****************************************************
Text01:
.db 'I',0,0x4b,0x50,0xA5,0x43,0x54,0xB0,0xAC,0x41,0x20,0x26
Text02:
.db "radiokot.ru "
;****************************************************
; Запись своих символов в CGRAM
;****************************************************
Write_CGRAM:
ldi Temp,0b01000000 ; Âûáîð îáëàñòè ïàìÿòè CGRAM
rcall WriteCmd
; ldi R16,0
; out PortD,R16
; rcall Delay40mks
; ldi Temp1,8
ldi ZL,Low(Symbol_data*2)
ldi ZH,High(Symbol_data*2)
;Init_next0:
; brne Init_next0
rcall WriteLn
; rcall Delay1500mks
; ldi Temp,0
; out PortD,Temp
ret
Symbol_data:
; are3210 are3210
.db 0b00000000,0b00000000
.db 0b00001010,0b00011111
.db 0b00001110,0b00000100
.db 0b00000000,0b00000000
;.db '$'
;.EXIT
;Ïîäêëþ÷åíèå èíäèêàòîðà ê ïîðòó D ïî âàðèàíòó 4-õ áèòíîãî èíòåðôåéñà:
;a0 (4) (11) pd6
;r/w (5) (9) pd5
;e (6) (8) pd4
;db4 (11) (2) pd0
;db5 (12) (3) pd1
;db6 (13) (6) pd2
;db7 (14) (7) pd3