//Если нажать на кнопку-светодиод начинает мигать,отпустить-гаснет.Сдесь мы напишем функцию задержки.
#include <avr/io.h>
#include "util/delay_basic.h"
int main(void)
{
    ACSR&=(~(1<<ACD));       //Отключаем компаратор
    DDRD&=(~(1<<PIND0));     //Порт Д,бит 0-на вход
    DDRB|=(1<<PINB0);        //Порт Б,бит 0-на выход
    PORTD|=(1<<PD0);         //Порт Д,бит 0-pullup
    while(1)
    {
        PORTB|=(1<<PB0);
        while(PIND&(1<<PIND0))//Если Порт Д,бит 0-+5В
        {                     //Бесконечный цикл
        }
        _delay_loop_2(20000); //Задержка
        PORTB&=(~(1<<PB0));   //Порт Б,бит 0=0В
        _delay_loop_2(20000); //Задержка
        PORTB|=(1<<PB0);      //Порт Б,бит 0=5В
    }
}

 

 

//Другой вариант
#include <avr/io.h>
#include "util/delay_basic.h"
int main(void)
{
    ACSR&=(~(1<<ACD));            //Отключаем компаратор
    DDRD&=(~(1<<PIND0));          //Порт Д,бит 0-на вход
    DDRB|=(1<<PINB0);             //Порт Б,бит 0-на выход
    PORTD|=(1<<PD0);              //Порт Д,бит 0-pullup
    while(1)
    {
        if (PIND&(1<<PIND0))      //Кнопка нажата?
        {                         //Нет.
            PORTB|=(1<<PB0);      //Тушим светодиод.
        }
        else                      //Да.
        {
            _delay_loop_2(20000); //Задержка
            PORTB&=(~(1<<PB0));   //Порт Б,бит 0=0В
            _delay_loop_2(20000); //Задержка
            PORTB|=(1<<PB0);      //Порт Б,бит 0=5В
        }
    }
}

 

 

 

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