Набрасал следующий пример... Написан на WinAVR. Кого мнтересует, могу скинуть всесь проект.
/* Идеология следущая. Запускаем тймер - он входит
в прерывание по переполнению, но эти интервалы времени не велики,
поэтому считаем количество вхождений в прерывание.
А дальше делаем то, что нам нужно.
*/
#include <avrio.h>
#include <avrinterrupt.h>
#include <avrwdt.h>
#include <avrpgmspace.h>
#include <stdio.h>
int t=0;
int cnt=0;
SIGNAL(SIG_OVERFLOW0) // Прерывание по пеполнению
{
t++; // t считает вхождения в прерывание
if (t == 60) // Когда количество вхождений достишло необходимого
{ // вы полняем требуемые действия:
/* cnt хранит номер (от 0 до 4) ножки (номер бита в регистре порта)
которую надо зажечь */
if (cnt == 5) // Если счетчик ножек переполнился, то гасим все светодиоды
{
PORTB = 0;
cnt = 0;
}
else
{
// в противном случае
PORTB |= (1 << cnt); // зажигаем нужную ногу
cnt++;
}
t = 0;
}
}
int main(void)
{
// Установки порта
DDRB = 0xFF; // Включаем PORB на вывод
PORTB = 0; // Гасим все светодиоды (на всякий случай)
// Инициализация таймера
TCNT0 = 0; // Ставим счетчик в ноль
TCCR0 = 0x05; // Устанавливаем прескаллер 1024 (смотрите в даташите)
// Прерывания
sei(); // Разрешаем прерывания
TIMSK |= (1 << TOIE0); // Включаем прерывание таймера 0
return 1;
}
Помогите собрать моргалку на 5 светиков
#22
Отправлено 29 Август 2006 - 02:16
Оба!
Интересненько
Сейчас времени нет но завтра почитаю
Если сможешь скинь мне проект на black-s@mail.ru
Буду потихоньку учиться....
Зание спасибки
Интересненько
Сейчас времени нет но завтра почитаю
Если сможешь скинь мне проект на black-s@mail.ru
Буду потихоньку учиться....
Зание спасибки