Таймер-счетчик TC0

Содержание

Слайд 2

Структурная схема 8-разрядного таймера/счетчика

Структурная схема 8-разрядного таймера/счетчика

Слайд 3

Упрощенная структурная схема 8-разрядного таймера/счетчика

Упрощенная структурная схема 8-разрядного таймера/счетчика

Слайд 4

Регистр управления TCCR0 (Timer/Counter0 Control Register)

Регистр управления TCCR0 (Timer/Counter0 Control Register)

Слайд 5

Регистр управления TCCR0: Режим работы компаратора

Регистр управления TCCR0: Режим работы компаратора

Слайд 6

Регистр управления TCCR0: Режим работы таймер/счетчика

Регистр управления TCCR0: Режим работы таймер/счетчика

Слайд 7

Регистр управления TCCR0: Выбор источника синхронизации

Регистр управления TCCR0: Выбор источника синхронизации

Слайд 8

Регистр маски прерываний от таймеров/счетчиков TIMSK (Timer/Counter Interrupt MaSK Register)

Регистр маски прерываний от таймеров/счетчиков TIMSK (Timer/Counter Interrupt MaSK Register)

Слайд 9

Регистр маски прерываний от Т/С TIMSK

Регистр маски прерываний от Т/С TIMSK

Слайд 10

Регистр флагов прерываний от таймеров/счетчиков TIFR (Timer/Counter Interrupt Flag Register)

Регистр флагов прерываний от таймеров/счетчиков TIFR (Timer/Counter Interrupt Flag Register)

Слайд 11

Регистр маски прерываний от Т/С TIMSK

Регистр маски прерываний от Т/С TIMSK

Слайд 12

Регистры TCNT0, OCR0 и SREG TCNT0 (Timer/Counter Register) OCR0 (Output Compare Register) SREG (Status Register)

Регистры TCNT0, OCR0 и SREG

TCNT0 (Timer/Counter Register)

OCR0 (Output Compare Register)

SREG

(Status Register)
Слайд 13

Расчет частоты срабатывания прерывания

Расчет частоты срабатывания прерывания

 

 

Слайд 14

Настройка таймера/счетчика 0 void timer_init(void) { TCNT0=0b00000000; //Очистка TCNT0 OCR0=250; //Содержимое

Настройка таймера/счетчика 0
void timer_init(void)
{
TCNT0=0b00000000; //Очистка TCNT0
OCR0=250; //Содержимое компаратора ТС0
TCCR0=0b00001110; //Сброс при совпадении
//Запуск с предделителем

на 256
TIMSK=0b00000010; //Разрешение прерывания по событию //«Совпадение» таймера/счетчика Т0
TIFR=0b00000011; //Очистка флагов
}
Слайд 15

Обработчик прерывания от Т/С0 ISR (TIMER0_COMP_vect) { /*Обработчик прерывания компаратора ТС0*/

Обработчик прерывания от Т/С0
ISR (TIMER0_COMP_vect)
{
/*Обработчик прерывания компаратора ТС0*/
ms_counter++;
if(ms_counter==125)
{
ms_counter=0;
sec_flag=1; //Установка флага события

«секунда»
}
}
Слайд 16

Фрагмент основной программы int main(void) { /// asm ("cli"); //Команда ассемблера

Фрагмент основной программы

int main(void)
{
///
asm ("cli"); //Команда ассемблера "запрет прерываний"
init(); //Вызов функции инициализации

портов
asm ("sei"); //Команда ассемблера "разрешение прерываний"
///
init_lcd(); //Вызов функции инициализации ЖКИ
timer_init();
ms_counter=0;
///
write_str(" 00 HRS 00 MIN"); //Вызов функции вывода строки
lcd_com(0xC3);
write_str("00 SECONDS");
Слайд 17

Фрагмент основной программы while(1) { if (sec_flag==1) //Проверка установки флага события

Фрагмент основной программы

while(1)
{
if (sec_flag==1) //Проверка установки флага события «секунда»
{
sec_flag=0; //Обнуление флага события «секунда»
tim[0]++; //Инкремент

счетчика единиц секунд
if (tim[0]>9) //Проверка переполнения разряда единиц секунд
{
tim[0]=0;
tim[1]++; //Инкремент счетчика десятков секунд
PORTA=~PORTA;
if(tim[1]>5)
{
tim[1]=0;
tim[2]++; //Инкремент счетчика единиц минут
if(tim[2]>9)
{
Слайд 18

Фрагмент основной программы tim[2]=0; tim[3]++; //Инкремент счетчика десятков минут if(tim[3]>5) {

Фрагмент основной программы

tim[2]=0;
tim[3]++; //Инкремент счетчика десятков минут
if(tim[3]>5)
{
tim[3]=0;
tim[4]++; //Инкремент счетчика единиц часов
if((tim[4]>9)&&(tim[5]<2))
{
tim[4]=0;
tim[5]++; //Инкремент

счетчика десятков часов
}
if((tim[4]>3)&&(tim[5]==2))
{
tim[4]=0;
tim[5]=0; //Обнуление счетчика десятков часов
}
}
}
}
}