КУРСОВОГО ПРОЕКТА
Обработка данных на микроконтроллере
Motorola MCHC908GP32
К задачам, решаемых микроконтроллерными системами, можно отнести: задачи ввода/вывода информации, задачи обработки и преобразовании информации, а так же задачи организации временных функций.
Рассмотрим примеры программной реализации типовых алгоритмов обработки данных.
Часто при выполнении арифметико-логических операций необходимо определить минимальный (максимальный) элемент массива. Суть алгоритма определения минимального элемента заключается в следующем. Из массива данных выбираются два числа, одно из которых помещается в аккумулятор А, другое в специально отведенную ячейку. Эти числа сравниваются, и меньшее число записывается в аккумулятор. Далее в специально отведенную ячейку, которую использовали ранее, записывается следующий элемент массива. Процедура повторяется. В конечном счете в аккумуляторе будет храниться минимальный элемент массива, который помещается в отдельную ячейку.
На рис. 3.1 представлена блок-схема программы определения минимального элемента списка.
Команда ORG устанавливает начальный адрес программы в памяти МК. При ассемблировании первая команда будет размещаться начиная с адреса $8000. После этого в ячейку памяти ОЗУ с адресом $50, которая выбрана в качестве счетчика циклов, загружается число 5 (число элементов массива). В индексный регистр H:X загружается начальный адрес первого элемента массива. В нашем случае – это $82. Далее в аккумулятор записывается число, адрес которого содержится в Н:Х. Содержимое Н:Х увеличивается на единицу, и число, адрес которой указан в ячейке Н:Х, записывается в специально отведенную ячейку $40. После этого содержимое индексного регистра Н:Х уменьшается на 2. Содержимое аккумулятора А сравнивается с числом, содержащимся в ячейке $40. Выполняемое действие будет иметь вид: (А) – ($40). По результату сравнения устанавливаются признаки.
Содержимое А и ячейки памяти после операции не изменяются. Если после операции сравнения бит знака в регистре ССR установлен в 0, т. е. число положительное, или содержимое аккумулятора больше содержимого ячейки $40, то процессор переходит по метке m 2, где в аккумулятор записывается $40. Иначе же процессор переходит по метке m 3, где очищается ячейка $40, увеличивается содержимое индексного регистра H:X на единицу, уменьшается содержимое счетчика циклов на единицу.
Нет |
Да |
Нет |
Да |
НАЧАЛО |
объявить минимумом первый элемент массива |
считать следующий элемент |
объявить минимумом текущий элемент |
он меньше минимума? |
уменьшить анализируемую часть массива на один элемент |
массив исчерпан? |
КОНЕЦ |
Рис. 3.1. Блок-схема программы определения минимального элемента массива.
После этого проверяется счетчик циклов на «0». Если содержимое счетчика циклов не равно 0, то необходимо продолжить выполнение программы, перейдя по метке m 1 (программа опять от метки m 1 начнет заново выполняться). Если же содержимое счетчика циклов равно 0, то программа выполняется дальше, а именно: происходит запись содержимого аккумулятора в ячейку $51 –в ней и будет храниться минимальное число данного массива чисел.
Процедура pr2 необходима для образования массива данных, DB – для определения байта данных. В поле операндов задаваемые данные записываются через запятую. С ячейки, имеющей адрес $82, резервируются 5 ячеек, в которые записываются соответствующие значения.
Суть программы определения максимального элемента заключается в следующем. Из массива данных выбираются два числа, одно из которых помещается в аккумулятор А, другое – в специально отведенную ячейку. Эти числа сравниваются, и большее число записывается в аккумулятор. Далее в специально отведенную ячейку, которую использовали ранее, записывается следующий элемент массива. Процедура повторяется. В конечном счете в аккумуляторе будет храниться максимальный элемент массива, который помещается в отдельную ячейку.
Текст программы на языке ассемблера для микроконтроллера MC68НС908GP32:
pr1: | org | $8000 | ;задание начального адреса программы |
mov | #5,$50 | ;организация счетчика циклов с коэффициентом ;пересчета, равным 5 | |
ldx | #$0082 | ;загрузка в Н:Х начального адреса первого;элемента массива (Н:Х)←$82 | |
lda | ,x | ;запись в А числа, адрес которого находится в Н:Х | |
m1: | cmp | 1,x | ;сравнение содержимого А с содержимым ячейки ((Н:Х)+1). (А) - ((Н:Х)+1) |
bpl | m2 | ;перейти на m2, если N = 0 | |
lda | 1,x | ||
m2: | aix | #1 | ;увеличить содержимое Н:Х на 1 |
dec | $50 | ;уменьшить содержимое $50 на 1 | |
bne | m1 | ; перейти на m1,если ($50) = 0 | |
sta | $51 | ; ($51)←(А) | |
jmp | * | ||
org | $0082 | ;образование массива данных | |
pr2: | db | $7,$4,$3,$2,$13,$10 | |
end |