Написание 2й программы неизбежно как падение капитализма, и поэтому мы сегодня напишем программу для крутой мигалки. Нам нужно будет не только сконфигурировать порты, но и задействовать кнопку (для этого будем использовать циклы for, while).
Принцип работы: мк ждёт нажатия кнопки, после чего происходит поочередное мигание светодиодов с частотой в 2Гц.
Самый простой способ использовать кнопку - выставить порт к которому она подключена на вход, либо сконфигурировать только определенный вывод. Я буду использовать порт В для кнопки и порт D для светодиодов.
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
int i; //переменная для цикла
void main(void)
{PORTB=0xff; //вкл подтягивающие резисторы
DDRB=0x00; //весь порт как вход
PORTD=0x00; //все нули(GND)
DDRD=0xff; //весь порт как выход
while (PINB.0==1) //проверяем состояние кнопки, если = 1, то разомкнута
{
}
while (PINB.0==0) //кнопка замкнута
{
while (1) //запускаем бесконечный цикл
{
for(i=0;i<3;i++) //цикл выполнится 3 раза, т.е. наш светодиод мигнет столько же
{ PORTD.0=1; //выставили в 1 нулевой выход порта В
delay_ms(500); //500мс задержка
PORTD.0=0; //выставили в 0 нулевой выход порта В
delay_ms(500); }
for(i=0;i<3;i++)
{PORTD.1=1; //выставили в 1 первый выход порта D
delay_ms(500);
PORTD.1=0; //выставили в 0 первый выход порта D
delay_ms(500);}
break; //Фуллстоп
}
}
}
Теперь рассмотрим пару моментов.
Почему, когда кнопка разомкнута на входе "1" ? В общем, как я уже говорил, на входах висит слабая единица, которая возникает там благодаря подтягивающим резисторам (вход подключён к источнику питания резистором на 100КОм), когда мы замыкаем кнопку, то все внимание переходит к ней т.к. ток течет по наименьшему сопротивлению, и эта единица уходит через кнопку (уровень напряжения на входе падает и мы получаем "0").
Комманда PINx.x отслеживает состояние только для ВХОДОВ!
Если хотите переделать программу - валяйте, как пример можно сделать, чтобы светодиоды чередовались, творите.
Вот вам прошивка и скрин схемы:
Ещё учтите, что при сборке реальной схемы, необходимо обеспечить светодиоды токоограничительными резисторами, в протеусе ничего не сгорит, а вот в реальной схеме .
Продолжение следует ...