//Когда нажимаем на любую кнопку,то контакты замыкаются и размыкаются несколько микросекунд.Это называется дребезг контактов.В Протеусе этого вы не увидете,но если сделаете реальную схему, то светодиод будет загораться и тухнуть не всегда.Сделаем задержку в программе в том месте где кнопка нажимается и отпускается.
#include <avr/io.h>
#include "util/delay_basic.h"    //Сдесь описаны две функции задержки.
int main(void)
{
    DDRD=0x00;
    DDRB=0xFF;
    PORTB=0xFF;
    PORTD=0x7F;
    ACSR=0x80;
    while(1)
    {
        while((PIND&(1<<PIND0))) //PIND0-это просто 0.Сдвинуть влево на 0 бит 1-цу,
        {                        //and с PIND.Если в PIND 0-й бит 1,то бесконечный
        }                        //цикл,если 1,то выходим из цикла.
        _delay_loop_1(200);      //Функция задержки-принемает один байт.
        if ((PINB&(1<<PINB0)))   //Если после and 1
        {
            PORTB&=(~(1<<PB0));  //то скидываем бит
        }
        else
        {
            PORTB|=(1<<PB0);     //иначе подымаем 1-й бит
        }
        while(!(PIND&(1<<PIND0)))//Результат выражения такойже как и первый выше,
        {                        //но со знаком not(!) всё наоборот.
        }    
        _delay_loop_1(200);                    
    }
}

 

 

 

НАЗАД               Assembler AVR               Assembler PIC                 ДАЛЕЕ