Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
81
Добавлен:
11.05.2015
Размер:
194.56 Кб
Скачать

217

Т0 – после сброса (SR = 0) тестируется командами JT0 и JNT0. После команды ENT0 CLK используется как выход генератора тактовых импульсов с частотой, в три раза меньшей частоты кварца;

Т1 – после сброса тестируется командами JT1 и JNT1. После команды STRT CNT используется как вход счетчика внешних событий;

INT – после SR = 0 тестируется командой JNI. После команды EN I используется как вход прерывания;

ALE – строб фиксации адреса внешней памяти в специальном регистре (например, К580ИР82);

РМЕ – строб приема команд в микроконтроллер из внешнего ПЗУ;

RD – строб чтения внешней памяти данных;

WR – строб записи внешней памяти данных;

DB – двунаправленный порт (ввод по команде INS A, BUS стробируется сигналом RD, вывод по команде OUTL BUS,A – сигналом WR);

P1, P2 – квазидвунаправленные порты ввода/вывода.

В ажное место в работе МК48 занимает основной рабочий регистр – аккумулятор (А). С его помощью реализуются многие пересылки данных (рис. 16.2), с его участием выполняются циклические сдвиги вправо и влево, арифметические и логические (И, ИЛИ, Исключающее ИЛИ) операции. При записи команд МК48 широко используются префиксы непосредственных данных и косвенной адресации ( # и @ ).

Кроме аккумулятора, при реализации прикладной программы прежде всего используют регистры общего назначения (РОН). Их применяют для временного хранения байтов, для организации циклов, как указатели памяти при косвенной адресации.

При выводе информации в порт она записывается в D-триггеры, управляющие выходными ключевыми каскадами. Для правильного чтения информации с линий порта в D-триггеры соответствующих линий надо вывести логические 1.

При выполнении команды сложения, наряду с суммой, формируются признаки переноса и вспомогательного (потетрадного) переноса, которые запоминаются в регистре слова состояния программы PSW. На рис. 16.3 показан формат слова состояния программы, которое хранит регистр PSW.

Программная модель микроконтроллера показана на рис. 16.4. Из программно доступных регистров прежде всего следует выделить программный счетчик РС, аккумулятор А, слово состояния программы PSW. Программный счетчик имеет разрядность 12 бит, при этом 11 бит реализовано в виде счетчика, а двенадцатый управляется с выхода триггера МВ специальными командами SEL MB0 и SEL MB1. Счетчик позволяет адресовать два банка памяти программ по 2 Кбайт каждый. Все адресное пространство ПЗУ делится на 16 страниц объемом по 256 байт каждая. Большинство команд условного перехода указывают 8-разрядный адрес перехода внутри текущей страницы. Среди ячеек памяти программ следует выделить три системные: 000Н – адрес начальной установки БИС после системного сброса, 003Н – адрес начала подпрограммы внешнего прерывания, 007Н – адрес начала подпрограммы прерывания по таймеру.

Резидентная память данных содержит два банка регистров общего назначения (в каждом банке регистры R0-R7). Переключение банков осуществляется с помощью команд SEL RB0 и SEL RB1. РОН допускают прямую адресацию (три младших разряда кода команды определяют адрес РОН). Посредством косвенной адресации (с помощью R0 или R1) можно обратиться к любой из ячеек не только РПД, но и внешней памяти данных (команда чтения – MOVX A,@R0, записи - MOVX @R0,A).

Ячейки с восьмой по двадцать третью используются как восьми-уровневый 16-разрядный стек для хранения 12-разрядного адреса возврата и четырех старших разрядов PSW при обращении к подпрограммам. При вызове подпрограммы указатель стека SP инкрементируется. Стек допускает до восьми уровней вложения подпрограмм. Возврат из подпрограммы по команде RETR сопровождается восстановлением PSW.

Таймер/счетчик предназначен для подсчета внешних событий (числа переходов сигнала на внешнем выводе Т1 от высокого уровня к низкому) и измерения временных интервалов без участия процессора. Восьмиразрядный двоичный таймер/счетчик устанавливается в начальное состояние командой MOV T, A и работает на сложение. По команде STRT T начинается подсчет внутренних синхросигналов, образующихся путем деления на 32 частоты основных импульсов машинного цикла ALE. Машинный цикл занимает пять машинных тактов или 15 периодов колебаний кварцевого генератора. По команде STRT CNT начинается счет событий. Останов таймера/счетчика происходит при системном сбросе или по команде STOP TCNT. Содержимое таймера может быть передано в аккумулятор командой MOV A,T. Переход таймера/счетчика от состояния 0FFH в состояние 00Н запоминается в триггере TF и может тестироваться командой JTF. Если разрешены прерывания командой EN TCNTI, переполнение счетчика вызовет переход к подпрограмме с начальным адресом 007Н. Прерывание по таймеру запрещено после системного сброса или выполнения команды DIS TCNTI.

Если запросы на прерывание от внешнего источника (вход INT) и от таймера/счетчика возникают одновременно, внешнее прерывание обслуживается в первую очередь. Сигнал запроса на прерывание должен быть снят до исполнения команды RETR, иначе процессор начнет повторное обслуживание данного прерывания.

Системный сброс устанавливает PC и SP в нулевое состояние, выбирает RB0 и МВ0, запрещает прерывания, останавливает таймер/счетчик, сбрасывает в нуль флаги пользователя F0 и F1, запрещает выдачу тактовых импульсов на вывод Т0, подготавливает порты Р1 и Р2 для приема информации (выводит в них байт единиц).

Система команд МК48 включает 96 базовых команд пересылки данных, арифметических и логических операций, передачи управления и управления режимами работы и ориентирована на реализацию процедур управления. К достоинствам системы команд можно отнести эффективный ввод/вывод (включая маскирование и возможность управления отдельными битами портов) и возможность ветвления по значению отдельных бит.

По формату команды могут быть однобайтовыми и двухбайтовыми. Большинство команд выполняется за один машинный цикл (2,5 мкс при частоте кварца 6 МГц). Все двухбайтовые команды и некоторые однобайтовые выполняются за два машинных цикла. Выполнение двухбайтовых команд за два цикла связано с дополнительным обращением к программной памяти.

Команды условного перехода передают управление ячейке, 8-разрядный адрес которой внутри текущей страницы памяти программ указан во втором байте команды, если выполняется условие перехода (соответствующее значение признаков C, F0, F1, T0, T1, TF, An). Если условие не подтверждается, то выполняется следующая по порядку команда программы. Команда JBn ADR8 позволяет протестировать содержимое любого бита числа, находящегося в аккумуляторе. К числу команд условного перехода относится и команда DJNZ Rn, ADR8, при выполнении которой содержимое РОН декрементируется и при ненулевом результате управление передается команде по адресу ADR8. Она широко используется для организации циклов.

В команде десятичной коррекции DA и А пишутся раздельно. Эта команда оперирует признаками С и АС, всегда идет вслед за командами ADD или ADDC и используется для обработки чисел, представленных в двоично-десятичном коде.

Обратиться к памяти программ как к таблице констант можно с помощью команд MOVP A,@A или MOVP3 A,@A.

Подпрограмма – это последовательность команд, записанная в памяти только один раз, однако ее можно вызвать для выполнения из нескольких точек программы. Вызов подпрограммы осуществляется путем указания ее имени в двухбайтовой команде CALL NAME. Три старших разряда первого байта команды отражают адрес страницы внутри текущего банка памяти программ, а второй байт – 8-разрядный адрес метки NAME внутри этой страницы. При обращении к подпрограмме обеспечивается загрузка в стек 12-разрядного РС и четырех старших разрядов PSW, а содержимое указателя стека SP увеличивается на единицу (рис. 16.5). По команде RETR содержимое РС и PSW восстанавливается из стека, по команде RET возврат из подпрограммы происходит без восстановления PSW.

11

10

9

8

Пример 16.1. Спроектировать устройство для измерения и цифровой индикации частоты пульса в диапазоне от 30 до 250 сердечных сокращений в минуту.

X= = ,

Решение. Значение частоты пульса Х связано с длительностью периода сердечных сокращений Т зависимостью

60 60

Т N

где N – число импульсов генератора тактовых импульсов, используемого для измерения Т;

– период колебаний этого генератора.

Погрешность измерения частоты пульса складывается из погрешности измерения периода Т (при допустимой погрешности в 1% N должно быть больше ста) и погрешности деления (делить желательно с точностью до десятых долей, которые не выводятся на индикатор, но учитываются при округлении младшего разряда Х). Удобно выбрать = 0,6 мс. Тогда Х = 105/N. Для работы с целыми числами сначала вычислим Y = 5 + 10X = 5 + 106/N, а затем отбросим младшую цифру. Для Х в диапазоне 30-250 ударов в минуту число N будет находиться в диапазоне 400-3 300.

Рассмотрим вариант функциональной схемы прибора, рассчитанный на применение микроконтроллера К1830ВЕ35 (рис. 16.6). Информацию о частоте пульса формирует датчик инфракрасного излучения. Сигнал, излучаемый светодиодом VD1, отражается от пальца, которым пациент касается стеклянного окошечка датчика, и улавливается фотодиодом VD2. Операционный усилитель (ОУ) DA1.1 включен по схеме преобразователя тока в напряжение. Когда кровь наполняет капилляр, он расширяется и поглощает больше, а отражает на приемник меньше инфракрасного излучения. Разница в отраженных сигналах преобразуется в сигнал на выходе DA1.1 и усиливается в 1000 раз усилителем DA1.2. Амплитуда напряжения на его выходе достигает уровня, достаточного для срабатывания триггера Шмитта DD1. Счетный триггер DD2 формирует сигнал на тестируемом входе микроконтроллера DD3.

Нулевой уровень Т0 используется для измерения Т, при единичном – производится вычисление частоты пульса Х и вывод ее значения через дешифраторы DD6 - DD8 на индикаторы DD9 - DD11. При подключении внешней памяти программ DD5 адрес очередной ячейки ПЗУ фиксируется во внешнем регистре DD4.

При реализации цифровой части прибора можно ориентироваться на следующую элементную базу: DD1 – К555ТЛ1, DD2 – К555ТМ2, DD3 –КР1830ВЕ35, DD4 – К580ИР82, DD5 – К556РТ5, DD6...DD8 – К514ИД1, DD9...DD11 – АЛС324А. Датчик реализован на светодиоде АЛ107Б (VD1), фотодиоде ФД27К (VD2) и сдвоенном операционном усилителе К140УД20 (DA1). ОУ имеют внутреннюю цепь частотной коррекции, малые входные токи и малое потребление тока источника питания.

С помощью резистора R1 при настройке устанавливается рабочий ток светодиода порядка 1-3 мА. Величина сопротивления резистора R2 определяет коэффициент преобразования тока фотодиода в напряжение на выходе DA1.1. Резистор R3 уменьшает влияние входных токов ОУ на сдвиг и дрейф нуля на выходе операционного усилителя. Выбираем R2 = R3 = 1 МОм. Отношение резисторов R5 и R4 определяет коэффициент усиления DA1.2 по напряжению. Выбираем R5 = 1 МОм, R4 = 1 кОм.

Ограничим полосу пропускания DA1.2 диапазоном от fн = 0,5 Гц до fв = 100 Гц. Тогда С1 = 1 / (2 fн R4) = 3 000 мкФ, С2 = 1 / (2 fв R5) = 1,6 нФ.

Ниже записан текст прикладной программы, подготовленный на языке ассемблера рассматриваемого микроконтроллера.

Программа “пульс”

ANL

ANL

JNT0

CLR

MOV

MOV

MOV

MOV MOV

MOV

MOV

JT0

CALL

CALL

MOV

OUTL

MOV

OUTL

JMP

P1,#0

P2,#0

$

A

R0,A

R1,A

R2,A

R3,A

R4,A

R6,A

R5,#5

$

N

Y

A,R5

P2,A

A,R6

P1,A

M1

MAIN:

M1:

; Погасить индикаторы

; Ожидание Т0=1

; N=(R1,R0)=0

; S=(R4,R3,R2)=0

; Y=(R6,R5)=5

; Ожидание Т0=0

; Вычисление N

; Вычисление Y

; Вывод Х на индикаторы

; Повторить вычисления

Подпрограмма N

XCH

ADD

DA

XCH

XCH

ADDC

DA

XCH

MOV

DJNZ

JNT0

RET

XCH

ADD

DA

XCH

XCH

ADDC

DA

XCH

XCH

ADDC

DA

XCH

JC

XCH

ADD

DA

XCH

XCH

ADDC

DA

XCH

JMP

RET

A,R0

A,#1

A

A,R0

A,R1

A,#0

A

A,R1

R7,#71H

R7,$

N

A,R2

A,R0

A

A,R2

A,R3

A,R1

A

A,R3

A,R4

A,#0

A

A,R4

M2

A,R5

A,#1

A

A,R5

A,R6

A,#0

A

A,R6

Y

N:

Y:

M2:

; Формирование N

; в двоично-десятичном

; накопителе R1R0

; Формирование задержки

; =0,6 мс

; Повторить, пока Т0 = 0

; Формирование S

; в двоично-десятичном

; накопителе R4R3R2

; Выход из подпрограммы

; при S1 000 000

; Формирование Y

; в двоично-десятичном

; накопителе R6R5

; Продолжить вычисление Y

Подпрограмма Y

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

Программа “ПУЛЬС” содержит основную программу (MAIN) и две подпрограммы (N и Y). Выделение функционально законченных модулей в виде подпрограмм не является обязательным, но существенно улучшает восприятие текста программы при чтении. Для реализации вычислений задействованы восемь РОН, аккумулятор и одна ячейка стека микроконтроллера. Основные преобразования реализуются в аккумуляторе с использованием команд сложения и десятичной коррекции. Многобайтовые переменные формируются путем последовательного преобразования отдельных байтов.

Все вычисления производятся с использованием двоично-десятичного представления N (R1, R0) и Y (R6, R5). При этом каждая из переменных имеет двухбайтовый формат (хранится в двух восьмиразрядных регистрах общего назначения). Деление выполняется методом подсчета числа сложений числа N до переполнения трехбайтового двоично-десятичного накопителя S (R4,R3,R2).

Определим значение константы Z, которая загружается в регистр R7 для реализации временной задержки, из условия

= 2,5 (14 +2Z) = 600 мкс,

где 2,5 мкс – время одного машинного цикла при частоте кварца 6 МГц;

14 – число машинных циклов выполнения команд подпрограммы N, которое надо учесть наряду с основной задержкой в счетчике R7.

Отсюда Z = (240 – 14)/2 = 113 = 71Н.

Для правильного функционирования устройства необходимо, чтобы время выполнения подпрограммы Y было меньше минимального периода сердечных сокращений.

Рассчитаем время выполнения операции деления 106/N 10X при максимальном пульсе 250 ударов в минуту. Один цикл выполнения команд подпрограммы Y составляет 27·2,5 = 67,5 мкс. 2 500 циклов потребуют 168,8 мс, что меньше минимального периода Тмин = 60·103/250 = 240 мс. Анализ показывает, что прибор будет правильно функционировать в диапазоне от 11 до 295 ударов сердца в минуту, что перекрывает заданный диапазон измерений. Информация о частоте пульса будет обновляться через два периода сердечных сокращений.

Соседние файлы в папке Электротехника и Схемотехника