- •Курсовая работа по дисциплине «Аппаратные средства вычислительной техники»
- •Введение.
- •Постановка задачи.
- •Техническое задание.
- •Структура входных и выходных данных.
- •Разработка и описание структурной схемы алгоритма.
- •Разработка и описание функциональной схемы алгоритма.
- •Разработка и описание принципиальной схемы алгоритма.
- •Разработка и описание функциональной схемы микропроцессорной системы.
- •Разработка и описание структурной схемы микропроцессорной системы.
- •Временные диаграммы.
- •Заключение.
Разработка и описание структурной схемы алгоритма.
Структурная схема для I КР580ВВ55.
Получение команды
из II
КР580ВВ55
Обработка команды
Выдача результата
в II
КР580ВВ55
Работу первого микромпроцессорного комплекта можно описать следующем образом:
- в блоке «получение команды из II КР580ВВ55» выполняется ожидание сигнала от ворого микропроцессорного комплекта и его анализ.
- в блоке «обработка команды» в зависимости от поступившего сигнала микропроцессор: устанавливает все значения в начальные, выполняет переход на предыдущую или на следующую ноту, запоминает вводимые эталонные значения или обрабатывает поступающие на него значения и анализирует их.
- в блоке «выдача результата в II КР580ВВ55» микропроцессор передаёт во второй микропроцессорный комплект знаечние, получившееся при выполнении предыдущего блока.
В конце микропроцессорный комплект опять возвращается в режим ожидания команды от II КР580ВВ55.
Структурная схема для II КР580ВВ55.
Получение команды
с клавиатуры
Обработка команды
Изменение состояния
табло
Работу второго микропроцессорного комплекта можно описать так:
- в блоке «получение команды с клавиатуры» выполняется ожидание сигнала с клавиатуры и его анализ.
- в зависимости от того, какая команда поступила с клавиатуры, в блоке «обработка команды» выполняется посылка определённой команды в I КР580ВВ55 и, если необходимо, просчёт следующей или предыдущей ноты (для выдачи этой информации на табло).
- в блоке «изменение состояния табло» микропроцессор устанавливает на табло значение текущей ноты и октавы или показывает насколько нажатая нота соответствует эталону и в какую сторону надо крутить ручку натяжение струны (если нота ещё не настроена).
В конце микропроцессрный комплект возвращается к ожиданию сигнала с клавиатуры.
Разработка и описание функциональной схемы алгоритма.
Функциональная схема для I КР580ВВ55.
+
_
+
_
+
_
+
_
обозначение |
команда |
комментарий |
#1 |
0010 |
стоп/сброс |
#2 |
0001 |
начать обработку |
#3 |
0100 |
следующая нота |
#4 |
1000 |
предыдущая нота |
Принцип работы первого КР580ВВ55 следующий:
Ожидание команды от II КР580ВВ55 (чтение из порта С2, пока там не появится какое-либо значение отличное от 0).
Чтение полученного значение из порта С2 и его анализ:
Если поступила команда #1, то микропроцессор переходит к подпрограмме остановки работы и устанавливает все параметры в начальное значение (PSTOP)
Если поступила команда #2, то микропроцессор переходит у подпрограмме обработки сигнала (PPLAY)
Если поступила команда #3, то микропроцессор переходит к подпрограмме переключения на следующую ноту (PNEXT)
Если поступила команда #4, то микропроцессор переходит к подпрограмме переключения на предыдущую ноту (PPREV)
Если же ни одна из перечисленных команд не поступила, то микропроцессор переходит к подпрограмме установки эталонных значений (PENTER)
После выполнения необходимой подпрограммы система возвращается к ожиданию команды от II КР580ВВ55.
Подпрограмма 1 (PSTOP): установка всех параметров в начальное значение.
NNOTE – переменная, в которой хранится значение текущей ноты.
NOCTAV – переменная, в которой хранится значение текущей октавы.
При выполнении данной подпрограммы в переменные в качестве текущих значений заносятся начальные значения: ноты Ля и субконтроктавы.
Подпрограмма 2 (PREADC2): ожидание сигнала от II КР580ВВ55 (считывание из порта С2, пока там не появится что-либо, отличное от 0)
+
_
А – аккомулятор.
С2 – порт.
Данная подпрограмма:
- считывает значение из порта С2 в Аккомулятор.
- сравнивает его с 0,
- если результат равен 0, это значит, что на порт ничего не поступило,
- снова считывает значение из порта С2,
цикл заканчивается только тогда когда результат сравнения отличен от 0.
Подпрограмма 3 (PNEXT): переход на следующую ноту:
+
_ +
+ _
_
+
_
+
_
NNOTE – переменная, в которой хранится значение текущей ноты.
NOCTAV – переменная, в которой хранится значение текущей октавы.
L и C – промежуточные переменные (для аналогии с программной частью используются названия регистров общего назначения КР580ВВ55)
Принцип действия подпрограммы:
1) в переменную L заносим значение NNOTE, в переменную С – значение NOCTAV,
2) так как на фортепьяно есть 2 неполные октавы, то сначала идёт проверка, в какой октаве находится текущая нота, то есть сравнивается значение переменной С со значением субконтроктавы, а потом со значением четвёртой октавы.
3) если текущая нота находится в субконтроктаве, то значение ноты увеличивается на 1 и проверяется, не вышли ли мы за пределы октавы, то есть равна эта нота значению ноты СИ+1,
- если не равно, то подпрограмма выполняет действия пункта 6).
- если же равно, то в переменную L заносится значение ноты ДО, а в С значение контроктавы, и подпрограмма переходит к действиям пункта 6)
4) если текущая нота находится не в субконтроктаве, а в четвёртой октаве, то подпрограмма увеличивает значение ноты на 1 и проверяет, не равно ли получившееся значение ноте ЛЯ+1:
- если не равно, то подпрограмма переходит к действиям пункта 6)
- если равно, то в переменную L заносится значение ноты ЛЯ, а в С значение субконтроктавы, и подпрограмма переходит к действиям пункта 6)
5) если же текущая нота находится в обычной полной октаве, то значение L увеличивается на 1 и проверяется, если оно оказывается равным значению ноты СИ+1, то в переменную L заносится значение ноты ДО, а значение С увеличивается на 1.
6) в итоге получившееся значения ноты и октавы заносятся в переменные NNOTE и NOCTAV соответственно.
Подпрограмма 4 (PPREV): переход на предыдущую ноту.
+
_ +
+ _
_
+
_
+
_
NNOTE – переменная, в которой хранится значение текущей ноты.
NOCTAV – переменная, в которой хранится значение текущей октавы.
L и C – промежуточные переменные (для аналогии с программной частью используются названия регистров общего назначения КР580ВВ55)
Принцип действия подпрограммы:
1) в переменную L заносим значение NNOTE, в переменную С – значение NOCTAV,
2) так как на фортепьяно есть 2 неполные октавы, то (аналогично с предыдущей подпрограммой) сначала идёт проверка в какой октаве находится текущая нота, то есть сначала сравнивается значение переменной С со значением субконтроктавы, а потом со значением четвёртой октавы.
3) если текущая нота находится в субконтроктаве, то значение ноты уменьшается на 1 и проверяется, не вышли ли мы за пределы октавы, то есть равна ли эта нота значению ноты ЛЯ-1,
- если не равно, то подпрограмма выполняет действия пункта 6).
- если же равно, то в переменную L заносится значение ноты ЛЯ, а в С значение четвёртой октавы, и подпрограмма переходит к действиям пункта 6)
4) если текущая нота находится не в субконтроктаве, а в четвёртой октаве, то подпрограмма уменьшает значение ноты на 1 и проверяет, не равно ли получившееся значение ноте ДО-1:
- если не равно, то подпрограмма переходит к действиям пункта 6)
- если равно, то в переменную L заносится значение ноты СИ, а в С значение третьей октавы, и подпрограмма переходит к действиям пункта 6)
5) если же теущая нота находится в обычной полной октаве, то значение L уменьшается на 1 и проверяется, если оно оказывается равным значению ноты ДО-1, то в переменную L заносится значение ноты СИ, а значение С уменьшается на 1
6) в итоге получившееся значения ноты и октавы заносятся в переменные NNOTE и NOCTAV соответственно.
Подпрограмма 5 (PENTER): вводд эталонных значений.
В – счётчик количества нот.
С – счётчик, определяющий какую ноту мы настраиваем.
Принцип работы подпрограммы:
1)Установка начальных значений счётчиков В и С.
2)обнуление портов (чтобы не считать значение прешедшее ранше).
3)Считывание значения частоты нажатой ноты с датчика, вызов подпрограммы (PREADD)
4)Выбор необходимой ячейки памяти и запись туда полученного значения.
5)Выход из программы при обнулении счётчика В, то есть когда значения всех нот записаны в память.
Подпрограмма 6 (PPLAY): обработка сигнала.
<0 >0
=0
<0 >0
=0
NNOTE – переменная, в которой хранится значение текущей ноты.
NOCTAV – переменная, в которой хранится значение текущей октавы.
B и C – промежуточные переменные (для аналогии с программной частью используются названия регистров общего назначения КР580ВВ55)
обозначение |
команда |
комментарий |
#5 |
0001 |
сигнал ниже эталона |
#6 |
0010 |
сигнал выше эталона |
#7 |
0011 |
сигнал равен эталону |
Принцип работы подпрограммы:
Обнуляются порты, чтобы не считывалось предыдущее значение.
Вызываем подпрограмму чтения с датчика (PREADD).
Записываем в В значение NNOTE, а в С – NOCTAV.
Подсчитывается эталонное значения частоты для данной ноты с помощью подпрограммы PCALCULATE.
Сравниваем старшую часть полученного с датчика значения с эталоном:
Если старшая часть меньше эталона, то передаём в порт С1 команду #5, по которой второй микропроцессорный комплект поймёт, что поступивший с клавиатуры сиганл ниже эталона.
Если старшая часть больше эталонной, то аналогично с помощью передачи в порт С1 команды #6, второй КР580ВВ55 узнает, что поступивший сигнал выше эталона.
Если же старшие части равны, то необходимо проанализировать младшую часть поступившего с датчика значения с эталоном.
Сравниваем младшие части эталонного и принятого с датчика значений
При значении не равном эталонному микропроцессор произведёт те же действия что и в пункте 5),
Если же младшие части значений совпали, то в порт С1 будет послана команда #7, которая обозначает равенство принятого и эталонного сигналов.
7) Анализ поступившего сигнала закончен.
Попрограмма 6.1 (PREADD): чтение с датчика.
_
+
+
_
Принцип работы подпрограммы:
Считывается значение с портов
Сначала анализируется значение того порта, в котором хранится старшая часть считанного слова: если оно не равно нулю значит значение с датчика уже поступило и подпрограмма заканчивает свою работу.
Если оно равно нулю, то проверяется значение порта, в котором хранится младшая часть считанного слова: если оно равно нулю, то значит с датчика значение ещё не поступило и подпрограмма возвращается к считыванию с портов новых значений. Если же оно не равно нулю, то подпрограмма заканчивает работу.
Подпрограмма 6.2 (PCALCULATE): подсчёт эталонного значения.
+
_
+
_
+
_
С – переменная, номер октавы.
Н – вспомогательная переменная (перенос из старшей части слова в младшую)
Принцип работы подпрограммы:
1)Считывается адрес начала массива эталонных значений и просчитывается адрез необходимой ноты.
2) По полученному адресу считывается значение эталона
3) Сравнивается значение С (значение октавы) с субконтроктавой, так как просчёт эталонных значений субконтроктавы выполняется отлично от других октав:
- если текущей является субконтроктава, то в Н записывается младший разряд старшей части слова, всё слово сдвигается вправо, и значение Н анализируется, если оно не равно 0, то чтобы при сдвиге не потерять разряд к младшей части слова прибавляется число 10000000, в противном случае подпрограмма выполняет действия пункта 5)
- если же нота, эталонное значение которой мы хотим просчитать находится не в субконтроктаве, то программа выполняет шаг 4)
4) Сравнивает значение С с -1: если оно не равно -1, то всё слово сдвигается влево и к младшему разряду прибавляется перенос (если он был), С уменьшается на 1, и опять сравнивается значение С с -1. Этот цикл продолжается до тех пор пока С не станет = -1.
5) Получившееся эталонное значение запоминается.
Функциональная схема для II КР580ВВ55.
+
_
+
_
+
_
+
_
обозначение |
команда |
комментарий |
#1 |
0010 |
стоп/сброс |
#2 |
0001 |
начать обработку |
#3 |
0100 |
следующая нота |
#4 |
1000 |
предыдущая нота |
#5 |
1ууухххх |
установка на табло октавы/ноты |
#6 |
00000ххх |
установка на табло коррекции |
#7 |
0001 |
нажата клавиша перехода на следующую ноту |
#8 |
0010 |
нажата клавиша перехода на предыдущую ноту |
#9 |
1000 |
нажата клавиша стоп |
#10 |
0001 |
нажата клавиша начать обработку |
#11 |
0011 |
нажата клавиша установки эталонных значений |
Принцип работы подпрограммы:
Ожидание сигнала с клавиатуры .
Считывание из порта А значения, поступившего с клавиатуры и его анализ:
Если поступила команда #7, это означает, что нажата клавиша перехода на следующую ноту и микропроцессор посылает IКР580ВВ55 сигнал переключения на следующую ноту, а также сам обращается к подпрограмме перехода на следующую ноту (PNEXT) и выдаёт получившееся (в результате выполнения этой подпрограммы) значение на табло октавы/ноты.
Если поступила команда #8, то нажата клавиша перехода на предыдущую ноту, также посылается первому микропроцессору сигнал перехода на предыдущую ноту и запускается подпрограмма перехода на предыдущую ноту (PPREV), результат которой выдаётся на табло октавы/ноты.
Если поступила команда #9, значит была нажата клавиша сброса, в первую микропроцессорную систему посылается сигнал остановки/сброса и на табло устанавливается начальное значение.
Если поступила команда #10, то в I КР580ВВ55 посылается команда начала обработки сигнала, и из порта С2 принимается результат обработки и выдаётся на табло коррекции. Затем включается Таймер, который занимает систему на 30 секунд, после чего на табло поступает 0 (и оно сбрасывается).
Если же ни одна из перечисленных команд не поступила, то в первый микропроцессор передаётся команда о том, что будут задаваться эталонные значения.
После выполнения необходимых операции система возвращается к ожиданию сигнала с клавиатуры.
Подпрограмма (TIMER): таймер
_
+
Т – счётчик.
Принцип работы подпрограммы:
Изначально переменной Т присваивается значение которое соответствует 30 секундам.
Значение переменной Т рассчитывалось следующим образом:
Тактовая частота системы 2,5 МГц.
Т/2,5 = t, где t – реальное время, в течение которого будет работать счётчик, в данном случае это 30 секунд. Получается: Т=30*2,5*106 = 75000000
Так как счётчик суммирующий, то это значение записывается со знаком «-». Далее к счётчику прибавляется по 1 до тех пор, пока значение переменной Т не станет = 0. При обнулении счётчика подпрограмма заканчивает работу.
