Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Використання апаратних ресурсів контролерів для реалізації алгоритмів реального часу



Алгоритми реального часу це виконання операцій з чіткою прив’язкою до зовнішніх сигналів або в строгому програмному часі.

Найбільш розповсюдженим прикладом є програмно-керована динамічна індикація фрагмент принципової електричної схеми якої приведений на рис. 8.

Недоліком такої схеми є те, що немає захисту від випадкового включення відразу декількох індикаторів (при помилковій інформації на лініях порту В) що може привести до перевантаження ліній порту С.

Рис. 8.

Додавши дешифратор “3 на 8” можна уникнути цієї неприємності й одночасно звільнити 3 лінії порту В. Виходи дешифратора будуть керувати анодними ключами – транзисторами (рис. 9).

Рис. 9

Перевагою схеми є можливість керування будь-якою комбінацією сегментів, але для зручності виводу числової інформації можна застосувати табличний метод перекодування. На рисунку 5 наведені стандартні позначення сегментів одного розряду індикатора. Як що підключення індикаторів виконано відповідно до схеми на рис. 8, то таблиця відповідності знаків, що відображаються, і їх бітового представлення буде мати вигляд, наведений у таблиці 3. (Сегмент індикатора буде світитися, якщо відповідний біт буде скинути у нуль – для того, щоб додати до відображеного знака сому треба у нуль скинути біт 7.)

Таблиця 3.

  Біти
Знаки                
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 

Фрагмент програми, що реалізує такого роду перетворення інформації, приведений нижче:

TABL:

.db 0b11000000, 0b11111001 …

flash2r0: push ZH

push ZL

ldi ZH, high (TABL*2)

ldi ZL, low (TABL*2)

add ZL, r0

lpm

pop ZL

pop ZH

ret

Для стабільної роботи (постійної частоти відновлення інформації на індикаторі) звичайно використовуються таймери-лічильники разом з перериваннями по їх переповненню.

Визначимо, як потрібно набудовувати таймер-лічильник для одержання частоти відновлення 25 Гц (вважається мінімальною частотою відновлення інформації, при якій око людини не зауважує мерехтіння).

Переддільник таймера-лічильника ділить частоту кварцового генератора в 8, 64, 256 або 1024 рази:

Таймер-лічильник вважає до свого переповнення, потрібно вибрати кратність:

Для восьми бітного таймера-лічильника переповнення відбувається при переході з 255 у 0, або з 11111111 у 100000000 (у двоїчному представленні).

У такий спосіб шукане число, що завантажується в регістр даних таймера-лічильника буде дорівнювати – 256 – 156 = 100.

Це число необхідно перезавантажувати в регістр даних таймера-лічильника щораз при виникненні переривання по його переповненню.

Блок-схема алгоритму підпрограми перезавантаження регістра даних таймера-лічильника приведена на рис. 11, а листинг самої підпрограми – нижче:

TC0Reloаd: push r16

ldi r16, 0

out TCCR0, r16; стіп TC 0

ldi r16, 100

out TCNT0, r16

ldi r16, 0b00000011; ck/64

out TCCR0, r16

pop r16

ret

Для передачі інформації між основною програмою і підпрограми обробки переривань, що виконує фізичний вивід (керування апаратними ресурсами) інформацію зручно використовувати буфер в ОЗП контролера.

.еqu BUF_RAM = $60

Припустимо мається підпрограма, що виконує обчислення і повертає результат своєї роботи у виді 3-х десяткових цифр у 3-х регістрах процесора. Тоді фрагмент підпрограми, що виконує запис цієї інформації в ОЗП буде мати вигляд:

; 67,66,65…,61,60 - місце розміщення даних в ОЗП

; BIN2DEC - підпрограма перекладу чисел

; input R11: R10 - її вхідна інформація

; output R3: R2: R1 - регістри, через які повертається

; результат

rcall TC0Reload

ldi ZH, high (BUF_ RAM)

ldi ZL, low (BUF_ RAM)

rcall BIN2DEC

std z+0, r1

std z+1, r2

std z+2, r3

Рис. 11

Складемо блок-схему алгоритму підпрограми обробки переривання по переповненню таймера-лічильника (рис. 12).

Вважаємо, що в регістрі r9 завжди зберігається значення поточної позиції індикації (тому що в кожен окремий момент часу реально світиться тільки один з індикаторів). Усіх позицій 8 – від 0 до 7, причому вивід відбувається починаючи з 7-й позиції – це особливість організації циклів на більшості мікро-контролерів – програма виходить трохи коротше, ніж якби вивід починався з 0-й позиції.

Оскільки підпрограма обробки переривання може виконуватися в кожній, стосовно основної програми момент часу, на початку її роботи в стеці необхідно зберегти, а наприкінці – з нього відновити уміст використовуваних регістрів у тому числі і статусному регістрі (у ньому зберігаються прапори ознак) SREG.

Листинг підпрограми обробки переривання від таймера-лічильника 0 для реалізації програмно-керованої динамічної індикації приведений нижче:

TIM0OVF: push r16

in r16, SREG

push r16

push r17

push zh

push zl

ldi zh, high(buf_ram)

ldi zl, low(buf_ram)

mov r16, r9

cbi portb, pb3

out portb, r16

add zl, r16

mov r17,zl

mov r0, r17

rcall flash2r0

out portc, r0

tst r16

brne no_zerr

ldi r16, 7

no_zerr: mov r9, r16

pop zl

pop zh

pop r17

pop r16

out sreg, r16

pop r16

reti





Дата публикования: 2015-01-13; Прочитано: 251 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...