Продолжить изучение системы команд программируемого микроконтроллера AT90S8535, подготовить программу, содержащую подпрограммы, отладить её, записать в микроконтроллер и продемонстрировать работу подготовленной программы.
Пояснения к работе
Работа является логическим продолжением работы № 1. Задачи здесь усложнены, увеличено количество элементов ввода и вывода информации. Кроме того, управление индикацией светодиодов и семисегментных индикаторов рекомендуется выполнить в виде подпрограммы. Тогда их можно будет использовать при выполнении других лабораторных работ.
Для вызова подпрограммы используется команда RCALL pprmet, где pprmet – это метка и название подпрограммы.
Подпрограмма начинается с метки (pprmet), затем следует текст подпрограммы, а в конце подпрограммы ставится команда возврата из подпрограммы RET. Команда RET возвращает управление на команду, следующую за командой вызова подпрограммы RCALL pprmet.
Варианты индивидуальных заданий
1. Организовать сложение двух чисел и индикацию младшей тетрады результата на семисегментном индикаторе HG2. На блоке управления располагаются кнопки и тумблеры. Кнопки SB2 и SB3 представляют собой младшие разряды первого слагаемого, т.е. возможен набор чисел от 0 до 3. Тумблеры SA4, SA5 представляют собой соответственно третий и четвертый разряды второго слагаемого, т.е. возможен набор десятичных чисел 0,4,8,12. На индикаторе высвечивать результат в шестнадцатеричном формате, т.е. 0...F.
2. В памяти записать два массива, например по пять ячеек в каждом массиве. В ячейках записаны шестнадцатеричные цифры от 00 до 0FH. Цифры в массивах, кроме одной, разные. Программа должна определить, какая цифра присутствует в обоих массивах и при нажатии на кнопку SB3 (кратковременно) высвечивать ее в шестнадцатеричном виде на индикаторе HG2. Если цифры в массивах разные, то при нажатии на кнопку SB3 (кратковременно) на индикаторе HG2 высвечивается символ «Н» (нет).
3. При нажатии на кнопку SB1 загорается цифра 1 и светодиод VD4. При нажатии на кнопку SB2 загорается цифра 2 и светодиод VD5. При одновременном нажатии кнопок SB1 и SB2 загорается цифра 3 и включается светодиод VD6.
4. Умножить положительное число 2 на число 3 и при нажатой кнопке SB1 на индикаторе HG2 высветить результат. При отпущенной кнопке на индикаторе горит символ П.
5. При включении микроконтроллера и кратковременном нажатии кнопки SB6 “RESET” при отключенном тумблере SA1 горит светодиод VD4 и на индикаторе HG1 горит цифра 2. При включении тумблера SA1 светодиод VD4 и индикатор HG1 гаснут, загорается светодиод VD5 и на индикаторе HG2 загорается цифра 5. При нажатой кнопке SB2 все светодиоды и индикаторы гаснут.
6. Организовать сложение двух чисел 3 и 4. При включении микроконтроллера и кратковременном нажатии кнопки SB6 “RESET” загорается и постоянно горит светодиод VD5. При нажатой кнопке SB1 на индикаторе HG2 горит первое слагаемое, при нажатой кнопке SB2 – второе слагаемое, при нажатой кнопке SB3 – результат.
7. В массиве из 16 ячеек памяти располагаются шестнадцатеричные числа от 00 до 00F. В массиве есть только одно число, которое повторяется несколько раз. Выявить, какое это число и сколько раз оно повторяется. При нажатии на кнопку SB1 на семисегментном индикаторе HG1 загорается повторяющееся число. При нажатии на кнопку SB2 на семисегментном индикаторе HG2 высвечивается число его повторений. Если нет повторяющегося числа, то при нажатии на кнопку SB1 на индикаторе HG1 загорается символ «Н» (нет).
8. При включении микроконтроллера, на индикаторе HG2 горит "0". Организовать счет и индикацию числа нажатий кнопки SB1 на индикаторе HG2 в шестнадцатеричном виде, т. е. 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 ….. Нажатие кнопки сопровождается загоранием светодиода VD5. Для упрощения программы мер борьбы с дребезгом контактов не предпринимать.
ЛАБОРАТОРНАЯ РАБОТА № 3. ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ
Цель работы
Освоить организацию динамической индикации, используемой в программах. Экспериментально определить влияние длительности задержек на качество индикации.
Пояснения к работе
Работа продолжает изучение 8-разрядных двунаправленных портов программируемого микроконтроллера АТ90S8535 для ввода и вывода дискретной информации, при этом используется динамическая индикация.
Ввод и вывод цифровых данных в микроконтроллерах семейства AVR и, в частности, микроконтроллера AT90S8535 могут осуществляться последовательно и параллельно. В рассматриваемой лабораторной работе речь будет идти об обмене информации через двунаправленные параллельные порты A, B, C и D.
Управление портами, назначение и адресация их регистров уже указаны в описании к работе № 1. Все рассматриваемые порты в качестве цифровых I/O портов общего назначения работают одинаково:
– при нажатии на кнопку «Сброс» (RESET), осуществляется аппаратный сброс микроконтроллера, и все каналы портов ставятся в третье состояние. На блоке управления рабочего места при этом горят светодиоды VD4–VD6, сегменты семисегментных индикаторов погашены;
– каждый вывод порта может быть запрограммирован индивидуально на ввод или вывод. Если в регистре направления данных порта для рассматриваемого бита записать «0», то соответствующий вывод конфигурируется как вход, при записи «1» – как выход;
– если вывод микроконтроллера сконфигурирован как вход, то при замыкании этого вывода на общий провод (^), вход воспринимается как «0». Неподключенный вывод воспринимается как наличие входного сигнала «1». Уровень напряжения на выводе неподключенного входа составляет 3,5–4 В. Однако, при этом повышается влияние помех, особенно проявляется влияние дребезга контактов. Уменьшить это влияние можно подключением вывода входного сигнала на питающее напряжение +5 В;
– реально уровень напряжения на выводе, определенном как выход, составляет при логической «1» – 4,5–5 В, при логическом «0» – 0–0,5 В;
– все выводы портов незапрограммированного микроконтроллера находятся в третьем состоянии.
В БУ используются семисегментные индикаторы HG1 и HG2 с общим катодом. Для замыкания катодов индикаторов на общий провод служат транзисторы VT1 и VT2, которые управляются соответственно битами PB2 и PB3 порта B. Транзисторы VT1 и VT2 при соответствующей программе обеспечивают динамическую индикацию информации на семисегментных индикаторах, т.е. вывод различной информации на оба индикатора. В этом случае поочередно зажигается то первый, то второй индикатор. При достаточно большой частоте переключений создается иллюзия одновременного непрерывного свечения индикаторов.
Для зажигания информации на первом индикаторе необходимо установить в «1» бит PB2 и записать в порт C код выводимого первого символа. Затем, через некоторую программно реализуемую задержку времени, нужно сбросить бит РB2, установить в «1» бит РB3 и подать на порт C код второго выводимого символа. Через задержку времени нужно сбросить бит РB3, установить в «1» бит РB2 и так далее.
В качестве подпрограммы рекомендуется оформить временную задержку. Длительность задержки регулируется либо изменением величин констант (255), либо изменением значения переменной. Изменения значения переменной ust1 осуществляются в основной программе.
wait3: ;подпрограмма временной задержки
Ids r18,ust1 ;задание величины задержки третьей ступени
w0:
ldi r19,255 ;задание величины задержки второй ступени
w1:
ldi r20,255 ;задание величины задержки первой ступени