Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Для определения времени выполнения команды необходимо учесть следующее. Работа микроконтроллера является циклической, поэтому в качестве временной характеристики, широко используемой для расчетов, является время машинного цикла. Микроконтроллер МК1816ВЕ48 имеет фиксированное время машинного цикла, длительность которого в 15 раз превышает длительность сигнала синхронизации. С учетом этого, длительность машинного цикла может быть определена из частоты синхронизации по следующей формуле:

, мкс

где - частота синхронизации микроконтроллера МК1816ВЕ48, МГц.

Команды микроконтроллеров могут выполняться за один либо несколько машинных циклов. Из таблицы 4 видно, что в системе команд микроконтроллера присутствуют команды, выполняемые за один и за два машинных такта. Тогда длительность выполнения команды может быть определена как:

, мкс

где N – время выполнения команды (количество машинных циклов).

Так как микроконтроллер имеет стек, то локальный цикл, при необходимости его организации в нескольких местах программы, может быть реализован в виде подпрограммы, вызываемой по команде «CALL» (см. систему команд – табл. 4).

Подпрограмму следует заканчивать командой «RET».

При организации цикла в виде подпрограммы необходимо помнить, что стек выделяется в памяти данных из регистров под номерами 8-23. Поэтому необходимо исключить их использование при обмене данными и хранении переменных.

Алгоритм преобразования параллельного кода в последовательный приведен на рисунке 6. Номерами 1 и 17 обозначены соответственно метки начала и окончания алгоритма. Номерами 6 и 11 обозначены метки переходов.

Работает алгоритм следующим образом. Сначала производится передача из регистра памяти данных в регистр-аккумулятор преобразуемого кодового слова (2). Далее в регистр хранения числа циклов преобразования параллельного кода в последовательный заносится число циклов преобразования (3). После этого микроконтроллер формирует в заданном разряде требуемого порта старт-бит «лог.0» и выдерживает его в течение времени (5). Программная задержка (5) представляет собой цикл и оформлена в виде подпрограммы. После выполнения программной задержки (5) производится сдвиг содержимого аккумулятора вправо с переносом на один разряд. В следующей операции (8) осуществляется проверка состояния триггера переноса. В случае, если триггер находится в состоянии «лог.0», разряд формирует сигнал «лог.0». В противном случае разряд формирует сигнал «лог.1».

После того, как на выходе порта микроконтроллера сформирован первый разряд последовательного кода, микроконтроллер осуществляет его выдержку в течение времени (12). Выдержка времени обеспечивается путем обращения микроконтроллера к подпрограмме задержки. Сразу после окончания программной задержки производится декрементирование содержимого регистра (вычитание единицы) (13) и проверка числа оставшихся циклов преобразования (14). Так как после выполнения первого цикла преобразования остается еще 7 циклов, то по ветке «нет» происходит условный переход микроконтроллера к строке начала цикла преобразования (3). Циклы преобразования продолжаются до тех пор, пока в результате проверки оставшегося числа циклов не окажется, что осталось 0 циклов. В этом случае микроконтроллер начинает выполнять программу по ветке «да». Соответственно, сразу же в порту формируется стоп-бит «лог.1» (15). Стоп-бит на выходе выдерживается в течение времени программной задержки , после чего микроконтроллер завершает выполнение программы.

Примечание: Сформировать логическую единицу в заданном разряде порта можно путем выполнения операции логического сложения содержимого порта с маской, содержащей единицу именно в этом разряде. Операцию сложения содержимого порта с маской проще всего реализовать командой ORL Pp, #d.

Сформировать логический ноль в заданном разряде порта можно путем выполнения операции логического умножения содержимого порта с маской, содержащей ноль именно в этом разряде. Операцию логического умножения содержимого порта с маской проще всего реализовать командой ANL Pp, #d

Алгоритм преобразования последовательного кода в параллельный приведен на рисунке 7. Номерами 1 и 18 обозначены соответственно метки начала и окончания алгоритма. Номерами 2, 8 и 13 обозначены метки переходов.

Работает алгоритм следующим образом. При запуске алгоритма начинает выполняться модуль задержки времени, организованный на элементах (3)-(5). Этот модуль необходим для того, чтобы распознать старт-бит, а также обеспечить считывание информации из счетного входа микроконтроллера в середине интервала выдержки на нем сигнала (см. рис.1). Пока на счетном входе микроконтроллера поддерживается сигнал «лог.1» цикл (3) замкнут по ветке «нет», соответственно микроконтроллер находится в ожидании начала передачи. Как только на входе порта появляется сигнал «лог.0», условие ветвления (3) становится истинным и начинается выполнение программной задержки (4) (способ выполнения программной задержки требуемой длительности рассмотрен ранее). По истечении времени программной задержки производится повторная проверка уровня сигнала на счетном входе. Если за произошла на счетном входе появился сигнал «лог.1», то считается, что принят не старт-бит и по ветке «нет» (5) происходит возврат микроконтроллера в режим ожидания начала приема. Если же по истечении на счетном входе сохранился уровень «лог.0», то считается - старт-бит принят и осуществляется переход к выполнению ветки «да» (5).

НЕ нашли? Не то? Что вы ищете?

Сначала в счетчик битов, организованный на регистре , записывается длина принимаемого кодового слова (по заданию длина кодового слова равна 8). Преобразуемое кодовое слово будет записываться в регистр-аккумулятор, поэтому следующим шагом производится его очистка (7) и подготовка к записи. Далее устанавливается начальное значение разряда переноса . Начальное значение принято равным «лог.0». После выполнения перечисленных команд запускается программная задержка . Данная задержка времени требуется для того, чтобы завершилась передача на счетный вход микроконтроллера текущего бита и началась передача следующего. По истечении производится проверка состояния счетного входа (11). Если на вход поступает «лог.1» то происходит переход «нет» (11) и в разряд переноса также заносится «лог.1», в противном случае происходит переход «да» и содержимое разряда переноса не меняется.

После получения в разряде переноса копии сигнала, поступающего на счетный вход микроконтроллера, производится сдвиг содержимого регистра-аккумулятора с учетом переноса вправо (14). Первый бит последовательного кода оказывается преобразованным в младший разряд параллельного кода. Соответственно, число оставшихся преобразований, которое хранится в регистре , уменьшается на единицу (декрементируется) (15). После декрементирования осуществляется проверка числа оставшихся циклов преобразования (16). Так как после первого цикла преобразования число, хранящееся в регистре , отлично от нуля (хранится число 7), то осуществляется переход по ветке «нет» на метку (8) и начинается следующий цикл преобразования.

Преобразование последовательного кода в параллельный заканчивается, когда при очередной проверке (16) число оставшихся преобразований оказывается равным 0. В этом случае происходит переход по ветке «да» (16), что означает окончание преобразования кодов. При этом в аккумуляторе оказывается принятый байт в параллельном коде. По команде (17) этот параллельный код из аккумулятора пересылается в один из регистров памяти данных, где он будет храниться в параллельном коде. На этом алгоритм преобразования последовательного кода в параллельный заканчивается.

Примечание: В начале программы требуется активизировать счетный вход микроконтроллера командой STRT CNT.

В системе команд микроконтроллера К1816ВЕ48 нет команды установки в триггере переноса значения «лог.1», в то же время ему доступны операции установки «лог.0» и инверсии. Поэтому в случае, если требуется получить «лог.1» требуется указывать следующую последовательность команд (см. табл.4):

CLR C /запись в триггер переноса «лог.0»/

CPL C /инвертирование содержимого триггера переноса,

Перед выполнением работы, для исключения потери данных, необходимо составить вспомогательную таблицу, в которой каждому регистру памяти данных сопоставить хранимую им переменную (см. табл.2)

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

Программа оформляется в виде таблицы, аналогичной таблице 3. (таблица 3 составлена по алгоритму рисунке 5.)

Таблица 2

Регистр памяти данных

Хранимая переменная

Число циклов преобразования

Число циклов выполнения пустых операций в цикле задержки

..

..

Таблица 3

Метки

Команды

Комментарии

Время выполнения команды, циклы

Начало

/очистка аккумулятора/

1

/очистка регистра памяти данных/

1

/запись числа циклов преобразования/

2

5

/передача числа циклов преобразования из в аккумулятор

1

 

Рис.2 - Формат данных в параллельном коде

 
 

 

Рис. 3

(а) - сдвиг данных регистра-аккумулятора вправо с участием триггера переноса (б) - сдвиг данных регистра-аккумулятора вправо без участия триггера переноса

(г) - сдвиг данных регистра-аккумулятора влево с участием триггера переноса

(в) - сдвиг данных регистра-аккумулятора влево без участия триггера переноса

Рис. 4 - Алгоритм организации локального цикла

 

Блок-схема: ссылка на другую страницу: 2

 

Блок-схема: ссылка на другую страницу: 2

Рис. 5 - Алгоритм организации локального цикла

на уровне команд микроконтроллера

 

 

Блок-схема: ссылка на другую страницу: 2
Блок-схема: ссылка на другую страницу: 2 


Рис. 6 - Алгоритм преобразования параллельного

кода в последовательный

 


10

 
Блок-схема: ссылка на другую страницу: 3

 

Блок-схема: ссылка на другую страницу: 3 


Рис. 7 - Алгоритм преобразования последовательного

кода в параллельный

Таблица 4

Система команд микроконтроллера МК48

Мнемоника команды

Код операции

Количество байтов в команде

Время выполнения команды, циклы

Выполняемые действия

Арифметические операции

ADD A, Rn

01101rrr

1

1

ADD A, @Ri

0110000i

1

1

ADD A, #d

2

2

INC A

1

1

INC Rn

00011rrr

1

1

INC @Ri

0001000i

1

1

DEC A

1

1

DEC Rn

11001rrr

1

1

Логические операции

ANL A, Rn

01011rrr

1

1

ANL A, @Ri

0101000i

1

1

ANL A, #d

2

2

ORL A, Rn

01001rrr

1

1

ORL A, @Ri

0100000i

1

1

ORL A, #d

2

2

XRL A, Rn

11011rrr

1

1

XLR A, @Ri

1101100i

1

1

XLR A, #d

2

2

CLR A

1

1

CPL A

1

1

SWAP A

1

1

RL A

1

1

Циклический сдвиг влево (А)

RLC A

1

1

Сдвиг влево (А) через перенос

RR A

1

1

Циклический сдвиг вправо (А)

RRC A

1

1

Сдвиг вправо (А) через перенос

ANL Pp, #d

100110pp

2

2

,

ANL BUS, #d

2

2

ORL Pp, #d

100010pp

2

2

,

ORL BUS, #d

2

2

CLR C

1

1

CLR F0

1

1

CLR F1

1

1

CPL C

1010111

1

1

CPL F0

1

1

CPL F1

1

1

Операции пересылки данных

MOV A, Rn

11111rrr

1

1

MOV A, @Ri

1111000i

1

1

MOV A, #d

2

2

MOV Rn, A

10101rrr

1

1

MOV Rn, #d

10111rrr

2

2

MOV @Ri, A

1010000i

1

1

MOV @Ri, #d

1011000i

2

2

MOV A, T

1

1

MOV T, A

1

1

XCH A, Rn

00101rrr

1

1

XCH A, @Ri

0010000i

1

1

IN A, Pp

000010pp

1

2

INS A, BUS

1

2

OUTL Pp, A

001110pp

1

2

OUTL BUS, A

1

2

Операции передачи управления (условных и безусловных переходов)

JMP ad 11

a10a9a800100

2

2

Безусловный переход по 11 разрядному адресу

JMPP @A

1

2

переход в текущей странице памяти программ

DJNZ Rn, ad

11101rrr

2

2

Декремент и переход по , если

JC ad

2

2

Переход по , если

JNC ad

2

2

Переход по , если

JZ ad

2

2

Переход по , если

JNZ ad

2

2

Переход по , если

JT0 ad

2

2

Переход по , если

JNT0 ad

2

2

Переход по , если

JT1 ad

2

2

Переход по , если

JNT1 ad

2

2

Переход по , если

JF0 ad

2

2

Переход по , если

JF1 ad

2

2

Переход по , если

JTF ad

2

2

Переход по , если

CALL ad

a10a9a810100

2

2

Вызов подпрограммы по

RET

1

2

Возврат из подпрограммы без восстановления ССП

RETR

1

2

Возврат из подпрограммы с восстановлением ССП

Операции управления режимами микроконтроллера

STRT T

1

1

Запуск таймера

STRT CNT

1

1

Запуск счетчика

STOP TCNT

1

1

Останов таймер/счетчика

EN TCNT

1

1

Разрешение прерывания от таймера/счетчика

DIS TCNT1

1

1

Запрещение прерываний от таймера/счетчика

SEL RB0

1

1

Выбор банка 0 РПД;

SEL RB1

1

1

Выбор банка 1 РПД;

SEL MB0

1

1

Выбор банка 0 памяти программ;

SEL MB1

1

1

Выбор банка 1 памяти программ;

NOP

1

1

Холостая команда

Обозначения, используемые в таблице 4:

- рабочий регистр;

- адрес в качестве которого используется содержимое регистров ;

- операнд, задаваемый числом;

- регистр-аккумулятор;

* - восьмиразрядный адрес памяти программ, в качестве которого используется содержимое аккумулятора;

- порты ;

- порт ;

-флаги;

- 8-разрядный адрес памяти программ, задаваемый в команде;

* - 11-разрядный адрес памяти программ, задаваемый в команде;

*- таймер в команде STRT, таймер/счетчик в команде MOV;

- таймер/счетчик в команде ;

- таймер/счетчик в командах ;

- нулевой и первый банки регистров соответственно;

- нулевой и первый банки памяти программ соответственно.

ОСНОВНАЯ ЛИТЕРАТУРА

1.  Калабеков устройства и микропроцессорные системы: Учебник. – М: Горячая линия – Телеком, 2002.

ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА

2.  Мизерная устройства, микропроцессоры и их программирование. Учеб. Иллюстрированное пособие для студентов ВУЗов ж. д. транспорта, М: Маршрут, 2002

3.  , Дианов средства и системы. – М: Радио и связь, 1989.

Из за большого объема этот материал размещен на нескольких страницах:
1 2