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

Тема 2.13 Примеры программ ввода-вывода

      1. Программа статической индикации

      2. Программа динамической индикации

      3. Программа с опросом кнопки

      4. Программа «Переключающийся светодиод»

      5. Программа «Борьба с дребезгом»

2.13.1 Программа статической индикации

Постановка задачи. В схеме лабораторного комплекса «Микроконтроллеры и автоматизации» два семисегментных индикатора подключены сегментами к порту С. Индикатор HG1 включается сигналом PB.2=1, HG2 - сигналом PB.3=1. Требуется:

    1. высветить на индикаторе HG2 цифру 0;

    2. высветить на индикаторе HG1 цифру 5;

    3. высветить на индикаторах число 77

Рисунок 1 – Схема подключения индикаторов

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

Рисунок 2 – Алгоритм программы статической индикации

;Автор Воробьева Н.Г.

;дата 5.02.2010

;Имя файла "stat"

;для AVR ATtiny2313

;тактовая частота: по умолчанию

;Выполняемые функции: высветить символ «0» на индикаторе HG2 c ОА,

;==============================

.include "m8535def.inc" ;присоединение файла описания

; имен микроконтроллера ATmega8535

;=============================

;конфигурация портов В и С на вывод

ldi r16,$ff

out ddrb,r16

out ddrс,r16

;==============================

cbi portb,2 ;выключить HG1

sbi portb,3 ;включить HG2

ldi r16,$3f ;код символа «0»

out portc,r16 ;вывести код символа «0»

2.13.2 Программа динамической индикации

Постановка задачи: высветить на семисегментных индикаторах (рисунок 1) число 10.

Рисунок 3 – Алгоритм программы динамической индикации

;Автор Воробьева Н.Г.

;дата 5.02.2010

;Имя файла "dinam"

;для AVR ATtiny2313

;тактовая частота по умолчанию

;Выполняемые функции: высветить число «10» на индикаторах HG1,HG2

;==============================

.include "m8535def.inc" ;присоединение файла описания

; имен микроконтроллера

;=============================

;конфигурация портов В и С на вывод

ldi r16,$ff

out ddrb,r16

out ddrс,r16

;===========================

;установка начального адреса стека

ldi r16,$ff ;адрес вершины стека

out spl,r16

;================================

;основной цикл

loop:

sbi portb,2 ;включить HG1

cbi portb,3 ;выключить HG2

ldi r16,$06 ;код символа «1»

out portc,r16 ;вывести код символа «1»

rcall delay ;вызов подпрограммы задержки

cbi portb,2 ;выключить HG1

sbi portb,3 ;включить HG2

ldi r16,$3f ;код символа «0»

out portc,r16 ;вывести код символа «0»

rcall delay ;вызов подпрограммы задержки

rjmp loop

;================================

;подпрограмма задержки

;при рабочей частоте 8 МГц время паузы примерно 40мс

delay:

ldi r27,$ff ;запись второй уставки времени

run1:

ldi r28,$ff ; запись первой уставки времени

run:

dec r28 ;r28-1

brne run ;прыжок, если результат не равен 0

dec r27 ;r27-1

brne run1 ;прыжок, если результат не равен 0

ret ;возврат из подпрограммы

2.13.3 Программа с опросом кнопки

Постановка задачи. Кнопка SB1 подключена к PA.1 (=1 при включении). В исходном состоянии кнопка не нажата и на индикаторе HG2 высвечивается цифра 0, при нажатии кнопки на индикаторе HG2 высвечивается цифра 8.

Рисунок 4 – Алгоритм программы

;Автор Воробьева Н.Г.

;дата 5.02.2010

;Имя файла "opros"

;для AVR ATmega8535

;тактовая частота: по умолчанию

;Выполняемые функции: если кнопка SB1 (PA.1)не нажата высветить цифру «0» на индикаторе HG2, при нажатии кнопки высветить цифру «8»

;==============================

.include "m8535def.inc" ;присоединение файла описания

; имен микроконтроллера ATmega8535

;=============================

;конфигурация портов В и С на вывод, линии PA.1на ввод с подтягивающим резистором

ldi r16,$ff

out ddrb,r16

out ddrс,r16

out porta,r16

cbi ddra,1

;==============================

sbi portb,3 ;включить HG2

ldi r16,$3f ;код символа «0»

out portc,r16 ;вывести код символа «0»

opros:

sbis pina,1 ;пропустить след. команду, если

;кнопка нажата

rjmp opros

ldi r16,$7f ;код символа «8»

out portc,r16 ;вывести код символа «8»

Урок 30 Продолжение темы 2.13

2.13.4 Программа «Переключающийся светодиод»

Постановка задачи: при каждом нажатии кнопки SB1 (PA.1) светодиод VD4 поочередно включается и выключается.

Рисунок 5 – Алгоритм программы с переключающимся светодиодом

;Автор Воробьева Н.Г.

;дата 5.02.2010

;Имя файла "on_off"

;для AVR ATmega8535

;тактовая частота: по умолчанию

;Выполняемые функции: с каждым нажатием кнопки SB1 (PA.1)светодиод VD4 (PD.4) поочередно включается и выключается

;==============================

.include "m8535def.inc" ;присоединение файла описания

; имен микроконтроллера ATmega8535

;=============================

;конфигурация порта D на вывод, линии PA.1на ввод с подтягивающим резистором

ldi r16,$ff

out ddrb,r16

out porta,r16

cbi ddra,1

;-------------основная программа--------------------

loop:

sbis pina,1 ;пропустить следующую команду, если ;кнопка нажата

rjmp loop

sbis pind,4 ;пропустить следующую команду, если VD4

;зажжен

rjmp on ;прыжок, чтобы зажечь светодиод

сbi portd,4 ;выключить VD4

rjmp loop ;прыжок на начало основной программы

on:

sbi portd,4 ;включить VD4

rjmp loop ;прыжок на начало основной программы

В данной программе не учтены две особенности, связанные с опросом клавиши: дребезг контактов клавиши и несогласованность по быстродействию программы и кнопки.

После того как клавиша нажата, начинается дребезг – быстрое, кратковременное замыкание – размыкание контакта кнопки. Время дребезга 20-100 мс. При рабочей частоте 4-16МГц программа успеет отреагировать на нажатие кнопки (первое замыкание контакта) и вернуться в начало за несколько микросекунд. Продолжающийся дребезг будет принят за нажатие кнопки и программы вновь переключит светодиод.

Рисунок 6 – Несогласование опроса клавиши и времени ее нажатия

В результате, функционирование программы будет выглядеть следующим образом: как только кнопка будет нажата, светодиод начнет переключаться так быстро, что его мерцание не будет заметно, и будет казаться, что он светится вполнакала. При отпускании кнопки светодиод может оказаться включен или выключен, то есть его состояние не определено.

Чтобы решить проблемы дребезга и несогласования по быстродействию следует усовершенствовать алгоритм программы.

2.13.5 Программа «Борьба с дребезгом»

Постановка задачи: при каждом нажатии кнопки SB1 (PA.0) светодиод VD4 поочередно включается и выключается. В программе предусмотрена борьба с дребезгом контактов и согласование микроконтроллера и кнопки по быстродействию.

Для подавления дребезга использована пауза примерно 20 мс. Для надежности опрос кнопки после паузы повторяется. Для согласования по быстродействию в программу введено ожидание отпускания кнопки (рисунок 7).

Рисунок 7

Рисунок 8 – Алгоритм программы борьбы с дребезгом

;---------------------------------------------------------- ;Программа переключения светодиода VD4 от кнопки SB1

; при нажатии кнопки, светодиод переключается

;в программе предусмотрено подавление дребезга и согласова- ;ние по быстродействию

;---------------------------------------------------------- .include”m8535def.inc” ;включить файл описания ATmega8535

;--------инициализация стека

ldi r16,$ff ;адрес вершины стека

out spl,r16

;---конфигурация порта D на вывод, линии PA.1на ввод с

;подтягивающим резистором

ldi r16,$ff

out ddrb,r16

out porta,r16

cbi ddra,1

loop:

sbis pina,1 ;пропустить следующую команду, если ;кнопка SB1 нажата

rjmp loop

again:

rcall delay ;вызов подпрограммы задержки

sbis pina,1 ;пропустить следующую команду, если ;кнопка SB1нажата

rjmp again

sbis pind,4 ;пропустить следующую команду, если ;светодиод VD4 зажжен

rjmp on ;прыжок, чтобы зажечь светодиод

сbi portd,4 ;выключить VD4

rjmp finish ;прыжок

on:

sbi portd,4 ;включить VD4

finish:

sbic pina,1 ;пропустиь след. команду, если кнопка ;отпущена

rjmp finish ;прыжок

else:

rcall delay ;вызов подпрограммы задержки

sbic pina,1 ;пропустить следующую команду, если ;кнопка отпущена

rjmp else

rjmp loop ;зацикливание

;---------Подпрограмма задержки-----------------------------

;при рабочей частоте 16МГц время паузы примерно 20мс

delay:

ldi r27,$ff ;запись уставки времени УВ2

run1:

ldi r28,$ff ;запись уставки времени УВ1

run:

dec r28 ;декркемент УВ1

brne run ;прыжок, если не равно 0

dec r27 ; декркемент УВ2

brne run1 ;прыжок, если не равно 0

ret ;возврат из подпрограммы

Самостоятельные задания:

  1. Высветить на семисегментном индикаторе HG2 символ «5». Индикатор HG1 погашен.

  2. Высветить на семисегментном индикаторе HG1 символ «7». Индикатор HG1 погашен.

  3. Высветить на семисегментных индикаторах HG1, HG2 символы «- -».

  4. Высветить на семисегментных индикаторах надпись «AP». Использовать динамическую индикацию, с использованием двойнго зацикливания.

  5. Организовать «Бегущий огонь» по сегментам индикатора HG1. Чередование сегментов по часовой стрелке.

  6. Организовать «Бегущий огонь» по сегментам индикатора HG2. Чередование сегментов против часовой стрелки.

  7. Организовать «Бегущий огонь» по сегментам индикаторов HG1, HG2. Чередование сегментов по часовой стрелке.

  1. Разработать программу управления светодиодами VD4 (PD.4) и VD6 (PD.6) от тумблера SA1 (PA.3): если тумблер включен, зажигается светодиод VD4, VD6 гаснет, если тумблер выключен, VD4 гаснет, зажигается светодиод VD6.

  2. Разработать программу управления светодиодами VD4 - VD6 от тумблера SA5 (PA.3): если тумблер включен, зажигаются светодиоды VD4-VD6, если тумблер выключен светодиоды гаснут.

Урок 31

Лабораторная работа №5 Ввод, компиляция, запись, отладка программ на лабораторном комплексе «Микроконтроллеры и автоматизация» - 4час

Лабораторная работа №6 Исследование и отладка программы «Статическая индикация»

Лабораторная работа №7 Исследование и отладка программы «Динамическая индикация»

Лабораторная работа №8 Исследование и отладка программы «Переключающийся светодиод»