Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Режим 3. Асинхронный девятиразрядный последовательный порт.





Работа последовательного порта в этом режиме не отличается от работы во втором режиме за исключением скорости передачи. Скорость передачи по последовательному порту задаётся таймером 1 также как и в первом режиме работы. Для построения программы можно воспользоваться примером, приведённым для первого режима работы с учётом того, что в регистре SCON необходимо задать вместо первого режима третий режим работы.

 

Система команд микроконтроллеров MCS-51

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

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

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

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

Запись команд в машинных кодах для человека неудобна, кроме того, разные машинные команды выполняют одинаковые действия только над разными ячейками памяти. Поэтому для записи команд микропроцессоров была придумана система мнемонических обозначений. Для записи команды микропроцессора сначала ставится мнемоническое обозначение, затем указывается ячейка памяти – приёмник результата выполнения операции и наконец источник данных для выполнения операции. Например, в команде

E535 MOV A, 35h

символы MOV обозначают операцию копирования, второй операнд 35 определяет, что данные необходимо взять из 35 ячейки памяти, а первый операнд A определяет, что результат необходимо поместить в регистр – аккумулятор. При этом старое значение регистра – аккумулятора будет стёрто. Слева приведена машинная команда микроконтроллера в шестнадцатеричной записи, соответствующая мнемонической записи команды.

Мнемоническое обозначение команды отделяется от операндов одним или несколькими символами пробела или табуляции, а операнды отделяются друг от друга запятыми.

Если операция требует для выполнения двух источников и одного приёмника результата операции (например, команда сложения ADD или вычитания SUBB), то первый операнд является одновременно и источником и приёмником результата операции. Например, в команде

2535 ADD A, 35h

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

В таблице 1 приведены инструкции, влияющие на установку флагов микроконтроллера.

Таблица 1

Мнемоника Флаги Мнемоника Флаги
C OV AC C OV AC
ADD + + + CLR C      
ADDC + + + CPL C +    
SUBB + + + ANL C, bit +    
MUL   +   ANL C, /bit      
DIV   +   ORL C, bit +    
DA +     ORL C, /bit +    
RRC +     MOV C, bit +    
RLC +     CJNE +    
SETB C              

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

  • арифметические команды
  • логические команды с байтовыми переменными
  • команды передачи данных
  • команды битового процессора
  • команды ветвления программ и передачи управления

Арифметические команды

В наборе команд микроконтроллера имеются следующие арифметические операции:

  • сложение ADD,
  • сложение с учетом флага переноса ADDC,
  • вычитание с заемом SUBB,
  • инкрементирование (увеличение на 1) INC,
  • декрементирование (уменьшение на 1) DEC,
  • десятичная коррекция DA,
  • умножение MUL
  • деление DIV.

Действия производятся над целыми числами без знака.

При операции умножения содержимое аккумулятора A умножается на содержимое регистра B, и результат размещается следующим образом: младший байт в регистре B, старший - в регистре А.

В случае выполнения операции деления целое от деления помещается в аккумулятор A, остаток - в регистр В.

Логические команды с байтовыми переменными.

Система команд рассматриваемого микроконтроллера позволяет реализовать логические операции

  • И (ANL),
  • ИЛИ (ORL),
  • ИСКЛЮЧАЮЩЕЕ ИЛИ (XRL).

Логические операции выполняются над аккумулятором или непосредственно над портами ввода/вывода.

Существуют логические операции, которые выполняются только на аккумуляторе:

  • сброс всех восьми разрядов A (CLR A);
  • инвертирование всех восьми разрядов A (CPL A);
  • циклический сдвиг влево и вправо без учета флага переноса (RR A; RL A);
  • циклический сдвиг влево и вправо с учетом флага переноса (RRC A; RLC A);
  • обмен местами старшей и младшей тетрад внутри аккумулятора (SWAP A).

Команды пересылки данных.

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

  • копирование данных во внутреннем ОЗУ: 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

Битовые команды.

Каждый бит из битового пространства внутренней памяти может быть установлен в 1, сброшен в 0, или инвертирован:

  • установить бит (записать логическую единицу) SETB;
  • сбросить бит (записать логический ноль) CLR;
  • проинвертировать значение бита (изменить на прямо противоположное) CPL;
  • бит может быть записан во флаг переноса или считан из флага переноса MOV.

Могут быть реализованы переходы:

  • если бит установлен (содержит логическую 1) JB;
  • если бит не установлен (содержит логический 0) JNB;
  • переход, если бит установлен со сбросом этого бита после выполнения команды (запись в этот бит 0) JBC;

Между любым битом из битового пространства внутренней памяти и флагом переноса могут быть произведены логические операции "И" или "ИЛИ".

  • И (ANL),
  • ИЛИ (ORL),

Команды ветвления и передачи управления.

Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-51 доступны следующие команды:

  • безусловный переход: LJMP, AJMP, SJMP
  • Вызов и возврат из подпрограммы: LCALL, ACALL, RET, RETI
  • проверка содержимого аккумулятора: JZ, JNZ, CJNE, JMP
  • проверка флага переноса С: JC, JNC
  • проверка содержимого любого бита в битовом пространстве: JB, JNB, JBC

Команды 16-разрядных безусловных переходов и вызовов подпрограмм позволяют осуществить переход в любую точку адресного пространства памяти программ объемом до 64 Кбайт. Примеры команд:

LJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’LCALL Podprogramma;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

Команды 11-разрядных переходов и вызовов подпрограмм позволяют сократить объем программы, но при этом обеспечивают переходы только внутри программного модуля 2 Кбайт. Эти команды принципиально могут приводить к необнаруживаемым транслятором ошибкам, когда программный модуль размещается на двух соседних 2 Кбайтовых сегментах памяти.

AJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’ACALL Podprogramma;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

В системе команд имеются команды условных и безусловных переходов относительно начального адреса следующей команды в пределах от (РС)-127 до (РС)+127. Примеры команд:

SJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’JB P3.5, TstNxtUsl;Если на 6 выводе порта P3 нулевой потенциал, ACALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’CJNE A, #5, TstNxtUsl;Если в аккумуляторе содержится число 5, ACALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

Команды проверки содержимого аккумулятора и флага переноса C могут быть использованы для реализации проверки различных условий. При этом содержимое не изменяется, то есть если требуется произвести несколько проверок одной и той же переменной, то повторно заносить значение этой переменной в аккумулятор не нужно. Например:

MOV A, 34;Если в переменной, хранящейся в ячейке внутренней памяти 34 JNB ACC_7, TstEQ5;число меньше нуля, CALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’TstEQ5;------------------------------------------------------------------------------------------------------ CJNE A,#5,TstLT5;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число 5, CALL Podpr5;то вызвать подпрограмму, обозначенную меткой ‘Podpr5’TstLT5;------------------------------------------------------------------------------------------------------ JNС TstGE5;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, меньшее 5, CALL PodprLT5;то вызвать подпрограмму, обозначенную меткой ‘PodprLT5’TstGE5;--------------------------------------------------------------------------------- JC TstNxtUsl;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, большее или равное 5, CALL PodprGE5;то вызвать подпрограмму, обозначенную меткой ‘PodprGE5’TstGT5;------------------------------------------------------------------------------------------------------ CJNE A,#6,$+3;Если в переменной, хранящейся в ячейке внутренней памяти 34 JC TstNxtUsl;занесено число, большее 5, CALL PodprGT5;то вызвать подпрограмму, обозначенную меткой ‘PodprGT5’;--------------------------------------------------------------------------------- JNC TstNxtUsl;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, меньшее или равное 5, CALL PodprLE5;то вызвать подпрограмму, обозначенную меткой ‘PodprLE5’

Как видно из приведённых примеров, команды переходов этого микроконтроллера позволяет реализовать намного более эффективные по количеству команд программы по сравнению с другими процессорами, такими как, например MCS-48.

Косвенный переход JMP @A+DPTR в системе команд микроконтроллеров семейства MCS-51 обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентную оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла). Использование в этой команде указателя данных DPTR позволяет размещать таблицу переходов в любом месте памяти программ. Пример реализации команды выбора варианта:

BeginOpCase:;Начало команды выбора вариантов------------------------------------------------------ MOV DPTR, #JMP_TBL;Задать начальный адрес таблицы переходов MOV A, 33;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу CLR C;Осуществить арифметический сдвиг аккумулятора вправо RLC A;(умножить на 2) т.к. команды переходов занимают два байта JMP @A+DPTR;Перейти к выполнению заданного в 33 ячейке кода JMP_TBL:;начало таблицы переходов по содержимому переменной в ячейке памяти 33----------------- JMP Case0;Перейти к выполнению кода по числу 0 JMP Case1;Перейти к выполнению кода по числу 1 JMP EndCase;Это число в ячейке 33 в список разрешённых не входит JMP EndCase;Это число в ячейке 33 в список разрешённых не входит JMP Case4;Перейти к выполнению кода по числу 4EndCase:;------------------------------------------------------------------------------------------

Способы адресации операндов.

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

Неявная адресация При неявной адресации регистр источник или регистр приёмник подразумевается в самом коде операции. Например:

03 RR A;Сдвинуть содержимое аккумулятора вправоD4 DA A;Произвести десятичную коррекцию результата суммированияE8 MOV A, R0;В первом операнде использована неявная адресация, а во втором - регистровая

Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров, а также для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR, и к флагу переноса С. Номер регистра записывается в трех младших битах команды. Например:

F8 MOV R5, A;в первом операнде использована регистровая адресация, а во втором - неявная

Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (адреса 0:127) и к регистрам специального назначения (адреса 128:256). Адрес ячейки памяти помещается во второй байт команды. Например:

E520 MOV A, 20h;во втором операнде использована прямая байтовая адресация, а в первом – неявная8D15 MOV 15h,R6;в первом операнде использована прямая байтовая адресация, а во втором – регистровая

Прямая битовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20Н-2FH, и к отдельно адресуемым битам регистров специального назначения. Например:

D220 SETB 20h;использована прямая битовая адресацияC215 CLR 15h;использована прямая битовая адресация

Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей адреса используются регистры R0, R1 выбранного банка регистров. Например:

E6 MOV A,@R0;В первом операнде использована неявная адресация, а во втором - косвенно-регистроваяF7 MOV @R1,A;В первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Косвенно - регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров- указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. Например:

E2 MOVX A,@R0;В первом операнде использована неявная адресация, а во втором - косвенно-регистроваяF3 MOVX @R1,A;В первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Если в качестве регистра - указателя используется 16 - разрядный указатель данных (DPTR), то можно выбрать любую ячейку внешней памяти данных объемом до 64 Кбайт. (В некоторых моделях микроконтроллеров семейства MSC-51 таким образом можно обращаться к внутренней памяти данных объемом более 256 байт).

E0 MOVX A,DPTR;В первом операнде использована неявная адресация, а во втором - косвенно-регистроваяF0 MOVX DPTR,A;В первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Косвенно-регистровая адресация по сумме базового и индексного регистра (содержимое аккумулятора А) упрощает просмотр таблиц, записанных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTRили РС и содержимого А, например:

83 MOV A, @A+PC;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая93 MOV A, @A+DPTR;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая.

Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде, например:

7414 MOV A, #14h;В первом операнде использована неявная адресация, а во втором - непосредственная902048 MOV DPTR, #2048h;В первом операнде использована неявная адресация, а во втором - непосредственная

 

 

Устройство таймеров микроконтроллеров MCS-51

В базовых моделях семейства имеются два программируемых 16-битных таймера/счетчика (T/C0 и T/C1), которые могут быть использованы как в качестве таймеров, так и в качестве счетчиков внешних событий. Каждый из них состоит из двух 8-битных регистров TH0 (старший байт) и TH0 (младший байт) для таймера 0 или TH1 (старший байт) и TH1 (младший байт) для таймера 1.

В режиме таймера содержимое соответствующего таймера/счетчика инкрементируется в каждом машинном цикле, т.е. через каждые 12 периодов колебаний кварцевого резонатора.

В режиме счетчика содержимое соответствующего таймера/счетчика инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала, подаваемого на вывод микроконтроллера T0 или T1. Так как на распознавание периода требуются два машинных цикла, максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора. На длительность периода входных сигналов ограничений сверху нет. Для гарантированного прочтения входной сигнал должен удерживать значение 1, как минимум, в течение одного машинного цикла микро-ЭВМ.

Схемы управления таймерами идентичны. Таймер 0 и Таймер 1 могут работать в четырех режимах работы:

  • режим 0: 13-битный таймер
  • режим 1: 16-битный таймер
  • режим 2: 8-битный автоперезагружаемый таймер
  • режим 3: Таймер 0 как 2 раздельных 8-битных таймера.

Кроме того, Таймер 1 можно использовать для задания скорости передачи (baud rate) последовательного порта.

Для переключения режимов работы таймеров используются биты M0 и M1 регистра специальной функции TMOD. Название образовано от сокращения двух английских слов: T(timer)- таймер и mode - режим. Имена и расположение битов приведено на рисунке 1:

Рисунок 1. Формат регистра управления режимами работы таймеров TMOD.

Так как управление таймерами 0 и 1 полностью идентично, то приведём назначение битов по именам:

Символ Позиция бита Имя и назначение
GATE TMOD.7 для таймера 1 и TMOD.3 для таймера 0 Управление блокировкой таймера от ножки INTx. Если бит установлен в 1, то таймер/счетчик "x" разрешен до тех пор, пока на входе "lNTx" высокий уровень и бит управления "TRx" установлен. Если бит сброшен в 0, то Т/С разрешается, как только бит управления "TRx" устанавливается в 1.
С/Т TMOD.6 для таймера 1 и TMOD.2 для таймера 0 Бит выбора режима таймера или счетчика событий. Если бит сброшен в 0, то таймер работает от внутреннего генератора, если установлен в 1, то работает от внешних сигналов на входе "Tx"
M1 TMOD.5 для таймера 1 и TMOD.1 для таймера 0 Выбор режима работы таймера
M1 M0  
    13 битный таймер/счетчик "TLx" работает как 5-битный предварительный делитель
    16 битный таймер/счетчик. "THx" и "TLx" включены последовательно
    8-битный автоперезагружаемый таймер/счетчик. "THx" хранит значение, которое должно быть перезагружено в "TLx" каждый раз по переполнению
    Таймер/счетчик 1 останавливается. Таймер/счетчик 0: TL0 работает как 8-битный таймер/счетчик, и его режим определяется управляющими битами таймера 0. TH0 работает только как 8 битный таймер, и его режим определяется управляющими битами таймера 1

 

M0 TMOD.4 для Т/С1 и TMOD.0 для Т/С0

Режим 0

В нулевом режиме таймер работает как 13-битный суммирующий счётчик. Этот счётчик состоит из 8 бит регистра ТНх и младших 5 бит регистра TLx, где x в обозначении регистра заменяется на 0 или 1 в зависимости от того таймера, которым мы управляем. Старшие 3 бита регистров TLx не определены и игнорируются. Установка запускающего таймер флага TR0 или TR1 не очищает эти регистры. Работе таймера 0 или таймера 1 в режиме 0 соответствует схема:

Рисунок 2. Схема таймеров 0 или 1 в режиме 0.

Этот режим был введён для совместимости с устаревшим семейством микроконтроллеров MCS-48 для облегчения переноса уже разработанных программ на новые процессоры и поэтому в настоящее время не используется. Тем не менее, в этом режиме можно обеспечить формирование интервала времени длительностью до 8096 мс при частоте задающего генератора 12 МГц.

Когда содержимое счетчика изменяется из состояния все "1" в состояние все "0", то устанавливается (принимает значение "1") флаг прерывания таймера TF0 или TF1.

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

;Настроить режим работы таймера------------------------------------------------------------------------------------------- mov TMOD,#00000000b;настроить таймеры T0 и T1 на нулевой режим работы;

||;







Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...

Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...

ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.