Консультации по вопросам программирования микроконтроллера ATmega8

При написании программ для разнообразных микроконтроллеров у радиолюбителей могут возникнать разнообразные вопросы,в частности по программированию встроенного таймера. Рассмотрим это на примере программирования популярного микроконтроллера производства компании ATMEL ATmega8 vk.com/topic-8884474_29225932:

Александр спрашивает:

"Подскажите правильно ли написан код задержки для таймера T0?

/**************************************************************************************
Имя функции: delay_10us
Описание: Функции выполняет задержку 10мкс на таймере T0
Принимаемое значения: Нет.
Возвращаемые значения: Нет.
**************************************************************************************/
void delay_10us()
{
TCNT0 = 175; // При частоте 8МГц, 10мкс = 80 тактам (255 - 80 = 175)
TCCR0 |= (1«0); // CS00 = 1; CLK = CLKcpu; Старт таймера T0
while ((TIFR & (1«0)) != 1)
{
// Ждем переполнения таймера T0
}
TCCR0 &= ~(1«0); // Остановка таймера
TIFR &= ~(1«0); // Сбрасываем флаг переполнения T0
}
/**************************************************************************************
Конец функции delay_10us
***************************************************************************************/ "

Николай отвечает:

"Александр, подобные функции есть и в CodeVision и в AVRStudio (GCC) и в IAR, насколько я помню.
Что бы получить доступ к функциям программных задержек, надо в начале файла написать следующее
// Указываем частоту, если она не задана в проекте
#ifndef F_CPU
#define F_CPU 20000000
#endif
#include
#include // Подключаем макросы задержек

_delay_ms(100); // задержка 100 мс
_delay_Us(100); // задержка 100 мкс"

Александр пишет:

"Николай, сделал как вы посоветовали, прикрепил include теперь студия поняла что такое _delay_ms(). Спасибо"

Николай отвечает:

"Александр, я в предыдущем ответе ошибся. Надо _delay_us() вместо _delay_Us() .
У этих макросов есть ограничения, в документации подробно расписано vk.com/away.php?to=http%3A%2F%2Fwww.nongnu.org%2Favr-libc%2Fuser-manual%2Fgroup__util__delay.html"

Александр подытоживает:

"Николай, после того как указал CPU выдает Warning 1 #warning "F_CPU not defined for " [-Wcpp] это критично?
Николай, написал #define F_CPU 8E6
#include варнинг пропал."