Оператор if-else или как сделать программу более гибкой - статья в которой расскажу, как добиться гибкости для своих программ. В статье будет рассмотрен конкретный пример, что придаст наглядности. Решил поделиться с посетителями сайта небольшой хитростью. А может не совсем и хитростью, но как менее опытом. Сам постоянно пользуюсь этим оператором. Фотографии разных электронных устройств - Разное.
В статье будут рассмотрены примеры для компилятора mpasm и MikroC.
Итак, напишем небольшую программку, в программе создадим условие, при котором можно будет при включении зажигать, то красные, то зеленые светодиоды. Для комфортной работы предлагаю создать переменную LED, которую будем инициализировать неким значением, а в условии проверять на совпадение значений. Значение можно выбрать любые, но мне приглянулись 0 и 1. А чтоб было совсем удобно, предлагаю создать еще две переменных - RED и GREEN и проинициализировать их начальными значениями 0 и 1 соответственно.
Вот что должно получиться:
Для mpasm
RED equ .0 GREEN equ .1 LED set RED
Для MikroC
#define RED 0 #define GREEN 1 #define LED RED
Теперь разберемся с условием. Обращаю Ваше вниманием на то, что мы используем оператор условной компиляции. Поэтому условие должно быть решаемым на этапе компиляции программы, а не во время выполнения. Из-за недопонимания данного утверждения возникает большое количество ошибок.
Общий пример, чтоб понять суть:
if(условие истинно) В программу будет вставлен этот фрагмент кода. else Этого фрагмента кода в рабочей программе не будет endif if(условие не истинно) Этого фрагмента кода в рабочей программе не будет else В программу будет вставлен этот фрагмент кода. endif
Таким образом, можно управлять размером рабочей программы. Компилятор просто будет игнорировать один из блоков кода, в зависимости от условия. В качестве условия можно применять и арифметические операции, которые должны быть решаемыми на этапе компиляции. Подобный метод использовался для написания библиотеки для работы с датчиками DS18B20/DS18S20.
Чтобы добавить наглядности нашему проекту создадим упрощенную схему микроконтроллерного устройства в программе протеус, рисунок 1.
Рисунок 1 – Упрощенная модель устройства на микроконтроллере для проверки программы условной компиляции.
Собственно основа устройства – микроконтроллер PIC16F628A, четыре светодиода(два из них красных, два зеленых).
Теперь попробуем включить два красных светодиода, используя описанное ниже условие.
Для mpasm:
if LED == RED bsf PORTB,2 ;Красные светодиоды bsf PORTB,3 bcf PORTB,0 bcf PORTB,1 else bsf PORTB,0 ;Зелёные светодиоды bsf PORTB,1 bcf PORTB,2 bcf PORTB,3 endif
Для MikroC:
#if LED == RED PORTB.F2 = 1; //Красные светодиоды PORTB.F3 = 1; PORTB.F0 = 0; PORTB.F1 = 0; #else PORTB.F0 = 1; //Зелёные светодиоды PORTB.F1 = 1; PORTB.F2 = 0; PORTB.F3 = 0; #endif
Откомпилировав программу, запускаем протеус. Как видно на рисунке 2 включились только два красных светодиода.
Рисунок 2 - Результат работы тестовой программы.
Если заглянуть в откомпилированный код(компилятор mpasm), то можно увидеть только верхний блок кода, который отвечает за включение красных светодиодов(рисунок 3)
Рисунок 3 – Откомпилированная тестовая программа(компилятор mpasm).
Как видно из примера один из фрагментов кода, который отвечает за включение зеленых светодиодов, просто не был включен в готовую прошивку.
Теперь изменим условие компиляции, чтоб включились зеленые светодиоды.
Для mpasm:
LED set GREEN
Для MikroC:
#define LED GREEN
Вновь откомпилируем программу и запустим модель в протеусе. На рисунке 4 можно увидеть, как включились только зеленые светодиоды.
Рисунок 4 - Результат работы тестовой программы.
Теперь посмотрим на откомпилированный текст программы. В этот раз в готовую прошивку вставлен фрагмент кода, который отвечает за включение зеленых светодиодов (рисунок 5).
Рисунок 5 – Откомпилированная тестовая программа(компилятор mpasm).
Как видите метод довольно интересный. И это был всего лишь простой пример того, как можно применять в своих программах оператор условной компиляции if-else. Буду рад ответить на возникшие вопросы и обсудить Вашу точку зрения. Спасибо за внимание!
Интересное видео
Файлы к статье:
Оператор if-else или как сделать программу более гибкой(статья pdf)