//Когда нажимаем на любую кнопку,то контакты замыкаются и размыкаются несколько микросекунд.Это называется дребезг контактов.В Протеусе этого вы не увидете,но если сделаете реальную схему, то светодиод будет загораться и тухнуть не всегда.Сделаем задержку в программе в том месте где кнопка нажимается и отпускается.
#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 ДАЛЕЕ