Лек2 (1084887), страница 2
Текст из файла (страница 2)
Для обращения к внешней памяти данных используется только косвенная адресация с помощью регистров R0 и R1 при небольшом объёме внешней памяти данных (до 256 байт) или с помощью 16-разрядного регистра-указателя адреса внешней памяти DPTR. С его помощью можно адресоваться ко всем 64 Кбайт внешней памяти. Например, MOVX A, @R0 ; ((R0))(A) или MOVX @DPTR, A ; (A)((DPTR))
Система команд микроконтроллера 8051 позволяет использовать память программ для хранения данных, значения которых известны на этапе программирования и не должны изменяться в процессе выполнения программы. К ним относятся таблицы, тексты визуальных сообщений, константы для вычислений и т. д. Подобного рода данные хранятся в свободной области памяти программ и могут извлекаться одной из двух команд:
MOVC A, A+DPTR ;((A)+(DPTR))(A)
MOVC A, A+PC ;((A)+(PC))(A),
Первая из которых служит для извлечения только из внешней памяти программ, вторая позволяет считывать константы из внешней и внутренней памяти программ. В этих командах содержимое аккумулятора перед выполнением команды является одним из слагаемых адреса ячейки, хранящей константу, и затем после выполнения команды становится приёмником операнда. Вторым слагаемым при вычислении адреса является содержимое либо регистра – указателя адреса внешней памяти DPTR, либо счетчика команд PC.
Пример. Передать в порт Р1 первые два символа сообщения, размещённого во внешней памяти программ и начинающегося с ячейки с символическим адресом MESSAGE_1.
MOV DPTR, #MESSAGE_1 ; Запись начального адреса
MOVC A, @A+DPTR ; Извлечение символа.
MOV P1, A ; Вывод в порт
INC DPTR; Формирование адреса второго символа
MOVC A, @A+DPTR ; Извлечение второго символа
MOV P1, A ; Вывод второго символа
2.4. Функции регистров специального назначения
В базовой модели в области регистров специального назначения (128-255) размещается 21 регистр, обозначения на языке ассемблера, наименования и адреса которых представлены в таблице 2.1.
Таблица 2.1.
Обозначение | Наименование | Адрес |
* АСС | Аккумулятор | 0Е0Н |
* В | Регистр В | 0F0H |
* PSW | Регистр состояния программы | 0D0H |
SP | Указатель стека | 81Н |
DPTR | Указатель данных. 2 байта: | |
DPL | Младший байт | 82Н |
DPH | Старший байт | 83Н |
* Р0 | Порт 0 | 80Н |
* Р1 | Порт 1 | 90Н |
* Р2 | Порт 2 | 0А0Н |
* РЗ | Порт 3 | 0В0Н |
* IP | Регистр приоритетов прерываний | 0В8Н |
* IE | Регистр разрешения прерываний | 0А8Н |
TMOD | Регистр режимов таймера/счетчика | 89Н |
* TCON | Регистр управления таймера/счетчика | 88Н |
TH0 | Таймер/счетчик 0. Старший байт | 8СН |
TL0 | Таймер/счетчик 0. Младший байт | 8АН |
TH1 | Таймер/счетчик 1. Старший байт | 8DH |
TL1 | Таймер/счетчик 1. Младший байт | 8ВН |
* SCON | Управление последовательным портом | 98Н |
SBUF | Буфер последовательного порта | 99Н |
PCON | Управление потреблением | 87Н |
Примечание: Регистры, отмеченные знаком (*), допускают побитную адресацию.
Дано краткое описание функций регистров, приведенных в табл.2.1. Более подробно некоторые из них рассматриваются ниже в соответствующих разделах.
Аккумулятор А/АСС – аккумулятор. Команды, предназначенные для работы с аккумулятором, используют мнемонику "А", например, MOV A, Р2. Мнемоника "АСС" используется, к примеру, при побитовой адресации аккумулятора. Так, символическое имя пятого бита аккумулятора при использовании ассемблера ASM51 будет следующим: АСС.5. Аккумулятор является источником одного из операндов и приёмником результата в двухоперандных операциях.
Регистр В – расширитель аккумулятора, используется совместно с аккумулятором в операциях умножения и деления.
Регистр PSW – регистр слова состояния программы. Формат регистра PSW показан на рис. 2.6.
Рис.2.6. Формат регистра PSW
С – признак переноса (от Carry – перенос),
АС – признак вспомогательного переноса,
F0 – признак пользователя,
RS1, RS0– разряды, определяющие банк рабочих регистров,
ОV– признак переполнения (от английского термина OVerflow - переполнение),
F1-признак пользователя (в базовом варианте не реализован),
Р – признак паритета.
Признак переноса С устанавливается при сложении, если результат >255, при вычитании, если вычитаемое больше уменьшаемого. Признак вспомогательного переноса АС устанавливается при переносе из 3-его разряда в 4-ый. Используется только при сложении двоично-десятичных чисел.
Признакам F0 и F1– пользователь может придавать различный смысл.
Признак переполнения 0V –используется только при работе с числами со знаками. Устанавливается, если знак результата неверен (требуется коррекция).
Признак паритета Р – отражает четное или нечетное количество «1» в результате.
После операций сложения и вычитания устанавливается четыре признака: C, AC, OV и P. После логических операций устанавливается только признак P, т.к. цепи переноса отключены.
Буфер последовательного порта SBUF представляет собой два отдельных регистра: буфер передатчика и буфер приемника. Когда данные записываются в SBUF, они поступают в буфер передатчика, причем запись байта в SBUF автоматически инициирует его передачу через последовательный порт. Когда данные читаются из SBUF, они выбираются из буфера приемника.
Указатель стека (SP- Stack Pointer) представляет собой восьмиразрядный регистр, предназначенный для адресации к особой области памяти данных (стеку), в котором можно временно сохранить содержимое любой ячейки памяти. У микро-ЭВМ семейства 8051 стек «возрастающий», т.е. перед выполнением команды PUSH или CALL или по запросу прерывания, содержимое SP инкрементируется, после чего производится запись информации в стек. Соответственно, при извлечении информации из стека, регистр SP декрементируется после извлечения информации.
В процессе инициализации микро-ЭВМ, после сигнала сброса или при включении питающего напряжения, в SP заносится код 07Н. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08Н. При необходимости, путем переопределения указателя стека, область стека может быть расположена в любом месте резидентной памяти данных.
Указатель внешней памяти данных DPTR содержит 16-битовый адрес внешней памяти и состоит из старшего байта (DPH) и младшего байта (DPL), которые по отдельности могут отрабатываться и пересылаться стек.
Регистры таймера. Регистровые пары (TH0, TL0) и (TH1, TL1) образуют 16-битовые счетные регистры соответственно таймера/счетчика 0 Т/С0 и таймера/счетчика 1-Т/С1.
Регистры управления таймерами/счётчиками TMOD и TCON служат для задания режима работы, запуска/останова и проверки окончания счёта таймерами/счётчиками Т/С0 и Т/С1.
Регистры управления последовательным портом SCON и PCON служат для задания режима работы, формата посылок и скорости приёма/передачи универсального синхронно-асинхронного последовательного порта.
Регистры управления прерываниями IP, IE содержат биты разрешения прерывания, запросов (флагов) прерывания и приоритетов прерываний таймеров/счетчиков, универсального синхронно-асинхронного последовательного порта и внешних источников.
2.5.Организация памяти программ
Как и у большинства микроконтроллеров, у микроконтроллеров семейства 8051, память программ и память данных являются самостоятельными и независимыми друг от друга устройствами, адресуемыми различными регистрами и управляющими сигналами. Способы адресации к памяти данных и управляющие сигналы, формируемые при обращении к внешней памяти данных, рассмотрены выше. Адресация к памяти программ всегда производится счётчиком команд, и его разрядность определяет максимальный объём памяти программ.
Принципиальное отличие физических свойств памяти данных от памяти программ заключается в том, что содержимое памяти данных теряется при выключении питания, в то время как коды, занесенные в память программ, сохраняются при отсутствии напряжения питания. В силу данной причины, память данных еще иногда называют оперативной памятью (оперативным запоминающим устройством или ОЗУ), в отличие от памяти программ, именуемой постоянным запоминающим устройством (ПЗУ).
Память программ может быть внутренняя, внешняя или комбинированная.
Объем внутренней памяти программ в базовой модели равен 4 Кбайтам. (У некоторых современных микроконтроллеров объём резидентной памяти достигает 256Кбайт, разделённой на 8 секций по 32Кбайта).
Увеличение объёма памяти программ может быть достигнуто подключением внешних микросхем ПЗУ, как показано на рис.2.7.
Регистр адреса RG предназначен для запоминания младших 8-ми бит адреса, передаваемых через шину данных/адреса, организованную на базе порта Р0. Старшие восемь бит адреса передаются через P2 и остаются неизменными в течение машинного цикл.
Во время передачи адреса микроконтроллер вырабатывает строб адреса внешней памяти ALE. Именно этот импульс позволяет запомнить младший байт адреса в регистре адреса RG. (Следует отметить, что сигнал ALE вырабатывается постоянно даже при отсутствии внешней памяти и служит индикатором работоспособности микроконтроллера). При обращении к внешней памяти программ и к внешней памяти данных используются одни и те же шина адреса и шина данных, но разные управляющие сигналы.
Рис.2.7. Расширение памяти программ и памяти данных
При обращении к памяти данных, которая обозначена на рис.2.7, как «RAM», что означает Random Access Memory - память произвольного доступа источником адреса является регистр – указатель внешней памяти данных DPTR. Запись в память данных осуществляется командой MOVX @DPTR, A , по которой в порт Р0 поступает содержимое аккумулятора и одновременно вырабатывается сигнал записи WR, настраивающее внешнее ОЗУ на запись данных, установленных на информационной шине. При чтении из памяти данных командой MOVX А, @DPTR вырабатывается сигнал чтения RD, настраивающий порт Р0 на приём, а внешнее ОЗУ на считывание информации из адресуемой ячейки.
При обращении к памяти программ, обозначенной «ROM», что означает Read-Only Memory -память, доступная только для чтения источником адреса является счётчик команд (СК). Для чтения памяти программ вырабатывается сигнал PSEN, а для чтения памяти данных вырабатывается сигнал RD.
Порядок извлечения кодов из внешней и внутренней памяти зависит от уровня напряжения на входе ЕА. При ЕА=1 команды сначала извлекаются из внутренней памяти по адресам 0-4095, а затем из внешней памяти. Если ЕА=0, команды извлекаются только из внешней памяти, внутренняя память игнорируется, даже если она существует. Извлечение из внешней памяти производится по сигналу PSEN. Микроконтроллер обращается к программной памяти при чтении кода операции, используя счетчик команд PC, а также при выполнении команд переноса байта из памяти программ в аккумулятор. При выполнении команд переноса данных адресация ячейки памяти программ, из которой будут прочитаны данные, может осуществляться с использованием как счетчика PC, так и специального двухбайтового регистра-указателя данных DPTR.