Академический Документы
Профессиональный Документы
Культура Документы
Андреев
ПРОГРАММИРОВАНИЕ
МИКРОКОНТРОЛЛЕРОВ MCS-51
Ульяновск 2000
УДК 681.32(075)
ББК 32.973.2я7
А65
Андреев Д.В.
А65 Программирование микроконтроллеров MCS-51: Учебное пособие.
- Ульяновск: УлГТУ, 2000. - 88 с.
ISBN 5-89146-133-1
Приведены технические характеристики и функциональные
возможности популярных микроконтроллеров семейства MCS-51,
выпускаемых ведущими компаниями мира. Рассмотрены особенности
программной модели микроконтроллера 8051, являющегося ядром MCS-
51, и соответствующего машинно-ориентированного языка АСМ51.
Описаны содержание основных этапов разработки прикладного
программного обеспечения микроконтроллера 8051, а также технология
применения специальных программных кросс-средств (кросс-ассемблера
X8051 и кросс-редактора связей Link). Даны варианты типовых
микроконтроллерных программ. Изложение сопровождается большим
числом практических примеров.
УДК 681.32(075)
ББК 32.973.2я7
Учебное издание
АНДРЕЕВ Дмитрий Васильевич
ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ MCS-51
Учебное пособие
Редактор Н.А.Евдокимова
Изд. лиц. 020640 от 22.10.97. Подписано в печать 22.02.00. Формат 60х84/16.
Бумага писчая. Усл. печ. л. 5,12. Уч.-изд. л. 5,00. Тираж 200 экз. Заказ
Ульяновский государственный технический университет,
432027, Ульяновск, Сев. Венец, 32.
Типография УлГТУ, 432027, Ульяновск, Сев. Венец, 32.
ПРЕДИСЛОВИЕ
8xC251SA 16 8K 1K 3+PCA+WDT
8xC251SB 16 16K 1K 3+PCA+WDT
8xC251SP 16 8K 512 3+PCA+WDT
8xC251SQ 16 16K 512 3+PCA+WDT
TSC8xC251A1 16 24K 1K 2+WDT
8xC151SA 16 8K 256 3+PCA+WDT
8xC151SB 16 16K 256 3+PCA+WDT
удачным, что архитектура этих микроконтроллеров стала промышленным
стандартом, а сам РСА многократно воспроизводился в различных
модификациях МК 8051.
Некоторые характеристики ряда микроконтроллеров MCS-51,
выпускаемых фирмой Intel, приведены в табл.1.1.
Изначально наиболее "узкими" местами архитектуры MCS-51 были
8-разрядное АЛУ на базе аккумулятора и относительно медленное
выполнение команд (для выполнения самых быстрых команд требуется
12 пе-
Таблица 1.1
Линии Послед. АЦП, входы Другая U пит. (В)
ввода/вывода каналы x разряды периферия,
особенности
32 UART - - 4,5…5,5
32 UART - - 4,5…5,5
32 UART - - 4,5…5,5
32 UART - - 4,5…5,5
32 UART - - 4,0…6,0
32 UART - - 4,0…6,0
32 UART - - 4,0…6,0
32 UART - - 4,0…6,0
32 UART - Низковольтный 2,7…3,6
вариант
8xC52/54/58
32 UART - - 4,0…6,0
32 UART - 4 уровня IRQ, 4,0…6,0
clock out
32 UART - 4 уровня IRQ, 4,0…6,0
clock out
32 UART - Низковольтный 2,7…3,6
вариант 8xC51Fx
32 UART - 4 уровня IRQ, 4,0…6,0
clock out
32 UART - 4 уровня IRQ, 4,0…6,0
clock out
32 UART - 4 уровня IRQ, 4,0…6,0
clock out
32 UART - - 4,5…5,5
32 UART - - 4,5…5,5
32 UART - - 4,5…5,5
32 UART - - 4,5…5,5
32 UART 4x8 - 4,5…5,5
32 UART - - 4,5…5,5
32 UART - - 4,5…5,5
риодов тактовой частоты (частоты синхронизации МК)). Это
ограничивало применение микроконтроллеров семейства в приложениях,
требующих повышенного быстродействия и сложных вычислений (16- и
32-битовых). Насущным стал вопрос принципиальной модернизации
архитектуры MCS-51. Проблема модернизации осложнялась тем, что к
началу 90-х годов уже была создана масса наработок в области
программного и аппаратного обеспечения семейства MCS-51, в связи с
чем одной из основных задач проектирования новой архитектуры была
реализация аппаратной и программной совместимости с разработками на
базе MCS-51.
Для решения указанной задачи была создана совместная группа из
специалистов компаний Intel и Philips, но позднее пути этих двух фирм
разошлись. В результате в 1995 году появилось два существенно
отличающихся семейства: MCS-251/151 у Intel и MCS-51XA у Philips (см.
подраздел 1.2).
Основные характеристики архитектуры MCS-251:
- 24-разрядное линейное адресное пространство, обеспечивающее
адресацию до 16 Мбайт памяти;
- регистровая архитектура, допускающая обращение к регистрам как к
байтам, словам и двойным словам;
- страничный режим адресации для ускорения выборки команд из
внешней программной памяти;
- очередь инструкций;
- расширенный набор команд, включающий 16-битовые арифметические
и логические операции;
- расширенное адресное пространство стека (до 64 Кбайт);
- выполнение самой быстрой команды за 2 такта.
Система команд MCS-251 включает два набора инструкций - первый
набор является копией системы команд MCS-51, а второй состоит из
расширенных инструкций, реализующих преимущества архитектуры
MCS-251. Перед использованием микроконтроллера его необходимо
сконфигурировать, т.е. с помощью программатора "прожечь"
конфигурационные биты, определяющие, какой из наборов инструкций
станет активным после включения питания. Если установить первый
набор инструкций, то в этом случае МК семейства MCS-251 будет
совместим с MCS-51 на уровне двоичного кода. Такой режим называется
Binary Mode. Если же изначально установить набор расширенных
инструкций (режим Source Mode), то тогда программы, написанные для
MCS-51, потребуют перекомпиляции на кросс-средствах для MCS-251.
Режим Source Mode позволяет с максимальной эффективностью
использовать архитектуру MCS-251 и достигнуть наибольшего
быстродействия.
Для пользователей, ориентированных на применение
микроконтроллеров MCS-251 в качестве механической замены MCS-51,
фирма Intel выпускает микроконтроллеры MCS-151, уже
запрограммированные в состояние Binary Mode.
Некоторые характеристики ряда микроконтроллеров MCS-251/151
приведены в табл.1.1.
В настоящее время Intel, устремленная на рынок Pentium-
процессоров, сворачивает производство кристаллов MCS-51. В целом для
конкретного разработчика это может остаться и незамеченным, если
только он не использует микроконтроллеры 8xC51GB и 80C152Jx,
которые не имеют своих точных аналогов среди изделий других фирм.
Что же касается всех остальных микроконтроллеров семейства MCS-51,
то все они многократно растиражированы другими компаниями.
32 2 UART - - 3,0…5,5
32 UART, - - 2,7…5,5
CAN
Список литературы
Таблица 2.1
Наименование Назначение Адрес
P0* Порт 0 80H
SP Указатель стека 81H
DPL Младший байт указателя данных DPTR 82H
DPH Старший байт указателя данных DPTR 83H
PCON Регистр управления потреблением 87H
TCON* Регистр управления таймеров/счетчиков 88H
TMOD Регистр режимов таймеров/счетчиков 89H
TL0 Таймер/счетчик 0. Младший байт 8АH
TL1 Таймер/счетчик 1. Младший байт 8BH
TH0 Таймер/счетчик 0. Старший байт 8CH
TH1 Таймер/счетчик 1. Старший байт 8DH
P1* Порт 1 90H
SCON* Регистр управления последовательным портом 98H
SBUF Буфер последовательного порта 99H
P2* Порт 2 0A0H
IE* Регистр разрешения прерываний 0A8H
P3* Порт 3 0B0H
IP* Регистр приоритетов прерываний 0B8H
PSW* Регистр состояния программы 0D0H
A* Аккумулятор 0E0H
B* Регистр B 0F0H
* - регистры, допускающие побитовую адресацию.
Таблица 2.2
Биты Наименование Назначение
7 SMOD Бит удвоения скорости передачи через
последовательный порт. При установке в "1"
скорость передачи удваивается. Доступен по
чтению.
6 - Не используется.
5 - Не используется.
4 - Не используется.
3 GF1 Программно управляемый флаг пользователя.
2 GF0 Программно управляемый флаг пользователя.
1 PD Бит включения режима микропотребления ("1" -
включение, "0" - отмена). Доступен по чтению.
0 IDL Бит включения режима холостого хода. ("1" -
включение, "0" - отмена). Доступен по чтению.
Таблица 2.3
Биты Наименование Назначение
7 TF1 Флаг переполнения T/C1.
6 TR1 Бит включения T/C1.
TR1=1 - включен, TR1=0 - выключен.
5 TF0 Флаг переполнения T/C0.
4 TR0 Бит включения T/C0.
TR0=1 - включен, TR0=0 - выключен.
3 IE1 Флаг запроса внешнего прерывания .
2 IT1 Бит, определяющий вид прерывания .
IT1=0 - прерывание по уровню (низкому),
IT1=1 - прерывание по фронту (переход из"1" в "0").
1 IE0 Флаг запроса внешнего прерывания .
0 IT0 Бит, определяющий вид прерывания .
IT0=0 - прерывание по уровню (низкому),
IT0=1 - прерывание по фронту (переход из"1" в "0").
Таблица 2.4
Биты Наименование Назначение
7 GATE1 Бит разрешает (запрещает) управлять T/C1 от
внешнего вывода .
GATE1=1 - управление разрешено,
GATE1=0 - управление запрещено.
6 Бит определяет работу T/C1 в качестве таймера (
=0), счетчика внешних событий (
=1).
5 М1.1 Биты определяют один из 4-х режимов работы T/
4 М0.1 C1.
M1.1 M0.1 Режим
0 0 0
0 1 1
1 0 2
1 1 3
3 GATE0 Бит разрешает (запрещает) управлять T/C0 от
внешнего вывода .
GATE0=1 - управление разрешено,
GATE0=0 - управление запрещено.
2 Бит определяет работу T/C0 в качестве таймера (
=0), счетчика внешних событий (
=1).
1 М1.0 Биты определяют один из 4-х режимов работы T/
0 М0.0 C0.
M1.0 M0.0 Режим
0 0 0
0 1 1
1 0 2
1 1 3
Таблица 2.5
Биты Наименование Назначение
7 SM0 Биты определяют один из 4-х режимов работы
6 SM1 последовательного порта
SM0 SM1 Режим Характеристика режима
0 0 0 Сдвиговый регистр.
Скорость (частота)
приема/ передачи f/12.
0 1 1 8-битовый универсальный
асинхронный приемник/
передатчик (УАПП).
Скорость (частота)
приема/ передачи задается
частотой переполнений
T/C1.
1 0 2 9-битовый УАПП.
Скорость (частота)
приема/ передачи f/64 или
f/32.
1 1 3 9-битовый УАПП.
Скорость (частота)
приема/ передачи задается
частотой переполнений
T/C1.
5 SM2 Бит разрешения многопроцессорной работы.
4 REN Бит разрешает (запрещает) прием.
REN=1 - прием разрешен,
REN=0 - прием запрещен.
3 TB8 Девятый бит передаваемых данных в режимах 2, 3.
2 RB8 Девятый бит принятых данных в режимах 2, 3.
1 TI Флаг прерывания передатчика.
0 RI Флаг прерывания приемника.
Таблица 2.6
Биты Наименование Назначение
7 EA Бит управления всеми источниками прерываний
одновременно.
EA=0 - прерывания запрещены,
EA=1 - прерывания могут быть разрешены
индивидуальными разрешениями EX0, EX1, ET0,
ET1, ES.
6 - Не используется.
5 - Не используется.
4 ES Бит управления прерыванием от последовательного
порта.
ES=0 - прерывание запрещено,
ES=1 - прерывание разрешено.
3 ET1 Бит управления прерыванием от T/C1.
ET1=0 - прерывание запрещено,
ET1=1 - прерывание разрешено.
2 EX1 Бит управления прерыванием от внешнего
источника .
EX1=0 - прерывание запрещено,
EX1=1 - прерывание разрешено.
1 ET0 Бит управления прерыванием от T/C0.
ET0=0 - прерывание запрещено,
ET0=1 - прерывание разрешено.
0 EX0 Бит управления прерыванием от внешнего
источника .
EX0=0 - прерывание запрещено,
EX0=1 - прерывание разрешено.
Таблица 2.7
Биты Наименование Назначение
7 - Не используется.
6 - Не используется.
5 - Не используется.
4 PS Бит установки уровня приоритета прерывания от
последовательного порта.
3 PT1 Бит установки уровня приоритета прерывания от
таймера/счетчика T/C1.
2 PX1 Бит установки уровня приоритета прерывания от
внешнего источника .
1 PT0 Бит установки уровня приоритета прерывания от
таймера/счетчика T/C0.
0 PX0 Бит установки уровня приоритета прерывания от
внешнего источника .
Таблица 2.8
Биты Наимен Назначение
ование
7 C Флаг переноса. Устанавливается в "1" (сбрасывается в "0")
аппаратно или программно. Аппаратно устанавливается
(сбрасывается) во время выполнения команды сложения
или вычитания при наличии (отсутствии) соответственно
переноса или заема в 7-ом бите результата. Во время
выполнения команды умножения или деления флаг всегда
аппаратно сбрасывается.
6 AC Флаг дополнительного переноса. Устанавливается
(сбрасывается) аппаратно или программно. Аппаратно
устанавливается (сбрасывается) во время выполнения
команды сложения или вычитания при наличии
(отсутствии) соответственно переноса или заема в 3-ем
бите результата.
5 F0 Программно управляемый флаг пользователя.
4 RS1 Разряды управления выбором банка рабочих регистров.
3 RS0 Устанавливаются (сбрасываются) программно.
RS1 RS0 Банк
0 0 0
0 1 1
1 0 2
1 1 3
2 OV Флаг переполнения. Устанавливается (сбрасывается)
аппаратно или программно. Аппаратно устанавливается во
время выполнения команды сложения (вычитания) если
есть перенос (заем) в 6-ом бите результата и нет переноса
(заема) в бите 7, или есть перенос (заем) в бите 7 и нет в
бите 6, в противном случае флаг сбрасывается. Во время
выполнения команды деления флаг аппаратно
сбрасывается, а в случае деления на нуль -
устанавливается. При умножении флаг аппаратно
устанавливается если результат больше 255, в противном
случае - сбрасывается.
1 без Флаг пользователя. Устанавливается (сбрасывается)
имени программно. Доступен по чтению.
0 P Флаг паритета. Программно доступен только по чтению.
Аппаратно сбрасывается (устанавливается) в каждом
машинном цикле для индикации четности (нечетности)
количества разрядов аккумулятора, находящихся в
состоянии "1". Если в аккумуляторе все разряды сброшены
в "0", флаг аппаратно сбрасывается.
Таблица 2.9
Обозначение Назначение
addr Символическое имя вычисляемого адреса ячейки памяти
программ.
addr11 Символическое имя 11-битового адреса ячейки памяти
программ.
addr16 Символическое имя 16-битового адреса ячейки памяти
программ.
bit Символическое имя 8-разрядного адреса бита в области
ячеек резидентной памяти данных или регистров
специальных функций, допускающей побитовое
обращение (см. рис.2).
data8 Символическое имя байта данных.
Продолжение табл.2.9
Обозначение Назначение
data16 Символическое имя 16-битовых данных.
direct Символическое имя 8-разрядного адреса ячейки
резидентной памяти данных или регистра специальных
функций.
rel Значение байта смещения, используемое при вычислении
адреса addr.
(X) Содержимое элемента X.
((X)) Содержимое по адресу, хранящемуся в элементе X.
X[M] Разряд M элемента X.
X[3-0] Группа разрядов элемента X.
Оператор присваивания.
Дизъюнкция.
Конъюнкция.
Сложение по модулю 2.
XY Целочисленное деление элемента X на элемент Y.
mod[XY] Остаток при целочисленном делении.
Время выполнения рассматриваемых команд указывается в
машинных циклах. Напомним, что длительность одного машинного цикла
определяется выражением , где f есть частота синхронизации
микроконтроллера.
CLR A 11100100
Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое
аккумулятора A, на состояние флагов не влияет и имеет время
выполнения 1 цикл.
Алгоритм Пример
(A)0 ;(A)=6CH, (C)=0, (AC)=1
CLR A ;(A)=00H, (C)=0, (AC)=1
CLR C 11000011
Команда "сброс флага переноса" сбрасывает (обнуляет) содержимое флага
переноса C, на состояние других флагов не влияет и имеет время
выполнения 1 цикл.
Алгоритм Пример
(C)0 ;(C)=1
CLR C ;(C)=0
CPL A 11110100
Команда "инверсия аккумулятора" инвертирует содержимое каждого бита
аккумулятора A, на состояние флагов не влияет и имеет время
выполнения 1 цикл.
Алгоритм Пример
(A) ;(A)=65H=01100101B
CPL A ;(A)=9AH=10011010B
CPL C 10110011
Команда "инверсия флага переноса" инвертирует содержимое флага
переноса C, на состояние других флагов не влияет и имеет время
выполнения 1 цикл.
Алгоритм Пример
(C) ;(C)=1, (AC)=1, (OV)=0
CPL C ;(C)=0, (AC)=1, (OV)=0
DA A 11010100
Команда "десятичная коррекция аккумулятора" упорядочивает 8-битовую
величину в аккумуляторе A, полученную в результате выполненной ранее
команды сложения двух переменных, представленных в двоично-
десятичном формате. Для выполнения сложения может использоваться
любая из типов команд ADD или ADDC. Если значение битов 3-0
аккумулятора превышает 9 (xxxx1010B-xxxx1111B) или, если содержимое
флага AC установлено в "1", то к содержимому A прибавляется 06H, при
этом получается соответствующая двоично-десятичная цифра в младшем
полубайте A. Указанное сложение не изменяет содержимое флага AC, но
устанавливает в "1" содержимое флага переноса C, если перенос из поля
младших четырех бит распространяется через все старшие биты A, в
противном случае - не изменяет (C). Далее, если содержимое флага C
равно "1", или если значение битов 7-4 аккумулятора превышает 9
(1010xxxxB-1111xxxxB), то это значение увеличивается на 6, создавая
соответствующую двоично-десятичную цифру в старшем полубайте A.
При этом флаг C устанавливается (не изменяется), если имеется
(отсутствует) перенос из бита 7 аккумулятора. Время выполнения
команды 1 цикл.
Алгоритм Пример
если (A[3-0])9 или (AC)=1, ;(A)=30H, (R3)=99H
то (A)(A)+6 ADD A,R3 ;(A)=0C9H,
если (A[7-4])9 или (C)=1, ;(AC)=0, (C)=0
то (A[7-4])(A[7-4])+6 DA A ;(C)=1, (A)=29H, (AC)=0
DEC A 00010100
Команда "декремент" производит вычитание "1" из содержимого
аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.
Алгоритм Пример
(A)(A)-1 ;(A)=00H, (C)=1, (AC)=1
DEC A ;(A)=0FFH, (C)=1, (AC)=1
DIV AB 10000100
Команда "деление" делит 8-битовую переменную из аккумулятора A на 8-
битовую переменную из регистра B. Аккумулятору присваивается целая
часть частного (старшие разряды), а регистру B - остаток. Содержимое
флага переноса C сбрасывается в "0". Содержимое флага переполнения
OV также сбрасывается, а в случае деления на нуль - устанавливается в
"1". Содержимое флага AC не изменяется. Команда имеет время
выполнения 4 цикла.
Алгоритм Пример
(A)(A):(B), (B)mod[(A):(B)], (C)0 ;(A)=0FBH=251, (B)=12H=18,
если (В)0, то (OV)0 ;(C)=1, (OV)=1
если (В)=0, то (OV)1 DIV AB ;(C)=0, (OV)=0,
;(A)=0DH=13, (B)=11H=17
INC A 00000100
Команда "инкремент байта" производит прибавление "1" к содержимому
аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.
Алгоритм Пример
(A)(A)+1 ;(A)=0FFH, (C)=1, (AC)=1
INC A ;(A)=00H, (C)=1, (AC)=1
MUL AB 10100100
Команда "умножение" умножает 8-битовую переменную из аккумулятора
A на 8-битовую переменную из регистра B, при этом старший и младший
байты произведения загружаются соответственно в B и A. Содержимое
флага переноса C сбрасывается в "0". Содержимое флага переполнения
OV устанавливается в "1" если результат умножения больше 0FFH, в
противном случае - также сбрасывается. Содержимое флага AC не
изменяется. Команда имеет время выполнения 4 цикла.
Алгоритм Пример
(A)(B)=data16 ;(A)=50H=80, (B)=0A0H=160,
(A)data16[7-0], (B)data16[15-8] ;(C)=1, (OV)=0
(C)0 MUL AB ;(C)=0, (OV)=1,
если data16 0FFH, то (OV)0 ;(A)=00H, (B)=32H
если data16 0FFH, то (OV)1
NOP 00000000
Команда "нет операции" увеличивает содержимое программного счетчика
PC на единицу, при этом состояние всех остальных программно
доступных элементов микроконтроллера не изменяется. Команда имеет
время выполнения 1 цикл.
Алгоритм Пример
(PC)(PC)+1 ;(PC)=1FFH
NOP
NOP ;(PC)=201H
RET 00100010
Команда "возврат из подпрограммы" последовательно копирует
содержимое двух ячеек, адресуемых содержимым указателя стека SP в
резидентной памяти данных (РПД), в программный счетчик PC. При этом
содержимое SP уменьшается на два. Команда на состояние флагов не
влияет и имеет время выполнения 2 цикла.
Алгоритм Пример
(PC[15-8])((SP)) ;(SP)=32H, (PC)=3DFH,
(SP)(SP)-1 ;в РПД (31H)=23H, (32H)=01H
(PC[7-0])((SP)) RET ;(SP)=30H, (PC)=123H,
(SP)(SP)-1 ;в РПД (31H)=23H, (32H)=01H
RETI 00110010
Команда "возврат из прерывания" последовательно копирует содержимое
двух ячеек, адресуемых содержимым указателя стека SP в резидентной
памяти данных (РПД), в программный счетчик PC и разрешает
прерывания с уровнем приоритета, равным уровню приоритета только что
обработанного прерывания. При этом содержимое SP уменьшается на два.
Команда на состояние флагов не влияет и имеет время выполнения 2
цикла.
Алгоритм Пример
(PC[15-8])((SP)) ;(SP)=23H, (PC)=0D3FH,
(SP)(SP)-1 ;в РПД (22H)=34H, (23H)=02H
(PC[7-0])((SP)) RETI ;(SP)=21H, (PC)=234H,
(SP)(SP)-1 ;в РПД (22H)=34H, (23H)=02H
RL A 00100011
RLC A 00110011
Команда "сдвиг аккумулятора влево через флаг переноса" сдвигает
содержимое аккумулятора A на один бит влево, причем содержимое бита
7 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит
0 аккумулятора. Команда на состояние других флагов не влияет и имеет
время выполнения 1 цикл.
Алгоритм Пример
(A[M+1])(A[M]), где M=0-6 ;(A)=85H, (C)=0
(A[0])(С), (С)(A[7]) RLC A ;(A)=0AH, (C)=1
RR A 00000011
Команда "сдвиг аккумулятора вправо" сдвигает содержимое аккумулятора
A на один бит вправо, причем содержимое бита 0 пересылается в бит 7.
Команда на состояние флагов не влияет и имеет время выполнения 1
цикл.
Алгоритм Пример
(A[M])(A[M+1]), где M=0-6 ;(A)=85H, (C)=1
(A[7])(A[0]) RR A
RR A ;(A)=61H, (C)=1
RRC A 00010011
Команда "сдвиг аккумулятора вправо через флаг переноса" сдвигает
содержимое аккумулятора A на один бит вправо, причем содержимое
бита 0 аккумулятора пересылается во флаг переноса C, а содержимое C - в
бит 7 аккумулятора. Команда на состояние других флагов не влияет и
имеет время выполнения 1 цикл.
Алгоритм Пример
(A[M])(A[M+1]), где M=0-6 ;(A)=85H, (C)=0
(A[7])(С), (С)(A[0]) RRC A ;(A)=42H, (C)=1
SETB C 11010011
Команда "установить бит" устанавливает содержимое флага переноса C в
"1". Команда на состояние других флагов не влияет и имеет время
выполнения 1 цикл.
Алгоритм Пример
(C)1 ;(C)=0
SETB C ;(C)=1
SWAP A 11000100
Команда "обмен тетрадой" осуществляет обмен содержимым младших
четырех и старших четырех битов аккумулятора A. Команда на флаги не
влияет и имеет время выполнения 1 цикл.
Алгоритм Пример
(A[3-0])(A[7-4]) ;(A)=49H
(A[7-4])(A[3-0]) SWAP A ;(A)=94H
Список литературы
где
N - не выводить;
T - выводить на терминал;
D - выводить на диск;
E - выводить только ошибки;
L - выводить листинг (вкл./выкл.);
P - выводить на принтер;
<CR> - равносильно "N".
Если ответить "D" или "P", то задается вопрос - выводить ли таблицу
перекрестных ссылок:
Input Filename:
Output Filename:
Input Filename:
Enter Offset For 'Code':
Эти сообщения повторяются до тех пор, пока все входные файлы не будут
перечислены. Расширение входных файлов по умолчанию принимается
равным .obj. Шестнадцатеричное значение смещения прибавляется к
начальному адресу объектного модуля МК-программы,
устанавливаемому, как известно, директивой ORG.
После того, как все входные файлы перечислены, на запрос имени
следующего входного файла надо нажать клавишу "Enter" и на экране
появится запрос имени выходного файла (загрузочного модуля):
Output Filename:
Library Filename:
***********************************************************
* LOAD MAP *
***********************************************************
* Section Name Starting Address Ending Address Size *
***********************************************************
* prim.obj *
* CODE 0000 000E 000F *
***********************************************************
STRT
;(MEMSEL){0,...,n-1}
MEMSEL REG R3
JMP_n MOV A,MEMSEL
MOV DPTR,#TBL
MOVC A,@A+DPTR
JMP @A+DPTR
TBL DB MT1-TBL,MT2-TBL,...,MTn-TBL
MT1 ..........
RET
MT2 ..........
RET
..........
MTn ..........
RET
MOV TH1,#<.NOT.K+1 ; ,
где
; МГц есть частота
синхро-
;низации микроконтроллера
SETB TR1 ;включить T/C1
RET
Список литературы
ОГЛАВЛЕНИЕ
ПРЕДИСЛОВИЕ . . . . . . . . . . . . 3
Глава 1. СОСТАВ СЕМЕЙСТВА MCS-51. . . . . . . 5
1.1. Микроконтроллеры фирмы Intel . . . . . . . . 6
1.2. Микроконтроллеры фирмы Philips. . . . . . . . 11
1.3. Микроконтроллеры фирм Siemens, Atmel и
Dallas Semiconductor. . . . . . . . . . . 15
Список литературы. . . . . . . . . . . . 18
Глава 2. ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ
МИКРОКОНТРОЛЛЕРОВ MCS-51. . . . . . . 19
2.1. Программная модель микроконтроллера 8051 . . . . . 19
2.2. Ассемблерный язык микроконтроллера 8051. . . . . . 31
2.2.1. Система команд языка АСМ51 . . . . . . . 34
2.2.2. Директивы языка АСМ51 . . . . . . . . 69
Список литературы. . . . . . . . . . . . 72
Глава 3. ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРИКЛАДНОГО
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
МИКРОКОНТРОЛЛЕРОВ MCS-51. . . . . . . 73
3.1. Этапы проектирования ППО. . . . . . . . . 73
3.2. Кросс-ассемблер X8051. . . . . . . . . . 76
3.3. Кросс-редактор связей Link . . . . . . . . . 78
3.4. Примеры микроконтроллерных программ
широкого применения . . . . . . . . . . 81
Список литературы. . . . . . . . . . . . 87