Atmega32 В Atmel Studio 6

4-08-2014, 15:36 От: admin Посмотрели: 634
Привет, помогите разобраться с программой.





В программе 16-ти битный таймер микроконтроллера при переполнении увеличивает значение переменной. Если это значение превысит допустимое то мк должен "простаивать" пока не будет получен сигнал лог1 на определенную ногу.

Имеется датчик, который время от времени посылает сигнал лог1. В Atmel Studio все работает правильно. Но когда закидываю в микросхему то происходит не так как при отладке. А именно ведёт себя так, будто никакого таймера нет и счёт не начинался, соответственно устройсво не "уходит в сон".




/*
* Led_control.cpp
*
* Created: 26.07.2014 17:40:33
* Author: World-12
*/
#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

int Delay1;
//unsigned short int LedNum;

void init ()//Загрузка портов
{
sei(); //Разрешение глобальных прерываний , флаг I
DDRD = 0b00111111;//Port D and A to output
DDRA = 0b01111111;
PORTD = 0b00000001;
PORTA = 0b00000001;
//PORTB = 0b00000100;//Подтягивающий резистор на PORTB.2
//INT2
GICR = 0b00100000;//Разрешение прерывания по INT0 - INT2.
MCUCSR = 0b01000000;// Прерывание по rising
//GIFR Это флаги возникших прерываний INTF0 - INTF2. При входе в вектор прерывания они сбрасываются.
//MCUCSR = 0b01000000; // Формировать прерывание при смене с лог1 на лог0.]
//TIMER
TCCR1B = 0b00000101;// Предделитель 1024
TIMSK = 0b00000100;// Разрешить прерывание для OverFlow Timer 1
}

ISR(TIMER1_OVF_vect)
{
/* 65535 Циклов у 16-ти битного счетчика, c предделителем 67107840
8,38848 с можно получить за один цикл с предделителем 1024*/
Delay1 ++;
_delay_us(10);
//Пример округления. float round (float x);
}

ISR (INT2_vect)
{
Delay1 = 0;
PORTA = 0b00000001;
PORTD = 0b00000001;
}

void working()
{
PORTD <<= 1;

if( PORTD & 0b01000000 )
{ PORTA <<= 1;
PORTD = 0b00000001; }

if(PORTA & 0b10000000)
{ PORTA = 0b00000001; }
}

int main()
{
init();//Один раз инициализируемся
while(1) {


while(Delay1 < 2)
{ working();
_delay_us(111);

}

PORTA = 0x00;
PORTD = 0x00;
_delay_ms(1000);

}
}

Раздел: AVR

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Atmega32 В Atmel Studio 6 все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031