роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Без описания
Ivan-221 Post Id


Рядовой


Сообщений всего: 2
Дата рег-ции: Сент. 2013  



Привет всем! Вопрос следующий: простая программа - мигание светодиодом, но последняя команда в цикле "_delay_ms(2000);" не отрабатывает как положено. Задержка не 2 сек., а примерно 0,25 сек. или даже меньше. Код следующий:
CODE:

#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <avr/delay.h>

int main(void)
{
DDRA = 0xff;

for (;;)
{
PORTA = 0xff;
_delay_ms(2000);
PORTA = 0x00;
_delay_ms(2000);
}
}

Если "_delay_ms(2000);" перенести в начало цикла, то все работает нормально:
CODE:

#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <avr/delay.h>

int main(void)
{
DDRA = 0xff;

for (;;)
{
_delay_ms(2000);
PORTA = 0xff;
_delay_ms(2000);
PORTA = 0x00;
}
}

Я так и не понял в чем ошибка( Микроконтроллер Attiny 84, среда WinAVR. Буду признателен за любую помощь))

(Отредактировано автором: 18 Сентября, 2013 - 17:17:48)

 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Что-то с тактовой частотой не так.
 
 Top
Ivan-221 Post Id


Рядовой


Сообщений всего: 2
Дата рег-ции: Сент. 2013  



Тогда почему во втором случае работает?))
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



я в АВРах не разбираюсь, но помоему тут какое-то злое колдунство: только потрошить функцию _delay_ms и думать, почему оно вылетает раньше времени....
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru