Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик2.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Разработка и описание структурной схемы алгоритма.

Структурная схема для 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 следующий:

  1. Ожидание команды от II КР580ВВ55 (чтение из порта С2, пока там не появится какое-либо значение отличное от 0).

  2. Чтение полученного значение из порта С2 и его анализ:

    1. Если поступила команда #1, то микропроцессор переходит к подпрограмме остановки работы и устанавливает все параметры в начальное значение (PSTOP)

    2. Если поступила команда #2, то микропроцессор переходит у подпрограмме обработки сигнала (PPLAY)

    3. Если поступила команда #3, то микропроцессор переходит к подпрограмме переключения на следующую ноту (PNEXT)

    4. Если поступила команда #4, то микропроцессор переходит к подпрограмме переключения на предыдущую ноту (PPREV)

    5. Если же ни одна из перечисленных команд не поступила, то микропроцессор переходит к подпрограмме установки эталонных значений (PENTER)

  3. После выполнения необходимой подпрограммы система возвращается к ожиданию команды от 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

сигнал равен эталону

Принцип работы подпрограммы:

  1. Обнуляются порты, чтобы не считывалось предыдущее значение.

  2. Вызываем подпрограмму чтения с датчика (PREADD).

  3. Записываем в В значение NNOTE, а в С – NOCTAV.

  4. Подсчитывается эталонное значения частоты для данной ноты с помощью подпрограммы PCALCULATE.

  5. Сравниваем старшую часть полученного с датчика значения с эталоном:

    1. Если старшая часть меньше эталона, то передаём в порт С1 команду #5, по которой второй микропроцессорный комплект поймёт, что поступивший с клавиатуры сиганл ниже эталона.

    2. Если старшая часть больше эталонной, то аналогично с помощью передачи в порт С1 команды #6, второй КР580ВВ55 узнает, что поступивший сигнал выше эталона.

    3. Если же старшие части равны, то необходимо проанализировать младшую часть поступившего с датчика значения с эталоном.

  6. Сравниваем младшие части эталонного и принятого с датчика значений

    1. При значении не равном эталонному микропроцессор произведёт те же действия что и в пункте 5),

    2. Если же младшие части значений совпали, то в порт С1 будет послана команда #7, которая обозначает равенство принятого и эталонного сигналов.

7) Анализ поступившего сигнала закончен.

Попрограмма 6.1 (PREADD): чтение с датчика.

_

+

+

_

Принцип работы подпрограммы:

  1. Считывается значение с портов

  2. Сначала анализируется значение того порта, в котором хранится старшая часть считанного слова: если оно не равно нулю значит значение с датчика уже поступило и подпрограмма заканчивает свою работу.

  3. Если оно равно нулю, то проверяется значение порта, в котором хранится младшая часть считанного слова: если оно равно нулю, то значит с датчика значение ещё не поступило и подпрограмма возвращается к считыванию с портов новых значений. Если же оно не равно нулю, то подпрограмма заканчивает работу.

Подпрограмма 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

нажата клавиша установки эталонных значений

Принцип работы подпрограммы:

  1. Ожидание сигнала с клавиатуры .

  2. Считывание из порта А значения, поступившего с клавиатуры и его анализ:

    1. Если поступила команда #7, это означает, что нажата клавиша перехода на следующую ноту и микропроцессор посылает IКР580ВВ55 сигнал переключения на следующую ноту, а также сам обращается к подпрограмме перехода на следующую ноту (PNEXT) и выдаёт получившееся (в результате выполнения этой подпрограммы) значение на табло октавы/ноты.

    2. Если поступила команда #8, то нажата клавиша перехода на предыдущую ноту, также посылается первому микропроцессору сигнал перехода на предыдущую ноту и запускается подпрограмма перехода на предыдущую ноту (PPREV), результат которой выдаётся на табло октавы/ноты.

    3. Если поступила команда #9, значит была нажата клавиша сброса, в первую микропроцессорную систему посылается сигнал остановки/сброса и на табло устанавливается начальное значение.

    4. Если поступила команда #10, то в I КР580ВВ55 посылается команда начала обработки сигнала, и из порта С2 принимается результат обработки и выдаётся на табло коррекции. Затем включается Таймер, который занимает систему на 30 секунд, после чего на табло поступает 0 (и оно сбрасывается).

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

  4. После выполнения необходимых операции система возвращается к ожиданию сигнала с клавиатуры.

Подпрограмма (TIMER): таймер

_

+

Т – счётчик.

Принцип работы подпрограммы:

Изначально переменной Т присваивается значение которое соответствует 30 секундам.

Значение переменной Т рассчитывалось следующим образом:

Тактовая частота системы 2,5 МГц.

Т/2,5 = t, где t – реальное время, в течение которого будет работать счётчик, в данном случае это 30 секунд. Получается: Т=30*2,5*106 = 75000000

Так как счётчик суммирующий, то это значение записывается со знаком «-». Далее к счётчику прибавляется по 1 до тех пор, пока значение переменной Т не станет = 0. При обнулении счётчика подпрограмма заканчивает работу.