Материал: Микропроцессорные устройства систем управления (2005)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

; программа примера 2

 

.NOLIST

 

 

 

.INCLUDE "8535def.inc"

 

.LIST

 

 

 

.DEFtemp = rl6

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

.CSEG

 

 

 

.ORG $000

 

 

rjmp

init

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

.ORG $00e

 

 

rjmp

adc

; прерывание по завершению преобразования АЦП

.ORG $011

 

 

init: ldi

temp, low(RAMEND)

out SPL, temp

 

ldi

temp, high(RAMEND)

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

clr

temp

 

 

out

DDRA, temp

; определить все биты порта А на ввод

ser

temp

 

 

out PORTA, temp

; определить пассивный высокий уровень

 

 

; сигнала для всех битов порта А

ldi

temp, ОЫООООЮО

out

ADCSR, temp

; инициализация АЦП

start: clr

XH

 

 

ldi

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

out ADMUX, ХН ; определить номера бита 0 порта А

 

 

; в мультиплексоре

sbi ADCSR, ADSC

; запустить преобразование в АЦП

sbi

ADCSR, ADIE; разрешить прерывание АЦП

sei

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

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

main: nop

rjmp main

;п/программа обработки прерывания АЦП

adc: in r20, ADCL ; занести младший байт кода АЦП в г20 in r21, ADCH ; занести старший байт кода АЦП в г21 lsr г21

гог г20

100

lsr

r21

; двукратный сдвиг вправо с переносом

гог

г20

; из старшего байта

; в младший для преобразования в 8-битовый формат

st Х+, г20

; сохранить в ОЗУ по адресу X с постинкрементом

cpi

XL, $64

 

 

breq end

; перейти к завершению цикла после РАЗ

mov temp, XL

 

cbr

temp, $f8

 

out

ADMUX, temp

; занести в мультиплексор номер

 

 

; текущего канала

sbi

ADCSR, ADSC

; запустить преобразование в АЦП

reti

 

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

end: cbi

ADCSR, ADIE ; запретить прерывание АЦП

reti

 

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

Пример 3. Реализовать таймер, отображающий с помощью светодиодов в 8-разрядном двоичном коде время замкнутого состояния кон­ тактов кнопки включения с дискретностью 0,5 с, предус­ мотреть возможность сброса таймера в исходное состояние и индикацию переполнения таймера.

Для управления таймером необходим отсчет временных интервалов по 0,5 с. от момента замыкания кнопки включения (в дальнейшем Кн1) до ее размыкания, а также - вторая кнопка (в дальнейшем Кн2) для управления сбросом. Для индикации выходных сигналов таймера светодиоды можно подключить через токоограничивающие резисторы к одному из портов микроконтроллера, например, порту В. Контроль кнопок Кн1 и Кн2 наибо­ лее просто реализуется использованием сигналов внешних прерываний IntO (PD2), Intl (PD3). Полагая, что приоритет сброса выше, подключим замы­ кающий контакт Кн2 между PD2 и общим проводом, а замыкающий кон­ такт Кн1 - между PD3 и общим проводом. Для индикации переполнения таймера дополнительный светодиод можно подключить к свободному биту порта D, например, PD1.

При тактовой частоте микроконтроллера 8 МГц временные интервалы 0,5 с можно получить в канале сравнения А таймера-счетчика 1 с коэффи­ циентом деления тактовой частоты - 1024, кодом канала сравнения А - 3906 ($0f42) и сбросом таймера 1 по сигналу сравнения канала А. Для ини­ циализации этого режима в регистре TCCR1А все биты очищаются, а в ре­ гистре TCCR1B записывается константа ОЬООООЮОО. Запуск таймера про­ изводится установкой трех младших битов TCCR1B, останов таймера очи­ сткой этих же трех битов. Для возврата таймера в исходное состояние не­ обходимо очистить биты регистров TCNT1H, TCNT1L. Используемые век-

101

торы прерываний: IntO ($001), Intl ($002), Timl_CompA ($006). Таким об­ разом, временной интервал 0,5 с и контроль состояния кнопок реализуются аппаратными средствами с использованием соответствующих векторов прерываний, остальные необходимые функции - программно.

; программа примера 3

.NOLIST

.INCLUDE "8535def.inc"

.LIST

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

.CSEG

.ORG $000

 

rjmp

init

 

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

 

rjmp

restim

 

; прерывание по сбросу таймера (intO)

 

rjmp

timon

 

; прерывание по включению таймера (intl)

.ORG $006

 

 

 

rjmp

half

; прерывание для формирования

 

 

 

; интервала полсекунды

.ORG $011

 

 

init:

Idi

temp, low(RAMEND)

 

out

SPL, temp

 

 

 

Idi

 

temp, high(RAMEND)

 

out

 

SPH, temp

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

 

ser

 

temp

 

 

 

out

 

DDRB, temp

; порт В на вывод

 

out

 

PORTD, temp ; пассивный высокий в порте D

 

clr

 

temp

 

 

 

out PORTB, temp

; очистить биты порта В (сброс)

 

out

 

DDRD, temp

; порт D на ввод

 

sbi

 

DDRD, PD1

; бит PD1 (переполнение) на вывод

 

out

MCUCR, temp ; внешние прерывания по низкому уровню

 

Idi

temp, $08

 

 

 

out

 

TCCR1B, temp

; разрешение сброса таймера 1 по каналу

 

Idi

г18, $42

;сравнения А

 

 

 

 

Idi

 

rl9,$0f

 

 

 

out OCR1AH, rl9

 

 

out

 

OCR1AL, rl8 ; запись кода сравнения (3906) канала А

 

Idi

temp, $10

 

 

 

out

 

TIMSK, temp

; разрешение прерывания канала А

 

Idi

temp, $c0

 

 

 

out

 

GIMSK, temp

; разрешение внешних прерываний

102

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

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

граммой

 

 

 

main:

nop

 

 

rjmp

main

 

 

restim:

clr r20

 

 

out PORTB, r20

 

очистить биты порта В (сброс)

cbi

PORTD,PDl

; очистить индикацию переполнения

out

TCNT1H, r20

 

out

TCNTlL,r20

 

; сброс таймера 1

stop:: in

 

temp,TCCRlB

 

cbr

temp, $07

 

 

out

TCCR1B, temp

; остановить таймер 1

reti

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

timon:

in

temp, TCCR1B

sbr

temp, $07

 

 

out

TCCR1B, temp

; запустить таймер 1

reti

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

half: sbic

PORTD, PD3

 

; пропустить, если Кн 1 нажата

rjmp

stop

перейти к остановке таймера 1

inc ir20

 

 

out

PORTB, r20 ; инкремент индикатора кода таймера

breq carry

перейти к формированию переполнения

reti

 

завершить прерывание

carry:

sbi

PORTD, P 01

; установить бит индикации переполнения

rjmp

stop

; перейти к остановке таймера 1

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

103

5.2.Микроконтроллерная система управления температурой

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

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

туры с точностью до 0,1 °С (например, код 215 (0xd7) - 21,5 °С). Пороговые значения температур следующие: tram=17,0 °C, traax==22,0 °C.

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

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

Пуск

 

_х_

-> РВ1

_/1

-> РВ2

Стоп Ж

Ж

 

-» PD2

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

цепи. При обработке сигналов кнопок необходимо программно определить приоритеты сигналов при одновременном нажатии обеих кнопок ("защита от дурака"). Можно также указать, что в этой задаче применение алгоритма "антидребезга" необязательно, так как первое же замыкание кнопки пере-

104

Источник: https://studfile.net/preview/16521245/