Dron Kosher

пермененная + таймер = непонятное

9 сообщений в этой теме

Dron Kosher    0

Всем привет.

Не могу понять почему переменная temp не выставляется в единицу... хотя само прерывание срабатывает...

attiny13
 

#include <avr/io.h>
#include <avr/interrupt.h>


unsigned int temp;


ISR(TIM0_OVF_vect)
{
    temp=1;
    PORTB ^= 1;
    TCNT0  = 0;
}


    
int main(void)
{
    PORTB  =  0b00111111;
    DDRB   =  0b00000111;

    // Таймер
    TCCR0A = 0;
    TCCR0B = 0b00000101; //делитель
    TCNT0  = 0;
    TIMSK0 = 0b00000010; // Разрешение прерываний по переполнению
    
    sei();
    while (1) {
        
        if (temp==1) {
            PORTB ^=2;
            temp=0;
            }
    }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
kt118    39

А как вы определяете что она не выставляется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dron Kosher    0

нарисовал схемку в протеусе с диодиками

диодик на PB1 не мигает, а должен :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
kt118    39

Вы и схему выложите.

Изменено пользователем kt118

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    213

Все переменные, которые используются и в обработчиках прерываний и в главном цикле, обязательно должны объявляться volatile, т.е. так:

volatile unsigned int temp;

Запомните это простое правило раз и навсегда.

  • Лайк 2
  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dron Kosher    0

ARV благодарю, действительно заработало.

 

странно, что это правило ни в одном из попавшихся мне примеров не упоминается и не используется

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    213

Об этом многократно повторено на всех форумах, во всех статьях и книгах, во всех описаниях и руководствах, посвященных avr-gcc. Ну и понимание самого стандарта языка Си тоже не помешает. Вы просто недостаточно хорошо изучили язык Си, только и всего.

Изменено пользователем ARV

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dron Kosher    0

да с Си у меня очень плохо, может посоветуете книгу для начинающего?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    213

Классика: Керниган, Ричи "Язык Си"

Немного всего по-чуть-чуть, в том числе по Си и по avr-gcc в частности, в моих статьях: http://www.simple-devices.ru/index.php?option=com_content&view=article&id=12:winavr-avr-studio&catid=7:soft&Itemid=10 (несколько устарело, но для начала сойдет).

  • Одобряю 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас