Перейти к содержанию

Сергей Фомин

Members
  • Постов

    1
  • Зарегистрирован

  • Посещение

Весь контент Сергей Фомин

  1. Изучаю прерывания на attiny13. Пока остановился на прерываниях по переполнению. Сделал тестовый код в Atmel Studio и сразу через программатор заливаю на тиньку со светодиодом. Проблема в том что гореть он должен 10 секунд и выключаться, а горит примерно 20-23 секунды. Прошу помощи в правильном расчёте. Код ниже (пока учусь сильно не ругайтесь) : #define F_CPU 1000000 #define LED PB2 #include <avr/io.h> //#include <util/delay.h> #include <avr/interrupt.h> unsigned char work_time =384; // 1000000/1024/256=3.8 (0.026 сек) 10/0.026=384 volatile unsigned char temp =0; ISR (TIM0_OVF_vect) { TCNT0=0x00; temp ++; if (temp>=work_time) { PORTB &=~(1<<LED); //Инвертируем состояние TCCR0B=0x00 // остановка таймера cli (); //общее запрещение прерываний } } int main (void) { init(); while (1) { } } void init () { DDRB |= (1<<LED); // выход PORTB =(1<<LED); //включен TCCR0B =0x05; // установка делителя на 1024 TIMSK0 |= _BV(TOIE0); sei(); // Либо SREG |= (1<<SREG_I); //Разрешаем прерывания глобально TCNT0 = 0X00; //Обнулить счётный регистр }
×
×
  • Создать...