|
Индикатор, мигающий каждую секунду
Программные примеры для микроконтроллеров 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) ;
}
|
Файлы проекта можно скачать здесь:
|
|
|