Непомогло

Подправил код для читабельности.Убрал из прерывания передачу,передача занимает много время - видимо изза этогои 6 прерываний) Проблема в том что код кнопки почти для всех одинаков(что для1 ,что для 5 и т.д.)
Время(1\4периода,период) я подгонял в протеусе может быть в этом косяк?
У меня и вертуал терминал,косячные цифры выдавал,а на железе норм.
Скинул полностью проект,посмотрите может неправильно настройки контроллера там поставил?
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list
;
.def temp =r16;
.def delay =r17;
.def delay1 =r18;
.equ XTAL = 8000000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1
.org 0x000
rjmp init;
.org 0x0001
rjmp preriv; настраиваем прерывание INTo
ldi r16,high(RAMEND) ;
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
rjmp init;
zapoln:
ldi delay,0x05;
ldi delay1,0x01;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret
init:
ldi temp,0b11111111;
out DDRB,temp;
ldi temp,0b11111111;
out DDRc,temp;
ldi temp,0b00110010;
out DDRD,temp;
; начало инициализации USART
; скорость передачи даных 9600бод при частоте кварца 8МГц
ldi r17,low(bauddivider);
ldi temp,high(bauddivider);
sts UBRR0L,r17;
sts UBRR0H,temp;
;настройка USRA
LDI temp,0;
sts UCSR0A, temp; сбрасываем все флаги
ldi temp,(1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<TXCIE0)|(0<<UCSZ02)
sts UCSR0B,temp ; разрешение приемо-передачи данных, запрет прерываний
; установка формата кадра: 8 бит данных, 1 стоповых бита
ldi temp,(0<<UMSEL01)|(0<<UMSEL00)|(0<<USBS0)|(1<<ucsz01) | (1<<ucsz00)
sts UCSR0C,temp ; посилка даных длинной 8 бит
;прерывание по INTO
ldi temp,(1<<int0) ;int0
out EIMSK,temp; ;
ldi temp,(0<<isc00)|(1<<isc01); по спадающему фронту
sts EICRA,temp;
LDI temp,0b00000100;
out PortD,temp;
sei;
start:
sts UDR0,r19 ; этот код мы будим пересылать в ПК
rcall USART_Transmit;
sts UDR0,r20
rcall USART_Transmit;
rjmp start;
preriv:
clr temp;
clr r19;
clr r20;
pol:
ldi delay,0x70;производим задержку в 1/4 импульса
ldi delay1,0x00;
polovina:
subi delay,1;
sbci delay1,0;
brcc polovina;
sudi2:
inc temp;
rcall zapoln2;
sbis pind,2;проверяем портB,0 бит
rjmp nol;
sbr r20,1;если 1 то устанавливаем на R18 1
rjmp nol1;
nol:
cbr r20,1;если 1 то устанавливаем на R18 1
nol1:
lsl r20;просто сдвиг
rol r19
cpi temp,13;нужны только последние 7 битов
brlo sudi2;
reti
zapoln2:
ldi delay,0xb5;
ldi delay1,0x01;
loop2:
subi delay,1;
sbci delay1,0;
brcc loop2;
ret
USART_Transmit:
lds temp,UCSR0A;
sbrs temp,5 ;ожидание, пока буфер данных не очистится
rjmp USART_Transmit;
ret