Вы вошли на сайт, как Гость
Регистрация

Индикатор, мигающий каждую секунду

Программные примеры для микроконтроллеров AVR - AVRStudio
(Индикатор, мигающий каждую секунду)

К выводу 0 порта В подключен светодиодный индикатор, который должен переключаться каждую секунду. Это можно сделать с помощью прерывания при переполнении таймера. Воспользуемся, например, таймером/счетчиком Т/С1. С помощью разрядов CS10-CS12 регистра TCCR1B устанавливается коэффициент деления частоты системной синхронизации для тактирования таймера. Выберем коэффициент 1024, что соответствует значению 0b101 или просто 5. Таким образом, в случае рабочей частоты микроконтроллера в 4 МГц значение счетного регистра TCNT1 будет увеличиваться через каждые 1024 / 4000000 = 0,000256 с. Следовательно, необходимо установить такое стартовое значение счетчика, чтобы до его переполнения отсчитывалось 1 / 0,000256 = 3906 импульсов. Поскольку с помощью 16 разрядов счетчика можно получить максимальное значение 65535 (OxFFFF), то он должен инициализироваться значением 65536-3906.

Примечание: при компиляции проекта требуется добавить в проект следующие библиотеки: "avr/io.h", "avr/interrupt.h", "signal.h".


#define Freq 4000000

INTERRUPT(SIG_OVERFLOW1)
{
  TCNT1 = 0x10000 - (Freq / 1024);
  PORTB ^= 0x01;
}

int main (void)
{
  DDRB = 0x01;
  TCCR1A = 0;
  TCCR1B = 5;
  TCNT1 = 0x10000 - (Freq / 1024);
  TIFR = 0;
  TIMSK = 0x80;
  GIMSK = 0;
  sei();
  while(1) ;
}

Файлы проекта можно скачать здесь: