Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 03.03.2010 | Доступ: свободный | Студентов: 5333 / 1306 | Оценка: 4.35 / 3.96 | Длительность: 24:14:00
ISBN: 978-5-9963-0267-3
Специальности: Разработчик аппаратуры
Лекция 14:

Архитектура однокристального микроконтроллера

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >

Память программ

В зависимости от модификации, различные типы БИС МК-51 имеют разное распределение внутренней и внешней памяти программ (см.табл. 14.1)), оставляя неизменной максимально допустимую общую емкость в 64 Кбайт. Память программ адресуется с помощью 16-разрядной адресной шины с использованием счетчика команд (program counter -PC), который вырабатывает 16-разрядные адреса. Она имеет байтовую организацию и доступна только для чтения.

Обращение к внутренней или внешней памяти программ происходит автоматически с применением аппаратных средств МК. При этом в зависимости от состояния управляющего входа DEMA микроконтроллера вся память трактуется либо как только внешняя (при DEMA = 0), либо как внутренняя, занимающая младшие адреса адресного пространства, и внешняя, занимающая адреса от старшего адреса внутренней памяти 8000h до максимально допустимого FFFFh. С точки зрения программиста имеется только один массив памяти программ емкостью 64 Кбайт.

По сигналу сброса, поступающему на вход Reset, в микроконтроллере выполняются следующие действия:

  1. Устанавливаются в ноль программный счетчик PC и все регистры специальных функций, кроме защелок портов P0-P3, указателя стека SP и регистра SBuf последовательного порта, что приводит к:

    • запрету всех прерываний;
    • остановке работы таймеров-счетчиков и последовательного порта;
    • выбору Банка 0 регистров;
    • началу работы любой программы с адреса 0 (программный счетчик РС = 0).
  2. Указатель стека (SP) устанавливается в состояние SP = 07. SP указывает на верхнюю занятую ячейку стека. При обращении к стеку на запись сначала значение SP увеличивается на 1, а затем производится запись во внутреннюю память данных по адресу, хранящемуся в SP. Считывание из стека производится по адресу, хранящемуся в SP, после чего значение SP уменьшается на 1. Таким образом, стек располагается в начальный момент начиная с адреса 8. Его положение в памяти можно переопределить, записав в SP другое число.
  3. Защелки всех линий портов P0-P3 устанавливаются в 1, настраивая их на ввод информации.
  4. В регистр SBuf последовательного порта и в ОЗУ записываются случайные значения.

Система команд

Микроконтроллер имеет достаточно простую систему из 111 команд, допускающую только следующие режимы адресации:

  • прямая к памяти данных (память данных или регистры специальных функций);
  • косвенная к памяти данных (допустима только с использованием регистров R0 и R1 рабочего банка регистров);
  • прямая к регистрам;
  • непосредственная;
  • прямая к битам (в битовой памяти или в регистрах специальных функций, адреса которых кратны восьми, то есть заканчиваются на 000b).

Система команд микроконтроллера МК-51 приведена в табл. 14.3.

Спецификой данной системы команд является отсутствие ортогональности, иными словами, операции, которые можно проводить с некоторыми регистрами и режимами адресации, не всегда допустимы с другими регистрами и режимами адресации. Наглядным примером этому служит то, что косвенная адресация возможна с использованием только регистров R0 и R1. Также часть команд можно выполнять только через специальный регистр-аккумулятор. Поэтому при программировании следует обращать особое внимание на то, с какими регистрами и режимами адресации может работать та или иная команда.

Таблица 14.3. Система команд микроконтроллера МК-51
Мнемоника Режимы адресации Время выполнения,такт Действие
Арифметические инструкции
ADD,A,byte Dir,Ind,Reg,Imm 1 A=A+byte
ADDC A,byte Dir,Ind,Reg,Imm 1 A=A+byte+C
DA A Аккумулятор 1 Десятичная коррекция
DEC A Аккумулятор 1 A=A-1
DEC byte Dir,Ind,Reg 1 byte=byte-1
DIV AB Аккумулятор и B 4 A=[A/B],B=mod(A/B)
INC A Аккумулятор 1 A=A+1
INC byte Dir,Ind,Reg 1 byte=byte+1
INC DPTR DPTR 2 DPTR=DPTR+!
MUL AB Аккумулятор и B 4 B,A=B*A
SUBC A,byte Dir,Ind,Reg,Imm 1 A=A-byte-C
Логические инструкции
ANL A,byte Dir,Ind,Reg,Imm 1 A=A&byte
ANL byte,A Dir 1 byte= byte&A
ANL byte,#data Dir 2 byte= byte&#data
CLR A Аккумулятор 1 A=00h
CPL A Аккумулятор 1 A=^(A)
ORL A,byte Dir,Ind,Reg,Imm 1 A=A v byte
ORL byte,A Dir 1 byte=byte v A
ORL byte,#data Dir 2 byte=byte v # data
RL A Аккумулятор 1 A=(A)ЦСЛ на 1бит
RLC A Аккумулятор 1 A=(A)ЦСЛ на 1бит через С
RR A Аккумулятор 1 A=(A)ЦСП на 1бит
RRC A Аккумулятор 1 A=(A)ЦСП на 1бит через С
A=(A)ЦСП на 1бит через С Аккумулятор 1 A(7...4) <=> A(3...0)
XRL A,byte Dir,Ind,Reg,Imm 1 A=A\approx byte
XRL byte,A Dir 1 byte= byte\approx A
XRL byte,#data Dir 2 byte= byte\approx \#data
Инструкции передачи данных во внутренней памяти данных
MOV A,src Dir,Ind,Reg,Imm 1 A=src
MOV dest, A Dir,Ind,Reg 1 dest=A
MOV dest, src Dir,Ind,Reg,Imm 1 dest=src
MOV DPTR,#data Imm 2 DPTR=data
PUSH src Dir 2 SP=SP+1; @SP=src
POP dest Dir 2 dest=@SP; SP=SP-1
XCH A,byte Dir,Ind,Reg 1 A <=> byte
XCHD A,@Ri Ind 1 A <=> @Ri
Инструкции передачи данных,использующие внешнюю память данных
MOVX A,@Ri 2 A=@Ri
MOVX @Ri,A 2 @Ri=A
MOVX A,@DPTR 2 A=@DPTR
MOVX @DPTR,A 2 @DPTR=A
Инструкции передачи данных, использующие память программ
MOVC A,@A+DPTR 2 A=@(A+DPTR)
MOVC A,@A+PC 2 A=@(A+PC)
Булевы инструкции
ANL C,bit bit 2 C=C & bit
ANL C,/bit bit 2 C=C & ^bit
CLR C Битовый aккумулятор 1 C=0
CLR bit bit 1 bit=0
CPL C Битовый aккумулятор 1 C=^C
CPR bit bit 1 bit=^bit
JC rel 2 Переход,если С=1
JNC rel 2 Переход,если С=0
JB bit,rel bit 2 Переход,если bit=1

Примечания

  1. Режимы адресации:
    • Dir - прямая (регистры специальных функций или память данных);
    • INd - косвенная (допустима только относительно регистров R0 и R1 ; в символической записи команды обозначается @R0 или @R1 соответственно);
    • Reg - прямая к регистрам;
    • Imm - непосредственная (в символической записи команды начинается с # );
    • bit - прямоадресуемый бит (в битовой памяти или регистрах специальных функций);
    • C - битовый аккумулятор (бит CY в регистре состояния PSW );
    • запись "byte" в графе "Мнемоника" означает, что операнд в этом поле может адресоваться с помощью любого режима адресации из указанных в графе "Режимы адресации";
    • командах, допускающих прямую, но не регистровую адресацию, может указываться регистр общего назначения, однако при трансляции команды в машинное представление его номер будет в этом случае представлен не трех-, а 8-разрядным двоичным кодом, соответствующим прямому адресу этого регистра в памяти данных; некоторые Ассемблеры требуют для таких команд указания в явном виде номера регистра в виде прямого адреса ячейки памяти данных.
  2. Действия:
    • инструкции MUL AB производится перемножение содержимого аккумулятора A и дополнительного аккумулятора B. Старшие разряды произведения помещаются в аккумулятор A, а младшие - в регистр B.
    • инструкции DIV AB содержимое аккумулятора A нацело делится на содержимое регистра B. Частное помещается в аккумулятор A, а остаток - в регистр B. Операнды рассматриваются как целые числа без знака.
    • & - конъюнкция.
    • v- дизъюнкция.
    • \oplus "исключающее ИЛИ".
    • \wedge - логическое "НЕ".
    • ЦСЛ - циклический сдвиг влево.
    • ЦСП - циклический сдвиг вправо.
    • операциях сдвига через С участвует 9-разрядный регистр (8разрядный аккумулятор и бит переноса С).
    • <=> - обмен местами операндов.
    • инструкции XCHD A,@Ri осуществляется обмен только младших тетрад операндов.
    • инструкциях переходов:
      • безусловных переходов adr показывает, что в команде кодируется абсолютный адрес памяти программ, по которо му осуществляется переход;
      • для условных переходов rel показывает, что в команде кодируется относительный адрес памяти программ, по которому осуществляется переход при выполнении указанного условия;
      • всех командах перехода при записи программы на ассемблере адрес перехода может быть задан меткой целевой команды.
  3. Некоторые Ассемблеры для инструкции вызова подпрограммы и инструкции безусловного перехода требуют от программиста явного указания длины генерируемого адреса перехода, то есть записи в программе инструкций ACALL, LCALL, AJMP, LJMP, SJMP, и не воспринимают инструкции CALL, JMP. Другие Ассемблеры самостоятельно генерируют инструкции, имеющие необходимую длину поля адреса в зависимости от места расположения адреса перехода, и поэтому допускают использование инструкций CALLи JMP.
< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Владислав Салангин
Владислав Салангин

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

Михаил Королёв
Михаил Королёв