а если вот так сделать, то когда нажимаешь мигает потом тока горит, и когда отпускаешь нормально гаснет. вот почему когда нажимаешь и держишь в начале мигает и потом только горит? 
- Код: Выделить всё
- while (1){                  
 char asd;
 while(UCSRA.7==1){
 asd = UDR;
 if(asd == 'w'){
 PORTB.0 = 1;
 PORTB.2 = 0;
 PORTB.4 = 0;
 PORTB.6 = 0;
 delay_ms(100);
 }
 if(asd == 'a'){
 PORTB.2 = 1;
 PORTB.0 = 0;
 PORTB.4 = 0;
 PORTB.6 = 0;
 delay_ms(100);
 }
 if(asd == 'd'){
 PORTB.4 = 1;
 PORTB.0 = 0;
 PORTB.2 = 0;
 PORTB.6 = 0;
 delay_ms(100);
 }
 if(asd == 's'){
 PORTB.6 = 1;
 PORTB.0 = 0;
 PORTB.2 = 0;
 PORTB.4 = 0;
 delay_ms(100);
 }
 }
 asd = 'q';
 if(asd == 'q'){
 PORTB.6 = 0;
 PORTB.0 = 0;
 PORTB.2 = 0;
 PORTB.4 = 0;
 }
 }
вроде должен так работать, ну как я понимаю, когда нажимаю "w","a","s","d" заходит while(UCSRA.7==1) а когда не нажимаю, выходит из этого цикла, правильно? если я отпускаю то должны все светодиоды не гореть, то есть программа не заходит в while(UCSRA.7==1) то есть asd = 'q' и все светодиоды гаснут...я правильно понимаю?