Программные таймеры. Часть 2. Еще один пример использования

25/10/2009 - 23:02

Управление подсветкой LCD


//программирование микроконтроллеров AVR на Си
//пример использования программного таймера
//Pashgan   ChipEnable.ru
#include <ioavr.h>
#include <intrinsics.h>
#include "Timers.h"
#include "bits_macros.h"

#define LED 0
#define BUTTON 1

//объявляем программный таймер
SoftTimer timer1;

//функции управления подсветкой
void LedOn(void)
{
  ClearBit(PORTD, LED);   
}

void LedOff(void)
{
  SetBit(PORTD, LED);
}

int main( void )
{
  //инициализация выводов для кнопки и подсветки
  SetBit(PORTD, BUTTON);
  SetBit(DDRD, LED);
  SetBit(PORTD, LED);
 
  //инициализация таймера Т0 - прерывания каждую ms
  TIMSK = (1<<OCIE0);
  TCCR0 = (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(1<<CS00);
  TCNT0 = 0;
  OCR0 = 0x7d;
 
  //создаем таймер, пока что он будет выключен
  CreateTimer(&timer1, 0, 0, IDLE, LedOff);

  __enable_interrupt();
  while(1);
  return 0;
}

//************************************
//Прерывание таймера/счетчика Т0

#pragma vector = TIMER0_COMP_vect
__interrupt void Timer0CompVect(void)
{
  //если кнопка нажата, включить подсветку
  //запусить таймер с периодом 5 секунд

  if (BitIsClear(PIND, BUTTON)) {
    LedOn();
    RestartTimer(&timer1, 5000);  
  }
  //опрошиваем программный таймер
  CheckTimer();
}

Пояснения к коду

   Пояснять тут особо нечего. Единственное, на чем стоит остановиться - функция RestartTimer. Она получает указатель на программный таймер, устанавливает его состояние в положение ACTIVE и перезаписывает его счетчик time. В данном примере таймер срабатывает через 5 с.
 

Файлы

   Управление подсветкой lcd  - проект для IARa, проект для WINAVR.

Comments   

# TERMIN 2011-04-12 17:44
а как остановить,удал ить таймер?
# гость 2011-04-14 06:32
Ну ни как не могу увидить реализацию RestartTimer
# YuraPIC 2011-12-07 17:32
Pashgan, напиши функцию RestartTimer, пожалуйста)
И я присоединяюсь к вопросу TERMINа...
Жду ответы)
# FreshMan 2012-11-20 18:41
спасибо за статью :-)

У вас недостаточно прав для комментирования.