Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Postal_666
0 / 0 / 0
Регистрация: 17.05.2018
Сообщений: 2
1

Не работают прерывания по таймеру ATtiny13a

17.05.2018, 20:25. Просмотров 362. Ответов 3
Метки нет (Все метки)

Добрый день, уже замучился, что только не пробовал: менял компиляторы(WinAVR, AtmelStudio4,7), менял операционные системы. Прерывания по таймеру не работают. Может вы ошибку заметите:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
 
ISR(TIM0_OVF_vect)
{
    TCNT0=0xA2;
    tm++;
    PORTB |= (1 << PB0);      
}
 
 
int main(void)
{
DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
PORTB=(0<<PB5) | (0<<PB4) | (0<<PB3) | (0<<PB2) | (0<<PB1) | (0<<PB0);
 
TCCR0B = (1<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0xA2;
 
OCR0A=0x00;
OCR0B=0x00;
 
sei();
 
    while(1)
{
        
      if ((PINB&(1 << PB2)) != 0)
      {
        PORTB &= ~((1 << PB0));
      }
     
 }
 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2018, 20:25
Ответы с готовыми решениями:

ATTiny13a нет прерывания с АЦП.
Добрый день! Столкнулся с проблемой, на реальном устройстве не генерируется прерывание с АЦП по...

Прерывания по таймеру Т1 в Atmega8
Нужно на одном таймере Т1 (16 бит) в Atmega8 получить 2 разных вектора А и В прерывания. Даташит:...

Прерывания по таймеру
Подскажите как сделать что бы прерывания от таймера срабатывало раз в секунду. Сильно не ругайте...

Прерывания по таймеру в PLC 1200
Всем хорошего дня. Столкнулся с проблемой. В PLC 200 есть команды для програмирования прерываний...

Прерывания по таймеру на Arduino Due (Atmel SAM3X8E)
Каким образом можно организовать прерывание по таймеру на Arduino due(sam3x8e)? Стандартные...

3
tatarva87
98 / 19 / 8
Регистрация: 23.03.2018
Сообщений: 94
17.05.2018, 20:30 2
Чтоб запустить работу таймера0 необходимо еще установить бит 1 регистра TIMSK0 (TOIE0):
C++
1
TIMSK0=0b00000010;
этой строки у тебя нет.
0
COKPOWEHEU
1251 / 897 / 209
Регистрация: 09.09.2017
Сообщений: 3,815
17.05.2018, 20:41 3
Только не "бит 1 регистра TIMSK0" а бит TOIE0
C
1
TIMSK0 |= (1<<TOIE0);
Причем это для режима Normal.
Но в ATtiny13 есть еще режим CTC, который для вашей задачи, наверное, лучше:
C
1
2
3
4
5
6
7
8
9
10
ISR(TIM0_COMPA_vect){
  tm++; //кстати, где эта переменная объявлена?
  PORTB |= (1 << PB0); 
}
 
TCCR0A = (1<<WGM01 | 0<<WGM00);
TCCR0B = (0<<WGM02 | 0b101<<CS00); //F_CPU/1024
OCR0A = 94; //F_CPU/1024/95 = F_CPU/97280 ~ 0.1s (при F_CPU=1MHz)
TIMSK0 = (1<<OCIE0A);
sei();
0
Postal_666
0 / 0 / 0
Регистрация: 17.05.2018
Сообщений: 2
23.05.2018, 20:02  [ТС] 4
Спасибо, запустился
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2018, 20:02

Не работают прерывания
Вот такой код прекрасно компилится МАСМом, но при запуске екзешника выдает ошибку(Windows Side...

Не работают внеш. прерывания
Не работаю внеш. прерывания. Ставлю брекпойнты в EXTI0_IRQHomdler и EXTI1_IRQHomdler не попадаю....

Как работают функции прерывания
Добрый день! Я никак не могу понять, как работают функции прерываний в ассемблере (MASM). Вот,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru