Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kononov_zachet.doc
Скачиваний:
82
Добавлен:
26.03.2015
Размер:
2.2 Mб
Скачать

3.6.3.Выполнение подпрограммы прерывания.

Система прерываний формирует аппаратный вызов (LCALL) соответствующей подпрограммы обслуживания, если она не заблокирована одним из следующих условий:

  • в данный момент обслуживается запрос прерывания равного или высокого уровня приоритета;

  • текущий машинный цикл — не последний в цикле выполняемой команды;

  • выполняется команда RETI или любая команда, связанная с обращением к регистрам IЕ или IP

Отметим, что если флаг прерывания был установлен, но по одному из указанных выше условий не получил обслуживания и к моменту окончания блокировки уже сброшен, то запрос прерывания теряется и нигде не запоминается.

По аппаратно сформированному коду LCALL система прерывания помещает в стек только содержимое счетчика команд (PC) и загружает в него адрес вектора соответствующей подпрограммы обслуживания. По адресу вектора должна быть расположена команда безусловной передачи управления (JMP) к начальному адресу подпрограммы обслуживания прерывания. В случае необходимости она должна начинаться командами записи в стек (PUSH) слова состояния программы (PSW), аккумулятора, расширителя, указателя данных и т.д. и должна заканчиваться командами восстановления из стека (POP). Подпрограммы обслуживания прерывания должны завершаться командой RETI, по которой в счетчик команд перезагружается из стека сохраненный адрес возврата в основную программу. Команда RET также возвращает управление прерванной основной программе, но при этом не снимут блокировку прерываний, что приводит к необходимости иметь программный механизм анализа окончания процедуры обслуживания данного прерывания.

Вопрос #12“Система команд MCS-51. Команды пересылки.”

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

В этой системе команд реализована побитная, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных. Микросхемы семейства MCS-51 - это 8-разрядные микропроцессоры, а это означает, что ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (PC).

В машинном коде команда занимает один, два или три байта в зависимости от типа адресации.

Команды выполняются за один, два или четыре (умножение и деление) машинных цикла.

Арифметические и логические команды могут быть выполнены только над содержимым регистра аккумулятора, поэтому исключительно важное значение в системе команд приобретают команды пересылки данных. С помощью этих команд можно скопировать содержимое любой ячейки памяти в регистр-аккумулятор или наоборот скопировать содержимое аккумулятора в любую ячейку памяти. Так как в микроконтроллере присутствует три независимых области памяти, то для обращения к ним введены различные команды:

копирование данных во внутреннем ОЗУ: MOV;

обмен данными аккумулятора с внутренним ОЗУ: XCH, XCHD

копирование из внешней памяти данных: MOVX

копирование данных из памяти программ: MOVC

Примеры использования команд пересылки данных:

Любая ячейка 256- байтового блока внутреннего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 и R1 (выбранного банка рабочих регистров):

MOV A, @R0 ;Скопировать число из ячейки памяти с адресом, хранящемся в R0, в аккумулятор

MOV @R1, A ;Скопировать число из аккумулятора, в ячейку памяти с адресом, хранящемся в R1

Команды пересылки с прямой адресацией между ячейками памяти позволяют заносить содержимое порта в ячейку внутреннего ОЗУ или обмениваться содержимым ячеек внутреннего ОЗУ между собой без использования аккумулятора:

MOV 15, 25 ;Скопировать содержимое 25-й ячейки в 15-ю ячейку

Таблицы символов (кодов), записанные в ПЗУ программы могут быть скопированы в аккумулятор с помощью команд передачи данных с косвенной адресацией:

MOVC A, @A+DPTR ;Скопировать символ в аккумулятор

Ячейка адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр указатель данных DPTR:

MOVX A, @DPTR ;Скопировать число из внешней ячейки памяти с адресом, ;хранящемся в DPTR, в аккумулятор

Содержимое аккумулятора может быть обменено с содержимым рабочих регистров выбранного банка:

XCH A, R0.

Кроме того, любой бит с прямой адресацией может быть скопирован в бит переноса и наоборот:

MOV C, AdrBit

Вопрос #13 - “Система команд MSC-51. Арифметика и логика”

Арифметика:

Формат команды: Описание: Меняет флаги

ADD A, <байт-источник> Сложение (A=A+байт) AC, C, OV

ADDC A, <байт-источник> Сложение с переносом (A=A+байт+C) AC, C, OV

SUBB A, <байт источника> Вычитание с заемом (A=A-байт-C) AC, C, OV

INC <байт> Инкремент

DEC <байт> Декремент

DIV AB Деление (A = A div B), B = A mod B) C, OV

MUL AB Умножение (A = ст. байт (A*B), B = мл. байт (A*B)) C, OV

OV - флаг переполнения (устанавливается, если произошло переполнение, иначе 0);

C - флаг переноса (устанавливается при появлении переноса из 7, иначе 0);

AC - флаг вспомогательного переноса (устанавливается при появлении переноса из 3, иначе 0).

Логика:

Формат команды: Описание:

ANL <байт-назначения>, <байт-источникa> Логическое "И" (пр. = пр. “И” ист.)

ORL <байт-назначения>, <байт-источникa> Логическое "ИЛИ" (пр. = пр. “ИЛИ” ист.)

XRL <байт-назначения>, <байт-источникa> Сложение по модулю 2 (пр. = пр. XOR ист.)

Вопрос #14 - “Десятичная коррекция. Двоично-десятичные преобразования”

Формат команды: Описание: Меняет флаги

DA A Десятичная коррекция аккумулятора для сложения AC, C

Команда "десятичная коррекция аккумулятора" упорядочивает 8-битовую величину в аккумуляторе A, полученную в результате выполненной команды сложения двух переменных, представленных в двоично-десятичном формате. Если значение битов 3-0 аккумулятора превышает 9 (xxxx1010B-xxxx1111B) или, если AC = "1", то к A прибавляется 06H, при этом получается двоично-десятичная цифра в младшем полубайте A. Указанное сложение не изменяет содержимое флага AC, но устанавливает в "1" содержимое флага переноса C, если перенос из поля младших четырех бит распространяется через все старшие биты A, в противном случае - не изменяет (C). Если C = "1", или если биты 7-4 A > 9 (1010xxxxB-1111xxxxB), то значение увеличивается на 6, создавая двоично-десятичную цифру в старшем полубайте A. При этом флаг C устанавливается (не изменяется), если имеется (отсутствует) перенос из бита 7 аккумулятора. Время выполнения команды 1 цикл.

Вопрос #15 - «команды передачи управления»

Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм.

В таблице также указаны тип команды (Т) в соответствии с таблицей, ее длина в байтах (Б) и время выполнения в машинных циклах (Ц).

Название команды

Мнемокод

Операция

Короткий относительный переход внутри страницы в 256 байт

SJMP rel

(PC)  (PC) + 2, (PC)  (PC) +rel

Переход, если аккумулятор равен нулю

JZ rel

(PC)(PC)+2, если (A)=0, то (PC)(PC)+rel

Переход, если аккумулятор не равен нулю

JNZ rel

(PC)(PC)+2, если (A)≠0, то (PC)(PC)+rel

Переход, если перенос равен единице

JC rel

(PC)(PC)+2, если (С)=1, то (PC)(PC)+rel

Переход, если перенос равен нулю

JNC rel

(PC)(PC)+2, если (С)=0, то (PC)(PC)+rel

Переход, если бит равен единице

JB bit, rel

(PC)(PC)+3, если (b)=l, то (PC)(PC)+rel

Переход, если бит равен нулю

JNB bit, rel

(PC)(PC)+3, если (b)=0, то (PC)(PC)+rel

Декремент прямо адресуемого байта и переход, если не нуль

DJNZ ad, rel

(PC)  (PC) + 2, (ad)  (ad) - 1, если (ad) ≠ 0, то (PC)  (PC) + rel

Длинный вызов подпрограммы

LCALL adl6

(PC)  (PC) + 3, (SP)  (SP) +1,

((SP))  (PC0…7), (SP)  (SP) + 1,

((SP))  (PC8…15), (PC)  ad16

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

RET

(PC8…15)  ((SP)), (SP)  (SP) - 1,

(PC0…7)  ((SP)), (SP)  (SP) – 1

Возврат из подпрограммы обработки прерывания

RETI

(PC8…15)  ((SP)), (SP)  (SP) - 1,

(PC0…7)  ((SP)), (SP)  (SP) – 1

Пустая операция

NOP

(PC)  (PC) + 1

Команда безусловного перехода LJMP (L – long – длинный) осуществляет переход по абсолютному 16-битному адресу, указанному в теле команды, т. е. команда обеспечивает переход в любую точку памяти программ. Действие команды AJMP (А – absolute – абсолютный) аналогично команде LJMP, однако в теле команды указаны лишь 11 младших разрядов адреса. Поэтому переход осуществляется в пределах страницы размером 2 Кбайт, при этом надо иметь в виду, что сначала содержимое счетчика команд увеличивается на 2 и только потом заменяются 11 разрядов адреса. В отличие от предыдущих команд, в команде SJMP (S – short – короткий) указан не абсолютный, а относительный адрес перехода. Величина смещения reI рассматривается как число со знаком, а, следовательно, переход возможен в пределах – 128...+127 байт относительно адреса команды, следующей за командой SJMP. Команда косвенного перехода JMP @A+DPTR позволяет вычислять адрес перехода в процессе выполнения самой программы.

Командами условного перехода можно проверять следующие условия:

  • JZ — аккумулятор содержит нулевое значение;

  • JNZ — аккумулятор содержит не нулевое значение

  • JC — бит переноса С установлен;

  • JNC — бит переноса С не установлен;

  • JB — прямо адресуемый бит равен 1

  • JNB — прямо адресуемый бит равен 0;

  • JBC — прямо адресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды.

Все команды условного перехода рассматриваемых микро-ЭВМ содержат короткий относительный адрес, т. е. переход может осуществляться в пределах—128... +127 байт относительно следующей команды. Команда DJNZ предназначена для организации программных циклов. Регистр Rn или байт по адресу ad, указанные в теле команды, содержат счетчик повторений цикла, а смещение rеl — относительный адрес перехода к началу цикла. При выполнении команды содержимое счетчика уменьшается на 1 и проверяется на 0. Если значение содержимого счетчика не равно 0, то осуществляется переход на начало цикла, в противном случае выполняется следующая команда. Команда CJN удобна для реализации процедур ожидания внешних событий. В теле команды указаны "координаты" двух байт и относительный адрес перехода rel. В качестве двух байт могут быть использованы, например, значения содержимого аккумулятора и прямо адресуемого байта или косвенно адресуемого байта и константы. При выполнении команды значения указанных двух байт сравниваются и в случае, если они не одинаковы, осуществляется переход. Например, команда WAIT: CJNE A, P0, WAIT будет выполняться до тех пор, пока значения на линиях порта P0 не совпадут со значениями содержимого аккумулятора. Действие команд вызова процедур полностью аналогично действию команд безусловного перехода. Единственное отличие состоит в том, что они сохраняют в стеке адрес возврата. Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, а команда возврата из процедуры обработки прерывания RETI, кроме того, разрешает прерывание обслуженного уровня. Команды RET и RETI не различают, какой командой – LCALL или ACALL – была вызвана подпрограмма, так как и в том, и в другом случае в стеке сохраняется полный 16-разрядный адрес возврата. В заключение следует отметить, что большинство Ассемблеров допускают обобщенную мнемонику JMP – для команд безусловного перехода и CALL – для команд вызова подпрограмм. Конкретный тип команды определяется Ассемблером, исходя из "длины" перехода или вызова.

Вопрос #16 – Система команд МС8-51. Команды операций над битами ”

Эти команды устанавливают в "1"(SETB) или "0"(CLR) прямо адресуемый бит внутренней памяти данных, изменяют его значение на противоположенное(CPL), выполняют операции AND и OR над флагом переноса C и прямо адресуемым битом(ANL и ORL), осуществляют пересылку значения между флагом С и прямо адресуемым битом(MOV), осуществляют передачу управления по состоянию флага С или прямо адресуемого бита(JC, JNC, JB, JNB, JBC).

Команды этой группы, выполняющие логические операции и осуществляющие пересылку значения бита, изменяют значение флага С регистра PSW. Остальные команды на флаги не действуют.

Вопрос #17 – “Режимы работы МС8-51”

Регистр управления энергопотреблением - PCON (Power Control Register, адрес 87Н). Для кристаллов с HMOS технологией регистр имеет только один значащий бит – SMOD (управляет скоростью работы последовательного порта), кристаллы с CHMOS технологией регистр PCON:

- PCON.7 - бит удвоения скорости передачи (Double Baud Rate Bit, SMOD);

- PCON.6 и PCON.4 - зарезервированы (Reserved);

- PCON.3, PCON.2 - флаги общего назначения (General Purpose Flags, GF1, GF0);

- PCON.1 - бит режима микро потребления (Power Down Bit, PD);

- PCON.0 - бит холостого режима (Idle Mode Bit, IDL).

Режим холостого хода. Любая команда, по которой установится управляющий бит IDL, переведет МК в режим холостого хода. Продолжает работу внутренний генератор синхросигналов, регистры сохраняют свое значение, на выводах всех портов удерживается состояние которое на них было в момент перехода в режим холостого хода, На выводах ALE и ¬PSEN формируется уровень 1.

Режим пониженного энергопотребления. Перевод МК режим микро потребления возможен при установке бита PCON.1. Останавливается генератор синхросигналов, содержимое регистров, на выходных контактах портов удерживаются значения, выходы ALE и ¬PSEN сбрасываются, электропитание осуществляется через RST/VPD, напряжение электропитания (VCC) может быть отключено, перед выходом из режима оно должно быть восстановлено. Выход из режима возможен только по сигналу RST: переопределяются все регистры специальных функций, но содержимое РПД не изменяется.

Вопрос #18 – “Таймер Т2. Режимы работы, программирование”

Таймер 2 является 16-битным таймером/счетчиком, пред­ставленным в пространстве SFR двумя однобайтными регист­рами: TL2 (младший байт) и ТН2 (старший байт). Также как и таймеры 0 и 1, таймер 2 может использовать для работы сис­темную тактовую частоту или вход внешней частоты. Источник тактирования определяется состоянием бита С/Т2 (T2CON. I). Обнуление этого бита означает использование так­товой частоты, деленной на восемь или двенадцать, в зависи­мости от бита выбора частоты Т2М регистра CKCON. Если С/Т2 установлен, то для счета используется задний фронт им­пульсов на входе внешней частоты Т2. Кроме того, таймер 2 может использоваться для запуска аналого-цифрового преоб­разователя ADC.

Режимы работы таймера 2 отличаются от режимов работы таймеров 0 и I. Он может функционировать в трех режимах: как 16-битный таймер/счетчик с захватом, как 16-битный таймер/ счетчик с автозагрузкой или в режиме генератора последователь­ной скорости. Режимы выбираются установкой битов в регистре T2CON, как показано в табл. 2.8.

Режим 0: 16-битный таймер/счетчик с захватом

При приходе заднего фронта импульса (перепада из верх­него логического уровня в нижний) на внешний вход Т2ЕХ значение из счетных регистров (ТН2 и TL2) перезаписывается в регистры захвата (RCAP2H и RCAP2L). Таймер 2 может ис­пользовать для счета системную тактовую частоту, тактовую частоту деленную на 12, а также внешние импульсы (по зад­нему фронту) на входе Т2. Обнуление бита С/Т2 (T2CON.I) означает использование для счета системных тактовых импуль­сов, деленных на I или на 12, в зависимости от состояния бита Т2М регистра CKCON. Если бит С/Т2 (T2CON.1) уста­новлен, используются импульсы с внешнего входа "П. При переполнении регистров устанавливается флагТР2 (T2CON.7) и может быть сгенерировано прерывание, если оно разрешено. Режим 16-битного таймера/счетчика с захватом задается установ­кой битов CP/RL2 (T2CON.0), TR2 (T2CON.2) и EXEN2 (T2CON.3). Если бит EXEN2 (T2CON.3) не установлен (равен 0), импульсы входа Т2ЕХ игнорируются. На рис. 2.27 показана функциональная схема таймера 2 в режиме 0.

Режим 1: 16-битный таймер/счетчик с автозагрузкой

В этом режиме при переполнении счетчика устанавливается флаг TF2 и генерируется прерывание (если оно разрешено). Кро­ме того, шестнадцатеричное значение из регистров RCAP2H и RCAP2L автоматически перезаписывается в счетные регистры. Режим выбирается обнулением бита CP/RL2. Установка бита TR2 разрешает счет. В этом режиме таймер может использовать сис­темные тактовые импульсы или внешний вход в качестве источ­ника счетных импульсов. Источник выбирается битом С/Т2. Если установлен EXEN2, задний фронт импульса на входе Т2ЕХ вы­зывает перезагрузку, иначе вход Т2ЕХ игнорируется. На рис. 2.28 показана функциональная схема таймера 2 в режиме 1.

Режим 2: генератор двоичной скорости

Таймер 2 может использоваться для генерации скорости пос­ледовательного порта UART, когда он работает в режиме 1 или 3. В этом режиме таймер работает с автозагрузкой, перезагружая значения из регистров RCAP2H и RCAP2L. При этом флаг TF2 не устанавливается, и прерывания не генерируются. Событие переполнения используется для тактирования UART, при этом возможно совместное или независимое генерирование скорости последовательного обмена для передачи и приема. Управление режимом осуществляется установкой битов RCLK (T2CON.5) и/или TCLK (T2CON.4). Когда оба бита установлены, таймер 2 работает в режиме автозагрузки независимо от состояния бита CP/RL2. При этом скорость UART определяется в соответствии с выражением: может использоваться для запуска аналого-цифрового преоб­разователя ADC.

Скорость передачи = Скорость переполнения таймера 2 /16.

Следует отмстить, что во всех остальных режимах таймеры могут использовать системную тактовую частоту, деленную на 1 или 12, в зависимости от состояния бита Т2М регистра CKCON. Но в рассматриваемом случае, когда таймер 2 используется в качестве генератора последовательной скорости передачи, так­товая частота делится на 2.

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

Скорость передачи = FCLK / [32 х (65536--|RCAP2H:RCAP2L))1

В этом выражении входная частота, поступающая на вне­шний вывод Т2, обозначена FCLK. Величина |RCAP2H:RCAP2L1 -это 16-битная величина делителя. Как было сказано выше, в этом режиме не устанавливается флаг TF2 и не генерируются соответ­ствующие прерывания, но если будет установлен бит EXEN2, то задний фронт на входе Т2ЕХ установит флаг EXF2, а также может быть сформировано прерывание таймера 2. Следовательно, вход Т2ЕХ в этом случае может использоваться, как дополнительный источник прерываний. На рис. 2.29 показана функциональная схе­ма таймера 2 в режиме 2.

Вопрос #19Массив программируемых счетчиков РСА. Режимы работы, программирование

Несмотря на бурное развитие микроэлектроники за последнее время, по-прежнему во всем мире остаются популярными микроконтроллеры семейства MCS-51 фирмы Intel. Отличительной чертой последних моделей этих микросхем является наличие у них нового устройства РСА (Programmable Counter Array). Оно обеспечивает большие "временные" возможности по сравнению с обычными счетчиками-таймерами, которые имеются на кристалле, при этом достигается большая точность с меньшими затратами ресурсов ОЭВМ. РСА рекомендуется использовать для измерения таких параметров, как ширина импульса, частота, скважность, а так же для формирования прямоугольных импульсов на внешних выводах микроконтроллера. Это устройство имеется у моделей 80C51FA, 80C51FB, 80С51РС и 80C51GB.

РСА состоит из 16-разрядного таймера-счетчика и пяти 16-разрядных модулей сравнения-захвата (compare-capture), как показано на рисунке.

Рис.10. Таймер РСА

Таймер РСА является базой времени для пяти модулей и единственным таймером, обслуживающим РСА. На его счетный вход могут подаваться следующие сигналы:

  • тактовая частота/12,

  • тактовая частота/4,

  • сигнал переполнения от таймера 0,

  • внешний сигнал с контакта ЕС1(Р1.2).

Каждый модуль сравнения-захвата может работать в одном из следующих режимов:

  • захват по фронту и/или спаду,

  • программируемый таймер;

  • скоростной вывод,

  • генератор импульсов с заданной скважностью.

Кроме этого, четвертый модуль может работать в режиме сторожевого таймера (watchdog timer). Во время работы модуля в каком-либо режиме может формироваться запрос на прерывание. При этом все пять модулей и сигнал переполнения от РСА таймер-счетчика совместно используют один вектор прерывания. Внешние контакты устройства РСА и параллельного порта 1 совмещены. Контакты, которые не задействованы при работе РСА, могут использоваться для обычного ввода-вывода.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]