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

Задание

  1. Составить программу по пересылке однобайтового числа в аккумулятор, порт, регистр r1, в ячейку внутренней и внешней памяти по адресу 12h.

  2. Составить программу по пересылке 10 данных из внутренней памяти данных, начиная с адреса 01h, во внешнюю, начиная с адреса 50h. В программе необходимо предусмотреть выбор рабочего банка регистров с помощью двух команд установки или очистки битов. Например, для установки третьего банка нужны команды setb rs1 и clr rs0. Для организации цикла рекомендуется использовать команды inc (увеличениe содержимого регистра на 1, например inc r1), djnz (переход на метку, если содержимое регистра не равно нулю с одновременным уменьшением его содержимого на 1, например djnz r2, metka). Перед выполнением программы с помощью клавиатуры занесите во внутреннюю память данных десять чисел.

При включении микроконтроллера семь регистров общего назначения r0 – r7 занимают адреса в резидентной памяти данных от 00h до 07h. Имеется возможность путём установки комбинации значений битов rs0 и rs1 регистра PSW переключать адреса этих регистров либо в область 08h – 0fh, либо 10h – 17h, либо18h – 1fh. По условию задания данные для пересылки должны занимать адреса в резидентной памяти данных от 01h до 0ah, т.е. адреса, которые по умолчанию занимают регистры общего назначения. При создании программы потребуется использовать регистры общего назначения. Если не переключить банк регистров (изменить область адресов регистров общего назначения) таким образом, чтобы адреса данных и регистров не совпадали, то это приведёт к затиранию данных, предназначенных для пересылки. Поэтому следует переключить банк регистров в область, где адреса данных и банка регистров не перекрываются.

Оформление программы

Отчёт должен содержать:

  1. название лабораторной работы, номер задания, номер группы и фамилию студента;

  2. блок-схему алгоритма программы;

3) карту распределения ресурсов;

4) текст программы с необходимыми комментариями.

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

Если в тексте программы имеются подпрограммы, то перед началом подпрограммы вставляется комментарий с названием и назначением подпрограммы. Для выделения в тексте подпрограмму желательно начинать и заканчивать строками, содержащими звёздочки или другие знаки. Любой текст в программе за исключением команд и директив должен начинаться со знака ";", то есть оформляться как комментарий.

Контрольные вопросы

  1. Каков порядок отладки программы с помощью интегрированной системы MCStudio?

  2. Каким образом привести в исходное состояние память данных и осуществить повторный запуск программы?

  3. Как определить места ошибок в программе, обнаруженные при компиляции?

  4. С помощью каких команд пересылаются данные во внутреннюю и внешнюю память данных?

  5. Для каких целей может быть использовано переключение банка регистров?

  6. Какой файл загружается в память реального микроконтроллера после отладки программы с помощью интегрированной системы MCStudio?

  7. Что происходит при компиляции программы?

  8. Какие ограничения имеет отладка программ с помощью интегрированной системы MCStudio?

  9. С какой целью используется эмулятор?

  10. C какой целью в программе используются комментарии?

  11. В чём отличие внутренней и внешней памяти данных?

Лабораторная работа № 2

Изучение арифметических и логических операций,

операций передачи управления

Введение

В группу команд арифметических операций входят: команды сложения ADD, сложения с учетом переноса ADDC, вычитания с учетом заёма SUBB, увеличения и уменьшения на единицу INC и DEC, десятичной коррекции DA, умножения MUL и деления DIV. Арифметические операции выполняются над беззнаковыми целыми числами. В командах арифметических операций используется регистровая, прямая, косвенная и непосредственная адресация операндов. Операции INC и DEC применимы к аккумулятору, рабочему регистру, к ячейке резидентной памяти данных (РПД), адресуемой прямо или косвенно. Возможен инкремент 16-разрядного указателя данных DPTR, однако команда DEC DPTR недопустима. Для уменьшения на 1 содержимого регистра DPTR следует выполнить команду DEC DPL, т.е. декрементировать его младший регистр DPL.

В операциях умножения и деления участвуют аккумулятор А и регистр В. В них перед умножением загружаются множимое и множитель (8-разрядные числа), а 16-разрядный результат записывается в пару ВА, в регистре В размещается старший байт результата. Если произведение превышает значение 255 (содержимое регистра В больше нуля), то устанавливается флаг переполнения OV в регистре PSW. При делении содержимого аккумулятора на содержимое регистра В (8-разрядные числа) частное записывается в А, а остаток - в регистр В. При попытке деления на 0 устанавливается флаг переполнения OV в регистре PSW.

Десятичная коррекция аккумулятора, необходимая для представления числа в двоично-десятичном коде, осуществляется стандартным способом (см. табл. 1).

Команды арифметических операций представлены в табл. 1.

В колонке "ПРИЗНАКИ" знаками "+", "-", "*" отмечается, при каких условиях в регистре PSW (регистр состояния программы) возможна установка признаков (флагов) переноса (С), переполнения (OV), четности (Р), дополнительного переноса (AC). Знак "+" означает, что признак устанавливается, "–" – не устанавливается, "*" – устанавливается только при адресации PSW.

В группу команд логических операций входят команды логического умножения (ANL), логического сложения (ORL), исключающего ИЛИ (XRL). Приняты такие же способы адресации, как и в командах арифметических операций. В командах логических операций первым операндом, и затем приемником результата логического преобразования, является либо аккумулятор, либо прямоадресуемая ячейка РПД.

Таблица 1

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

Мнемоника

Признаки

C, OV, P, AC

Содержание

команды

Сложение

аккумулятора

с регистром (n=0..7)

ADD A,Rn

+ + + +

(A)(A)+(Rn)

с прямоадресуемым байтом

ADD A,ad

+ + + +

(A)(A)+(ad)

с байтом из РПД (i=0,1)

ADD A,@Ri

+ + + +

(A)(A)+((Ri))

с константой

ADD A,#d

+ + + +

(A)(A)+#d

Сложение

с

переносом

аккумулятора

с регистром

ADDС A,Rn

+ + + +

(A)(A)+(Rn)+(С)

с прямоадресуемым байтом

ADDС A,ad

+ + + +

(A)(A)+(ad)+(С)

с байтом из РПД

ADDС A,@Ri

+ + + +

(A)(A)+((Ri))+(С)

с константой

ADDС A,#d

+ + + +

(A)(A)+#d+(С)

Вычитание с

заемом

из

аккумулятора

регистра

SUBB A,Rn

+ + + +

(A)(A)-(C)-(Rn)

прямоадресуемого байта

SUBB A,ad

+ + + +

(A)(A)-(C)-(ad)

байта РПД

SUBB A,@Ri

+ + + +

(A)(A)-(C)-((Ri))

константы

SUBB A,#d

+ + + +

(A)(A)-(C)-#d

Окончание табл. 1

Инкремент

аккумулятора

INC A

- - + -

(A)(A)+1

регистра

INC Rn

- - - -

(Rn)(Rn)+1

прямоадресуемого байта

INC ad

- - - -

(ad)(ad)+1

байта из РПД

INC @Ri

- - - -

(Ri)(Ri)+1

указателя данных

INC DPTR

- - - -

(DPTR)(DPTR)+1

Декремент

аккумулятора

DEC A

- - + -

(A)(A)-1

регистра

DEC Rn

- - - -

(Rn)(Rn)-1

прямоадресуемого байта

DEC ad

- - - -

(ad)(ad)-1

байта из РПД

DEC @Ri

- - - -

(Ri)(Ri)-1

Умножение

аккумулятора на регистр В

MUL AB

0 + + -

(B), (A)(A)*(B)

Деление

аккумулятора на регистр В

DIV AB

0 + + -

(B), (A)(A)/(B)

Десятичная

коррекция

аккумулятора

DA A

+ - + -

см. [1 – 7]

В состав этой группы входят несколько операций преобразования содержимого аккумулятора: CLR - сброс, CPL - инверсия, а также операции сдвига влево, вправо - циклического и через перенос. Сюда же включена операция обмена тетрадами в аккумуляторе SWAP, которая может интерпретироваться как циклический сдвиг байта на четыре разряда. В табл. 2 приведены команды логических операций.

Таблица 2

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

Мнемоника

Признаки

C OV P AC

Содержание

команды

Логическое

«И»

аккумулятора

с регистром (n=0..7)

ANL A,Rn

- - + -

(A)(A)+(Rn)

с прямоадресуемым байтом

ANL A,ad

- - + -

(A)(A)+(ad)

с байтом из РПД (i=0,1)

ANL A,@Ri

- - + -

(A)(A)+((Ri))

с константой

ANL A,#d

- - + -

(A)(A)+#d

Логическое

«И»

прямоадресуемого байта и аккумулятора

ANL ad,A

- - - -

(ad)(ad)^(A)

прямоадресуемого байта и константы

ANL ad,#d

- - - -

(ad)(ad)^#d

Продолжение табл. 2

Логическое

«ИЛИ»

аккумулятора

с регистром

ORL A,Rn

- - + -

(A)(A)v(Rn)

с прямоадресуемым байтом

ORL A,ad

- - + -

(A)(A)v(ad)

с байтом из РПД

ORL A,@Ri

- - + -

(A)(A)v((Ri))

с константой

ORL A,#d

- - + -

(A)(A)v#d

Логическое

«ИЛИ»

прямоадресуемого байта и аккумулятора

ORL ad,A

- - - -

(ad)(ad)v(A)

прямоадресуемого байта и константы

ORL ad,#d

- - - -

(ad)(ad)v#d

Исключающее

«ИЛИ»

аккумулятора

с регистром

XRL A,Rn

- - + -

(A)(A)*(Rn)

с прямоадресуемым байтом

XRL A,ad

- - + -

(A)(A)*(ad)

с байтом из РПД

XRL A,Ri

- - + -

(A)(A)*((Ri))

с константой

XRL A,#d

- - + -

(A)(A)*#d

Исключающее

«ИЛИ»

прямоадресуемого байта и аккумулятора

XRL ad,A

- - - -

(ad)(ad)*(A)

прямоадресуемого байта и константы

XRL ad,#d

- - - -

(ad)(ad)*#d

Сброс

аккумулятора

CLR A

- - + -

(A)0

Инверсия

аккумулятора

CPL A

- - + -

(A)(A)

Сдвиг

аккумулятора на один

разряд

влево циклический

RL A

- - - -

(A7A6A5A4A3A2A1A0A7)

влево через перенос

RLC A

+ - + -

(A7A6A5A4A3A2A1A0), ©(A7), (A0)©

вправо циклический

RR A

- - - -

(A0A7A6A5A4A3A2A1A0)

вправо через перенос

RRC A

+ - + -

(A7A6A5A4A3A2A1A0), ©(A7), (A0)C)

Окончание табл. 2

Обмен

местами

тетрад в аккумуляторе

SWAP A

- - - -

(A7...A4)

(A3...A0)

Группа команд операций с битами включает операции пересылки, логической обработки, установки, сброса и инверсии булевых (одноразрядных) переменных. В качестве одного из одноразрядных операндов служит бит, адресуемый прямым способом (отдельные биты - РСН, биты портов, 128 бит РПД), в качестве второго - флаг переноса С. Флаг переноса С при выполнении операций И и ИЛИ выполняет функции одноразрядного аккумулятора, то есть он является операндом, и в него записывается результат логического преобразования. Косвенная адресация бит невозможна. В табл. 3 приведены команды операций с битами.

Группа команд операций передачи управления представлена в табл. 4. Она состоит из команд безусловного перехода (LJMP, AJMP, SJMP), условного перехода (JZ, JNZ, JC, JNC, JB, JNB, CJNE, JBC), вызова подпрограмм (LCALL, ACALL), возврата из подпрограмм (RET, RETI), модификации с условным переходом (DJNZ). Сюда включена и пустая команда NОР.

В командах передачи управления широко применяется относительная адресация, которая может использоваться для перемещаемых программных модулей. В качестве относительного адреса используется 8-разрядное смещение со знаком (rеl), обеспечивающее ветвление от текущего положения программного счетчика (PC) в обе стороны на +/-127 байт. Для перехода в любую другую точку 64К-байтного адресного пространства может быть использован либо прямой (ad16), либо косвенный (@А + DPTR) адрес. В последнем случае содержимое аккумулятора интерпретируется как целое без знака. Короткая прямая адресация (ad11)

Таблица 3

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

Мнемоника

Признаки

C OV P AC

Содержание

команды

Сброс

переноса

CLR C

0 - - -

(С) 0

бита

CLR bit

* * - *

(b)0

Установка

переноса

SETB C

1 - - -

(С)1

бита

SETB bit

* * - *

(b)1

Инверсия

переноса

CPL C

C - - -

(С)(C)

бита

CPL bit

* * - *

(b)(b)

Окончание табл. 3

Логическое

бита и переноса

ANL C,bit

+ - - -

(С)(C)^(b)

«И»

инверсии бита и переноса

ANL C,/bit

+ - - -

(C)(C)^(b)

Логическое

бита и переноса

ORL C,bit

+ - - -

(С)(C)v(b)

«ИЛИ»

инверсии бита переноса

ORL C,/bit

+ - - -

(C)(C)v(b)

Пересылка

бита в перенос

MOV C,bit

+ - - -

(С)(b)

переноса в бит

MOV bit,C

- * - *

(b)(C)

обеспечивает переход внутри 2К-байтной текущей страницы.

Для команд вызова подпрограмм допустимы только прямой (ad16) и внутристраничный (ad11) способы адресации.

Во всех типовых командах перехода по условию (JZ, JNZ, JC, JNC) используется только относительная адресация (rel). В командах JB, JNB в качестве условия перехода может использоваться значение любого прямоадресуемого бита из РПД, РСН, используется также относительная адресация.

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

Команды DJNZ дают возможность программисту в качестве счетчика использовать не только один из регистров общего назначения (РОН), но и любую ячейку РПД.

Из условных команд перехода особо следует отметить команду JBC, которая реализует ветвление при установленном бите и одновременно с этим сбрасывает его в 0. Такая операция полезна в микропроцессорных системах с коллективным доступом к ее ресурсам при организации семафоров, которые вводятся для защиты коллективно используемых ресурсов от одновременного доступа со стороны нескольких потребителей.

Таблица 4

Наименование

команды

Мнемоника

Содержание команды

Длинный переход в полном объеме памяти

LJMP ad 16

(PC)ad 16

Абсолютный переход внутри страницы в два килобайта

AJMP ad 11

(PC)(PC)+2

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

SJMP rel

(PC)(PC)+2; (PC)(PC)+rel

Косвенный относительный переход

JMP @A+DPTR

(PC)(A)+(DPTR)

Переход,

аккумулятор равен нулю

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 если (C)=1,

то (PC)(PC)+rel

перенос равен нулю

JNC rel

(PC)(PC)+2 если (C)=0,

то (PC)(PC)+rel

бит равен единице

JB bit, rel

(PC)(PC)+3 если (b)=1,

то (PC)(PC)+rel

бит равен нулю

JNB bit, rel

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

ТО (PC)(PC)+rel

бит установлен с последующим сбросом бита

JBC bit, rel

(PC)(PC)+3 если (B)=1,

то (B)0 И (PC)(PC)+rel

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

DJNZ Rn, rel

(PC)(PC)+2, (Pn)(Pn)-1;

если (Rn)<>0, то (PC)(PC)+rel

Окончание табл. 4

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

DJNZ ad, rel

(PC)(PC)+3, (ad)(ad)-1;

если (ad)<>0, то (PC)(PC)+rel

Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно

CJNE A,ad,rel

(PC)(PC)+3; если (A)<>(ad),

то (PC)(PC)+rel;

если (A)<(ad), то (С)<-1

если (A)>(ad), то (С)0

Сравнение аккумулятора с константой и переход, если не равно

CJNE A,#d,rel

(PC)(PC)+3; если (A)<>(#d),

то (PC)(PC)+rel;

если (A)<(#d), то (С)<-1

если (A)>(#d), то (С)0

Сравнение регистра с константой и переход, если не равно

CJNE Rn,#d,rel

(PC)(PC)+3; если (Rn)<>(#d),

то (PC)(PC)+rel;

если (Rn)<(#d), то (С)<-1

если (Rn)>(#d), то (С)0

Сравнение байта в РПД с константой и переход, если не равно

CJNE @Ri,#d,rel

(PC)(PC)+3; если (Ri)<>(#d),

то (PC)<-(PC)+rel;

если (Rn)<(#d), то (С)1

если (Rn)>(#d), то (С)0

Длинный вызов

подпрограммы

LCALL ad 16

(PC)(PC)+3;

(SP)(SP)+1,((SP))(PC7..PC0);

(SP)<-(SP)+1,((SP))(PC15..PC8)

(PC)ad 16

Абсолютный вызов подпрограммы в пределах страницы в 2 Кбайта

ACALL ad 11

(PC)(PC)+2;

(SP)(SP)+1,((SP))(PC7..PC0);

(SP)(SP)+1,((SP))(PC15..PC8)

(PC10 PC0)ad 11

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

RET

(PC15 PC8)((SP)),(SP)(SP)-1,

(PC7..PC0)((SP)), (SP)(SP)-1

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

RETI

(PC15 PC8)((SP)),(SP)(SP)-1,

(PC7..PC0)<-((SP)), (SP)(SP)-1

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

NOP

(PC)(PC)+1

Команда возврата из подпрограммы обслуживания прерывания (RETI) кроме действий, эквивалентных команде RET (возврат из подпрограммы), дополнительно разрешает прерывания текущего уровня (такого же уровня приоритета, что и подпрограмма обслуживания прерывания, которая закончилась командой RETI) .

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