
- •Розробка мікропроцесорної системи на основі мікроконтролера
- •6.1.1. Основні етапи розробки
- •6.1.2. Розробка і налагодження апаратних засобів
- •6.1.3. Розробка і налагодження програмного забезпечення
- •6.1.4. Методи і засоби спільного налагодження апаратних і програмних засобів
- •6.2. Розробка програмного забезпечення для pic-мікроконтролерів
- •6.2.1. Асемблер mpasm
- •Модуль таймера і регістр таймера
- •Організація переривань
- •Режим захвата
- •18 Модуль компаратора.
- •19 Опорна напруга для компараторів.
- •Процессор, микропроцессор, оэвм, сигнальный процессор.
- •Особенности микроконтроллеров Microchip средней серии.
- •Составление программ.
- •Особенности условных операторов
- •Программирование циклов
- •Организация памяти данных.
- •Косвенная адресация.
- •Использование макросов.
- •Команда пересылки регистр-регистр.
- •Особенности организации памяти в микроконтроллерах расширенной серии.
- •Параллельные порты ввода - вывода.
- •Особенности микроконтроллеров расширенного семейства:
- •Организация памяти программы.
- •Варианты работы с памятью:
- •Таймер 0.
- •Прерывания.
- •Особенности системы прерываний расширенного семейства:
- •Таймеры 1 и 2.
- •Общие сведенья о телемеханике.
- •Способы кодирования.
- •Токовая петля (интерфейс).
- •Синхронные интерфейсы.
- •Новые микроконтроллеры.
- •Микроконтроллеры расширенного семейства.
- •Дискретные датчики.
- •Дискретные нагрузки.
- •Элементы индикации:
- •Динамическая индикация.
- •Лекція на тему «Альтернативи»
- •Приклад написання програми
- •Загальна інформація про цикл.
- •Види циклів і їх характеристика.
- •Приклад програми
- •1. Загальна інформація про цикл.
- •2. Види циклів і їх характеристика.
- •2.1. Цикл з лічильником
- •2.2 Цикл з виходом з середини
- •2.3 Цикл з перед умовою
- •2.4 Цикл з пост умовою
- •3. Приклад роботи циклу
- •3.2 Приклад 2
2. Види циклів і їх характеристика.
Сьогодні ми переглянемо необхідну кількість циклів яку потрібно знати, для звичайного моделювання: безумовні цикли, цикл з передумовою, цикл з після умовою, цикл з виходом з середини, цикл з лічильником. Зараз ми з вами розглянемо такі види циклів:
2.1. Цикл з лічильником
Цикл з лічильником - цикл, у якому деяка змінна змінює своє значення від заданого початкового значення до кінцевого значення з деяким кроком, і для кожного значення цієї змінної тіло циклу виконується один раз. У більшості процедурних мов програмування реалізується оператором for, в якому вказується лічильник (так звана "змінна циклу"), необхідну кількість проходів (або граничне значення лічильника) і, можливо, крок, з яким змінюється лічильник. Неоднозначним є питання про значення змінної по завершенні циклу, в якому ця змінна використовувалась як лічильник.
Виникає питання: яке значення буде в підсумку присвоєно змінної k: 9, 10, 100, може бути, якесь інше? А якщо цикл завершиться достроково? Відповіді залежать від того, чи збільшується значення лічильника після останньої ітерації і не змінює Чи транслятор це значення додатково. Ще одне питання: що буде, якщо всередині циклу лічильнику буде явно присвоєно нове значення? Різні мови програмування вирішують дані питання по-різному. У деяких поведінку лічильника чітко регламентовано. В інших, наприклад, в тому ж Паскалі, стандарт мови не визначає ні кінцевого значення лічильника, ні наслідків його явної зміни в циклі, але не рекомендує змінювати лічильник явно і використовувати його по завершенні циклу без повторної ініціалізації. Програма на Паскалі, ігнорує цю рекомендацію, може давати різні результати при виконанні на різних системах і використанні різних трансляторів.
Зовні аналогічна вищенаведеному циклу на Паскалі, трактується однозначно: змінної k буде присвоєно значення 100, оскільки змінна i, використовувана поза даного циклу, не має ніякого відношення до лічильника i, який створюється і змінюється всередині циклу. Подібне відокремлення лічильника зручно і безпечно: не потрібний окремий опис для нього і мінімальна ймовірність випадкових помилок, пов'язаних з випадковим руйнуванням зовнішніх по відношенню до циклу змінних. Якщо програмістові потрібно включити в готовий код цикл з лічильником, то він може не перевіряти, чи існує змінна з ім'ям, яке він вибрав в якості лічильника, не додавати опис нового лічильника в заголовок відповідної процедури, не намагатися використовувати один з наявних, але в даний момент "вільних" лічильників. Він просто пише цикл із змінною-лічильником, ім'я якій йому зручно, і може бути впевнений, що ніякої колізії імен не відбудеться.
Цикл з лічильником завжди можна записати як умовний цикл, перед початком якого лічильнику присвоюється початкове значення, а умовою виходу є досягнення лічильником кінцевого значення; до тіла циклу при цьому додається оператор зміни лічильника на заданий крок. Однак спеціальні оператори циклу з лічильником можуть ефективніше транслюватися, так як формалізований вигляд такого циклу дозволяє використовувати спеціальні процесорні команди організації циклів.
У деяких мовах, наприклад, Сі та інших, що відбулися від нього, цикл for, незважаючи на синтаксичну форму циклу з лічильником, насправді є циклом з передумовою. Тобто в Сі конструкція циклу:
for ( i = 0 ; i < 10 ; + + i ) { ... тіло циклу }
фактично являє собою іншу форму запису конструкції [1] :
i = 0 ; while ( i < 10 ) { ... тіло циклу + + i ; }
Тобто в конструкції for спочатку пишеться довільне пропозицію ініціалізації циклу, потім - умова продовження і, нарешті, виконувана після кожного тіла циклу деяка операція (це не обов'язково має бути зміна лічильника; це може бути правка покажчика або яка-небудь зовсім стороння операція). Для мов такого виду вищеописана проблема вирішується дуже просто: змінна-лічильник поводиться цілком передбачувано і по завершенні циклу зберігає своє останнє значення.