
- •«Встроенные системы на микроконтроллере Atmega16»
- •Оглавление
- •Введение. Управляющие системы на микроконтроллерах.
- •Характеристика микроконтроллеров семейства avr
- •1.1 Особенности микроконтроллеров
- •1.2 Характеристики микроконтроллера aTмega16
- •1.3 Условное графическое обозначение микроконтроллера
- •2 Архитектура микроконтроллера
- •2.1 Структура микроконтроллера
- •2.2 Организация программной памяти
- •Организация памяти данных
- •2.4 Арифметико-логическое устройство и регистр состояния процессора
- •Методы адресации. Форматы команд
- •Система команд
- •2.6.1 Команды передачи данных (пересылки)
- •2.6.2 Команды передачи управления
- •2.6.3 Команды арифметики и логики (вычислительные)
- •2.6.4 Команды сдвигов и операций с битами
- •2.7 Функционирование конвейера
- •3 Встроенные устройства
- •3. 1 Параллельные порты ввода/вывода
- •Подсистема прерываний микроконтроллера
- •Регистр флагов прерываний таймеров/счетчиков – tifr
- •Таймеры/счетчики
- •Общие сведения
- •Таймер/счетчик т0.
- •3.3.3 Таймер/счетчик т1.
- •Сторожевой таймер (Watchdog Timer).
- •3.4 Последовательные интерфейсы -spi и uart
- •3.4.1 Последовательный периферийный интерфейс - spi
- •3.4.2 Uart - универсальный последовательный порт
- •3.5 Аналоговый компаратор и ацп
- •3.5.1 Аналоговый компаратор
- •3.5.2 Аналого-цифровой преобразователь
- •3.6 Энергонезависимая память данных
- •4 Понятия о языках программирования микроконтроллеров
- •4.1 Язык Ассемблер
- •4.2 Язык си
- •4.2.1 Типы данных, объявление данных
- •4.2.2 Операторы
- •4.2.3 Функции
- •4.2.4 Оператор if-else (ветвления )
- •{Группа операторов 1}
- •Пример:
- •4.2.5 Оператор switch
- •4.2.6 Операторы циклов
- •Оператор цикла for
- •Тело цикла
- •Оператор while
- •Операторы тела цикла
- •4.2.7 Указатели
- •4.2.8 Директивы препроцессора
- •5 Взаимодействие микроконтроллера с объектом управления
- •5.1 Формирование временных интервалов (задержек)
- •5.1.1 Программный способ формирования временных интервалов на языке Ассемблер
- •Ext_l: ldi r17, X ;х – число внутренних циклов
- •Ext_l: ldi r17, 53 ;Загрузка в r17 константы внутреннего цикла
- •Программный способ формирования временных интервалов на языке си
- •5.2 Генерация импульсных сигналов управления с использованием программных задержек
- •5.2.1 Генерация последовательности импульсов с использованием программных задержек
- •5.2.2 Генерация пакета импульсов
- •5.2.3 Генератор заданного числа пакетов импульсов
- •Формирование импульсных сигналов управления с использованием таймеров микроконтроллера
- •5.4 Ожидание внешних событий
- •5.5 Обработка динамического дисплея
- •5.6 Особенности схемы дисплея в учебной системе управления.
- •5.7 Часы
- •5.8 Измерение временных параметров импульсов
- •5.9 Обработка клавиатуры
- •Дубров ф.И. Встроенные системы управления на микроконтроллере aTmega16
Оператор цикла for
Оператор for - это наиболее общий способ организации цикла. В этом операторе используется переменная цикла или счетчик числа повторений.
Оператор имеет следующий формат:
for ( выражение 1 ; выражение 2 ; выражение 3 )
{
Тело цикла
}
Выражение 1 используется для присвоения начального значения переменной циклов. Выражение 2 - это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение 3 определяет изменение переменной цикла после каждого выполнения тела цикла.
Схема выполнения оператора for:
1. Вычисляется выражение 1.
2. Вычисляется выражение 2.
3. Если значение выражения 2 не равно нулю ( соответствует понятию истинно), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (соответствует понятию ложно), то управление передается на оператор, следующий за оператором for.
Проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.
Пример: Вычисление квадратов чисел от 1 до 9. Результаты помещаются в массив.
unsigned char i, b; //Объявление переменных
unsigned char mass_result [9] ; //Объявление массива результата
unsigned char main ( )
{
for ( i = 1; i < 10; i + + )
{
mass_result [ i - 1 ] = i * i ; // Тело цикла.
}
}
Переменные цикла принимают значения от 1 до 9 с шагом равным 1.
Последовательность выполнения:
присвоение i =1;
проверка: так как 1 < 10, то выполняется п.3;
выполняется тело цикла: элементу массива с индексом равным нулю
(т. к. i – 1 = 1-1=0 ) присваивается результат умножения i * i т.е. 1*1 = 1;
3. переменной i присваивается значение 2, так как i + + ;
переход к пункту 2. , т.е проверка: 2 < 10. Снова выполняется тело цикла: элементу массива с индексом равным единице (т. к. i – 1 = 2 – 1 = 1 ) присваивается результат умножения i * i т.е. 2 * 2 = 4. Снова выполняется п.4. Теперь переменной i присваивается значение 3, так как i + + и так далее.
Пример соответствует алгоритму.
Оператор while
Оператор цикла while называется циклом с предусловием и имеет следующий формат:
while (выражение)
{
тело цикла;
}
В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:
1. Вычисляется выражение в скобках.
2. Если выражение ложно ( т.е. равно нулю), то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно (т.е. не равно нулю), то выполняется тело оператора while и процесс повторяется с пункта1.
Пример: Вычисление квадратов чисел от 1 до 9. Результаты помещаются в массив.
unsigned char i = 1, b; //Объявление переменных и присвоение i = 1.
unsigned char mass_result [9] ; //Объявление массива результата
unsigned char main ( )
{
while ( i < 10 )
{
mass_result [ i - 1 ] = i * i ; // В теле цикла два оператора
i + + ; // Увеличение на единицу переменной i
}
}
Для непрерывно выполняющегося цикла ( бесконечного цикла) можно использовать оператор
while ( 1 )
{