Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1574

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Примеры выражений:

Idi

rl6, LOW(RAMEND)

;RAMEND=0x025f, LOW(RAMEND)~0x5f

out

SPL, rl6

инициализация

младшего байта указателя

стека

Idi

rl6, HIGH(RAMEND)

; HIGH(RAMEND) =0x02

out

SPH, r!6

; инициализация старшего байта указателя

стека

Mi

rl6, (1«OCIE1A)\(1«TOIEO)

загрузить в г16 константу

;в виде выражения, определяющего разрешения прерываний

;таймеров 0 и 1 с использованием символических имен флагов

;этих прерываний,

out

TIMSK, г!6

;передать константу из г16 в регистр TIMSK.

Очевидно, что назначение команды с константой в форме выражения бо­ лее понятно, чем с константой в виде числа 0x11.

Для команды Ipm адрес FLASH указывается в регистре Z со сдвигом на 1 разряд, так как младший бит регистра Z определяет байт, который передается по этой команде из FLASH в гО (1 - старший байт, 0 - младший байт). Если адрес FLASH задан меткой (например, меткой ledbcd), про­ грамма чтения из FLASH будет следующая:

Idi

ZL, LOW(ledbcd*2)

определение адреса FLASH eZ со сдвигом

Idi

ZH, HIGH(ledbcd*2)

;на 1 разряд умножением метки на 2

ipm

; чтение в гО младшего байта константы по метке

mov

rl, гО

;пересылка младшего байта в rl

inc

ZL

;адрес старшего байта (если нет переноса в ZH)

Ipm

; чтение в гО старшего байта константы по метке

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

94


5. РЕАЛИЗАЦИЯ ТИПОВЫХ ФУНКЦИЙ

При подготовке программ необходимо учитывать, что многие стандарт­ ные задачи могут решаться или встроенными аппаратными средствами микроконтроллера, или программно (процессором микроконтроллера под управлением соответствующей программы). В предыдущих главах приве­ дено описание всех устройств микроконтроллера и показано, что аппарат­ ные ресурсы, их режимы и параметры предназначены для выполнения опе­ раций преобразования и формирования сигналов, которые часто использу­ ются в задачах управления техническими объектами.

Использование аппаратных средств для реализации стандартных функ­ ций, как правило, намного эффективнее. Во-первых, ресурсы процессора освобождаются для реализации других необходимых функций, а это при­ водит и к повышению быстродействия, и к уменьшению объемов рабочих программ. Во-вторых, различные аппаратные средства работают парал­ лельно и независимо друг от друга, самостоятельно выполняя необходимые функции, и это также повышает быстродействие и существенно расширяет функциональные возможности. В-третьих, система векторных прерываний позволяет достаточно просто организовать корректное взаимодействие и управление всеми ресурсами из рабочей программы микроконтроллера.

При составлении алгоритмов решения задач рекомендуется придержи­ ваться следующей последовательности:

1.Определить функции и состав средств микроконтроллера, необходимых для решения задачи, отдавая предпочтение аппаратной реализации тре­ буемых функций.

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

3.В начальной части рабочей программы описать вектора прерываний и процедуры инициализации с указанием режимов и параметров для всех используемых аппаратных средств микроконтроллера.

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

5.Дополнить основную программу подпрограммами обслуживания векто­ ров прерываний, необходимых для программной поддержки работы ап­ паратных средств.

6.Проверить корректность работы всех средств, используемых для реше­ ния задачи. Конфликты между параллельно работающими средствами микроконтроллера наиболее часто могут возникать из-за конкуренции

95


при использовании общих ресурсов (регистров общего назначения, яче­ ек памяти данных, времени работы процессора и т.п.).

Предварительная проверка рабочей программы производится компиля­ тором при ассемблировании и симулятором инструментального пакета AVR Studio. Необходимо учитывать, что компилятор проводит только син­ таксический контроль текста программы, а моделирование работы аппа­ ратных средств симулятором возможно в весьма ограниченных пределах.

5.1. Примеры программ для микроконтроллеров AVR

Далее приводятся примеры программ для реализации стандартных функций.

Пример 1. Передать в последовательном формате из микроконтроллера во внешний регистр 4 байта данных, находящихся в RAM по адре­ сам: $060, $061, $062, $063, с формированием для внешнего ре­ гистра сигнала завершения цикла передачи - load.

Вариант "а". Задачу передачи данных в последовательном формате можно решить использованием интерфейса микроконтроллера SPI, для ад­ ресации данных в ОЗУ целесообразно использовать один из регистров кос­ венной адресации, например, регистр X.

Для передачи данных необходимо определить в SPI режим master с формированием сигналов SCK (PB7), MOSI (PB5). Вход MISO (PB6) в дан­ ной задаче не используется, сигнал завершения цикла может быть сформи­ рован только программно на одном из выходов, например, РВ4. Регистр управления интерфейса SRCR должен быть инициализирован следующим образом: 0Ь01011100, старший бит SPIE этого регистра должен программно устанавливаться в начале цикла и очищаться в конце цикла. Необходимо также использовать вектор прерывания SPITC с адресом $00а.

В приведенном далее тексте программы начальная часть, как и во всех последующих примерах программ, содержит файл определения символиче­ ских имен и обязательную процедуру инициализации стека. Текст про­ граммы (и всех остальных программ) записан в соответствии с требова­ ниями компилятора.

; программа примера 1, вариант "а"

.NOLIST

.INCLUDE "8535def.inc"

.LIST

.DEFtemp = г 16 определить символическое имя temp регистру г16

.CSEG

.ORG $000

rjmp init прерывание по reset

.ORG $00a

96

rjmp

spite

прерывание по завершению передачи байта

.ORG $011

ink:

ldi

temp, iow(RAMEND)

out

SPL, temp

ldi

temp, high(RAMEND)

out SPH, temp

; определить в указателе стека адрес RAMEND

ldi

temp, SfO

out DDRB, temp

; 4 старших бита PORTB на вывод данных

ldi

temp, ОЬОЮШОО

out

SPCR, temp

; инициализация SPI

;запуск цикла с выводом первого байта в последовательном формате

start: clr

XH

Idi

XL, $60 ; занести начальный адрес данных в регистр X

Id temp, X+ ; занести в temp байт с постинкрементом адреса в X

out

SPDR, temp ; переслать байт в регистр данных SP1

sbi

SPCR, SPIE ; установить разрешение прерывания SPI

sei

; установить флаг общего разрешения прерываний

;бессодержательный бесконечный цикл, может быть заменен любой

;программой

main: nop

rjmp

main

;п/программа для вектора прерывания SP1

spite: cpi

XL, $64

breq end

; перейти, если цикл завершен

Id temp, X+

; занести в temp байт с постинкрементом адреса в X

out SPDR, temp

; переслать байт в регистр данных SPI

reti

; возврат из прерывания

; завершение цикла

end: sbi PORTB, PB4

; установить сигнал load

cbi SPCR, SPIE

; запретить прерывание SPI

cbi PORTB, PB4 ; сбросить сигнал load

reti

; возврат из прерывания

В этом варианте программы в течение цикла выдачи 4-х байт данных в последовательном формате процессор используется для запуска цикла (метка start - 6 команд), три раза для обслуживания прерывания (метка spite - 5 команд) и для завершения цикла (метки spite, end - 6 команд). То есть для решения задачи требуется всего 27 команд, остальные операции реали­ зуется аппаратно.

97


Процедура вывода данных может быть запущена программно командой передачи управления на метку start в любой момент времени после завер­ шения цикла. Пока работает интерфейс SPI можно программно реализовать параллельное выполнение других функций. В приведенном примере это отражено бессодержательным циклом (метка main), который можно заме­ нить какой-либо прикладной программой.

Вариант "б". Задачу передачи данных в последовательном формате можно решить программно, передавая на те же выходы порта В программ­ но формируемые сигналы, для адресации данных в RAM также будем ис­ пользовать регистр косвенной адресации X.

; программа примера 1, вариант "б"

.NOLIST

.INCLUDE "8535def.inc"

.LIST

.DEF temp = r16

определить символическое имя temp регистру г16

.CSEG

.ORG $000

rjmp

init

прерывание по reset

.ORG $011

init:

Idi

temp, low(RAMEND)

out

SPL, temp

ldi

temp, high(RAMEND)

out SPH, temp

; определить в указателе стека адрес RAMEND

ldi

temp,$f0

out DDRB, temp

; 4 старших бита PORTB на вывод данных

sbi

PORTB, PB7

;запуск цикла с выводом первого байта в последовательном формате

start: cli

; очистить флаг разрешения прерываний

clr

XH

ldi

XL, $60 ; занести начальный адрес данных в регистр X

byte: Id temp, Х+

; занести в temp байт с постинкрементом адреса в X

ldi

г17, $08

; определить количество бит в байте

bit:

sbrs temp, 7

; пропустить, если бит 7 установлен

cbi

PORTB, PB5

; очистить РВ5

sbrc temp, 7

; пропустить, если бит 7 очищен

sbi

PORTB, PB5

; установить РВ5

cbi

PORTB, PB7

; очистить РВ7 (сигнал SCK)

lsl

temp

; сдвиг влево байта данных

sbi

PORTB, PB7

; установить РВ7 (сигнал SCK)

98


dec

rl 7

; декремент числа бит для вывода

brpl

bit

;вернуться к метке bit, если не все

cpi

XL, S64

;биты в байте переданы

; сравнить адрес с конечным для цикла

brne byte

; перейти, если цикл не завершен

; завершение цикла

end: sbi

PORTB, PB4

; установить сигнал load

nop

cbi

PORTB, PB4

; сбросить сигнал load

sei

; общее разрешение прерываний

; бессодержательный бесконечный цикл, может быть заменен любой про­ граммой

main: nop rjmpmain

В варианте программной реализации фрагмент программы для вывода ка­ ждого бита (метка bit - 9 команд) повторяется 32 раза, фрагмент запуска цикла (метка start - 3 команды) и завершения цикла (метка end - 4 коман­ ды) - 1 раз, фрагмент подготовки байта для вывода (метка byte - 2 коман­ ды) - 4 раза, т.е. необходимо выполнить 303 команды.

Таким образом, вариант программной реализации по объему операций, выполняемых процессором, существенно больше и, самое главное, полно­ стью загружает процессор, не позволял параллельно с выводом данных вы­ полнять какие-либо другие функции.

Пример 2. Выполнить преобразование аналоговых сигналов, поступающих на входы РАО, РА1, РА2 и РАЗ, в цифровой код; преобразовать выходные коды АЦП в 8-битовый формат, пренебрегая значе­ ниями младших разрядов; записать полученные коды в ОЗУ по адресам: $060, $061, $062, $063.

Для решения задачи будем использовать АЦП в режиме однократного преобразования с повышенной тактовой частотой, так как младшие разря­ ды выходного кода АЦП не используются. Вектор прерывания АЦП необ­ ходимо использовать для приема и обработки выходного кода АЦП. Номер бита порта А, с которого поступает сигнал для преобразования, определя­ ется регистром ADMUX. Для адресации будем использовать регистр X.

99