Оператор if-else или как сделать программу более гибкой

2014-11-23

Оператор 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)

Откомпилированная тестовая программа(компилятор mpasm)

Рисунок 3 – Откомпилированная тестовая программа(компилятор mpasm).

Как видно из примера один из фрагментов кода, который отвечает за включение зеленых светодиодов, просто не был включен в готовую прошивку.

Теперь изменим условие компиляции, чтоб включились зеленые светодиоды.

Для mpasm:

LED       set       GREEN

Для MikroC:

#define   LED       GREEN

Вновь откомпилируем программу и запустим модель в протеусе. На рисунке 4 можно увидеть, как включились только зеленые светодиоды.

Результат работы тестовой программы

Рисунок 4 - Результат работы тестовой программы.

Теперь посмотрим на откомпилированный текст программы. В этот раз в готовую прошивку вставлен фрагмент кода, который отвечает за включение зеленых светодиодов (рисунок 5).

Откомпилированная тестовая программа(компилятор mpasm)

Рисунок 5 – Откомпилированная тестовая программа(компилятор mpasm).

Как видите метод довольно интересный. И это был всего лишь простой пример того, как можно применять в своих программах оператор условной компиляции if-else. Буду рад ответить на возникшие вопросы и обсудить Вашу точку зрения. Спасибо за внимание!

Интересное видео

Файлы к статье:

Оператор if-else или как сделать программу более гибкой(статья pdf)

Архив с проектом

Прочитано 3643 раз

Понравилась статья? Помоги и остальным о ней узнать! Это просто.

Добавлять комментарии могут только зарегистрированные пользователи.

Все права защищены. При указании активной, индексируемой ссылки на сайт MICROPAS.RU, полное или частичное использование материалов разрешается. Уважайте чужие труды! Не забывайте проставлять ссылки! Правообладателям
© Ерёмин Антон Юрьевич 2013-2021гг.