Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессоры.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
4.83 Mб
Скачать

Практическая работа 7

ПРОГРАММА НА ЯЗЫКЕ АССЕМБЛЕРА С ИСПОЛЬЗОВАНИЕМ ЦИКЛОВ И УСЛОВНЫХ ПЕРЕХОДОВ.

ЦЕЛЬ. Отработать первичные навыки работы с программами на языке Ассемблера.

ЗАДАНИЕ. Составить развёрнутое описание программы управления переключением светодиодного индикатора при помощи одной кнопки, используя листинг 4.3, в котором указать смысл директив и операторов и выполняемые по ним действия.

КОНТРОЛЬНЫЕ ВОПРОСЫ.

Каково назначение главного рабочего регистра ?

Каким и как установлен текущий адрес?

Каково назначение резистора и внутренних резисторов?

Как подключаются внутренние резисторы?

Что обозначают метки main в строках 16, 18 и m1, m2 в строках 21, 24, 25, 27 листинга?

Как выполняются условные переходы?

ЛИТЕРАТУРА. Белов А.В. Разработка устройств на микроконтроллерах AVR. – СПб.: Наука и техника, 2013. – 528 с.: ил. + СD.

Постановка задачи. «Разработать устройство управления одним светодиодом при помощи одной кнопки. При каждом нажатии кнопки светодиод должен поочерёдно включаться и отключаться. При первом нажатии кнопки светодиод должен включиться, при следующем – отключиться и т. д.».

Схема устройства

Алгоритм программы управления управления светодиодом

переключающимся светодиодом

88

Описание алгоритма.

Сразу после старта программы выполняется установка вершины стека.

Следующее действие – программирование портов ввода-вывода.

1. Первая операция цикла – проверка состояния младшего разряда порта PD (PD0)

Программа читает состояние порта, затем сравнивает значение разряда PD0 с единицей.

2. Если сравнение выполняется, то программа переходит по стрелке «Да» к началу цикла.

3. Если «Нет», то выполняется ещё одна операция сравнения, когда определяется, горит ли светодиод. Если РВ0 = 1, то есть светодиод не горит, то разряд сбрасывается в «0», если РВ0 = 0, то есть светодиод горит, то разряд устанавливается в «1», то есть диод гасится.

Эти переключения осуществляются всё время , в течение которого кнопка нажата и программа остановится после отпускания кнопки в случайном состоянии.

Для исключения этого в программу вводится процедура ожидания. По ней программа останавливается после переключения диода и ожидает отпускания кнопки, после чего выполнение главного цикла возобновляется.

Поэтому в программу вводится две операции.

4. Сначала программа читает значение PD0 и сравнивает его с «1». Если PD0 = 0 (кнопка нажата), то цикл ожидания повторяется.

5. Если PD0 = 1 (кнопка отжата), то цикл ожидания прерывается, и управление переходит на начало основного цикла.

Новые команды, применённые в программе.

89

Описание программы

90

Дополнение к описанию практической работы № 7

В задании поставлена задача: «Разработать устройство управления одним светодиодом при помощи одной кнопки. При каждом нажатии кнопки светодиод должен поочерёдно включаться и отключаться. При первом нажатии кнопки светодиод должен включиться, при следующем – отключиться и т. д.».

Последовательность действий в словесной форме отображается так:

  1. Прочитать состояние младшего разряда порта РД.0.

  2. Если значение этого разряда равно единице, перейти к началу цикла (то есть продолжать читать состояние младшего разряда порта

  3. Если значение разряда РД0 равно нулю, изменить состояние выхода РВ.0 на противоположное.

  4. Перейти к началу цикла (то есть читать состояние РД0).

Последовательность действий (алгоритм) удобнее отображать графически.

91

Различные действия, выполняемые программой, отображаются прямоугольником (блоком). Их суть вписывается в прямоугольник. Допускается в одном блоке объеди-нять несколько операций. Последовательность действий показывается стрелками. Ромбик реализует разветвление программы по условию, которое записано внутр. Если условие истинно, то надо идти по пути, обозначенному словом «Да». Если нет, - то по пути «Нет». Прямоугольник со скруглёнными боками – начало и конец алгоритма.

Алгоритм поставленной задачи – на рисунке.

Первые два блока – установка вершины стека и программирование портов ввода – вывода. Основной цикл обведён штриховой линией.

Первая операция – чтение состояния младшего разряда порта Д.

Вторая операция – сравнение значения содержимого разряда с единицей. Если РД0 =1, то программа возвращается к началу цикла.

Если РД0 = 1, то программа идёт по стрелке «Нет», где выполняется третья операция.

Третья операция - сравнение, при котором проверяется состояние светодиода (горит или не горит) и по результату которого светодиод должен переключиться в другое сос-тояние. Если светодиод не горит (РВ0 = 1), то разряд сбрасывается на ноль (0=>РВ0), то

5

есть разряду РВ0 присваивается значение «0», и программа возвращается к началу цикла. Если светодиод горит (РВ0 = 0), то разряду присваивается значение 1 (1=>РВ0), после чего программа возвращается к началу цикла.

Очевидно, основной цикл является бесконечным.

Алгоритм простой, но программа по нему работать не будет, так как скорость работы МК такова, что за время нажатия кнопки основной цикл будет выполнен сотни раз. При каждом проходе программа будет обнаруживать нажатие кнопки и переключать свето-диод. Так быстро, что это будет восприниматься, как свечение в полнакала. В каком именно состоянии программа остановится, зависит от момента отпускания кнопки. А этот момент – величина случайная.

Для того, чтобы программа работала, алгоритм дополняется операцией ожидания.

92