;числа сотен
MOV R1,A ;сохранить число сотен в R1
MOV A,#10
XCH A, B ;поместить остаток в A
DIV AB ;разделить на 10 для определения
;числа десятков
SWAP A ;число десятков в старшей тетраде A
ADD A, B ;число единиц в младшей тетраде A
MOV R0,A ;сохранить число десятков и единиц в R0
RET
Фрагмент МК-программы, предложенный ниже, обеспечивает преобразование двухзначного двоично-десятичного числа, содержащегося в R3, в двоичное 8-разрядное число, размещаемое в регистре DPH.
CONV MACRO BCD, BIN ;начало макроопределения с
;формальными параметрами BCD и BIN
MOV A, BCD
MOV B,#10H
DIV AB ;разделить на 16 для отделения
;старшей и младшей тетрад A
MOV R1,B
MOV B,#10
MUL AB
ADD A, R1
MOV BIN, A
ENDM ;конец макроопределения
CONV R3,DPH ;макрокоманда с фактическими
;параметрами R3 и DPH
Считывание таймера/счетчика в процессе работы. Часто встречаются ситуации, когда необходимо определить текущее состояние работающего T/Cj (jÎ{0,1}). Указанное может быть легко осуществлено последовательным чтением регистров THj и TLj, после которого обязательно следует убедиться в том, что содержимое THj не изменилось (изменение возникает при переполнении TLj). Если изменение все же имело место, то следует повторить процедуру чтения сначала. Изложенный алгоритм реализован в подпрограмме RDT, приведенной ниже.
RDT MOV A, TH0
MOV R0,TL0 ;пересылка младшего байта T/C0 в R0
CJNE A, TH0,RDT ;контроль старшего байта T/C0
MOV R1,A ;пересылка старшего байта T/C0 в R1
RET
Передача параметров в подпрограмму. Обычно передача параметров перед вызовом подпрограммы осуществляется путем их загрузки в заданные регистры. Однако, если большое число параметров представляют собой константы, то более эффективным оказывается подход, при котором параметры фактически являются частью программного кода, следуя непосредственно за командой вызова подпрограммы. В этом случае подпрограмма определяет их местонахождение по адресу возврата в стеке. Рассмотрим подпрограмму ADDBCD, которая иллюстрирует указанный подход при суммировании четырехзначной двоично-десятичной константы 1234H с четырехзначной двоично-десятичной переменной, размещенной в резидентной памяти данных.
LCALL ADDBCD
DW 1234H ;BCD-константа
DB 56H ;адрес мл. байта BCD-переменной
DB 78H ;адрес мл. байта BCD-суммы
.........
ADDBCD POP DPH ;размещение в DPTR
POP DPL ;адреса возврата
MOV A,#2
MOVC A,@A+DPTR ;(A)=56H
MOV R0,A
MOV A,#3
MOVC A,@A+DPTR ;(A)=78H
MOV R1,A
MOV A,#1
MOVC A,@A+DPTR ;(A)=34H
ADD A,@R0 ;вычисление младшего байта суммы
DA A ;десятичная коррекция
MOV @R1,A
INC R0
INC R1
CLR A
MOVC A,@A+DPTR ;(A)=12H
ADDC A,@R0 ;вычисление старшего байта суммы
DA A ;десятичная коррекция
MOV @R1,A
MOV A,#4
JMP @A+DPTR ;переход к команде, следующей за
;списком параметров
Адрес | |
|
|
|
|
|
|
|
|
|
|
| STRT |
Рис.3. Схема размещения табличных констант |
Работа с таблицами констант. Существует довольно широкий круг задач, в которых используются большие многомерные таблицы калибровочных констант, нелинейных параметров и т. п. Подпрограмма MATRX осуществляет доступ к байтовым элементам
двумерной таблицы размерности m´n (m, n£255), размещенной в одномерной памяти программ микроконтроллера 8051 (рис.3), при этом адрес ADR ячейки ПП, содержащей элемент
, определяется по формуле:
,
где
и
есть соответственно номер строки и столбца таблицы; STRT есть адрес ячейки ПП, содержащей элемент
.
Отметим, что адрес ячейки ПП, содержащей элемент
, должен удовлетворять условию
.
;(R0)=i, (R1)=j, (DPTR)=STRT
MATRX MOV A, R0 ;(A)=i
DEC A
MOV B,#n
MUL AB
ADD A, DPL
MOV DPL, A ;в DPL младший байт STRT+n(i-1)
MOV A, B
ADDC A, DPH
MOV DPH, A ;в DPH старший байт STRT+n(i-1)
MOV A, R1 ;(A)=j
DEC A
MOVC A,@A+DPTR ;(A)=aij
RET
STRT DB a11,a12,...,a1n
DB a21,a22,...,a2n
..................
DB am1,am2,...,amn
Организация ветвления на n направлений предполагает выбор одной из n программных процедур в зависимости от выполнения соответствующего условия. Ниже приводится пример подпрограммы, эффективно реализующей указанный выбор. Здесь в зависимости от значения содержимого программно доступного элемента MEMSEL осуществляется переход к одной из команд с адресами MT1-MTn. При использовании подпрограммы JMP_n необходимо учитывать, что количество ячеек памяти программ, отведенное под таблицу адресов перехода и под область программных процедур, ограниченную адресами MT1 и MTn, не должно превышать 256 байт.
;(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
Программирование последовательного порта. Последовательный порт микроконтроллера 8051 обеспечивает широкие возможности по организации приема/передачи данных, при этом настройка на заданную скорость приема/передачи и требуемый протокол обмена достигается соответствующей инициализацией регистров PCON (табл.2.2), TMOD (табл.2.4), SCON (табл.2.5). В качестве примера ниже приводятся три подпрограммы, которые совместно обеспечивают работу последовательного порта в режиме 3 со скоростью приема/передачи данных 2400 бод.
;INIT - подпрограмма инициализации
INIT MOV SCON,#1101xx10B ;xÎ{0,1}
MOV TMOD,#0010xxxxB ;настройка T/C1
MOV PCON,#0 ;сброс бита SMOD
MOV TH1,#<.NOT. K+1 ;
, где
;
МГц есть частота синхро-
;низации микроконтроллера
SETB TR1 ;включить T/C1
RET
;SP_OUT - подпрограмма передачи данных и контрольного бита
SP_OUT MOV C, P ;пересылка контрольного бита из флага
MOV TB8,C ;паритета в SCON.3
M1 JNB TI, M1 ;синхронизация передачи
CLR TI ;сброс бита SCON.1
MOV SBUF, A ;передача контрольного бита и
;содержимого A через посл. порт
RET
;SP_IN - подпрограмма приема данных и контрольного бита
SP_IN JNB RI, SP_IN ;синхронизация приема
CLR RI ;сброс бита SCON.0
MOV A, SBUF ;загрузка принятого байта данных в A
MOV C, RB8 ;загрузка девятого принятого бита
;данных (контрольного бита) в C
RET
Программная организация задержки. Процедура организации временной задержки может быть реализована на основе программного цикла. При этом в заданный регистр загружается число, которое затем в каждом проходе цикла уменьшается на единицу. Так продолжается до тех пор, пока содержимое используемого регистра не станет равным нулю, что интерпретируется МК-программой как момент выхода из цикла. Время задержки при этом зависит от числа, загруженного в регистр, и времени выполнения команд, образующих цикл. Например, задержка, формируемая подпрограммой DELAY1, будет определяться выражением:
,
где f есть частота синхронизации микроконтроллера. Если
, то
мкс. Задержку большей длительности при той же частоте синхронизации можно получить вложением циклов, как показано в подпрограмме DELAY2, для которой
(мкс).
DELAY1 MOV R2,#n
M1 DJNZ R2,M1
RET
DELAY2 MOV R1,#n
MET2 MOV R2,#m
MET1 DJNZ R2,MET1
DJNZ R1,MET2
RET
Отметим, что максимальное время задержки, формируемой подпрограммой DELAY2, будет составлять
.
Список литературы
1. и др. Проектирование цифровых устройств на однокристальных микроконтроллерах/ , , . М.: Энергоатомиздат, 1990.
2. и др. Средства автоматизации программирования микропроцессорных устройств/ , , . М.: Энергоатомиздат, 1988.
3. Программирование микропроцессорных устройств: Сборник лабораторных работ/ . Ульяновск: УлГТУ, 1994.
4. Андреев отладочных программных средств в курсе «Проектирование микропроцессорных устройств»// Сборник тезисов науч.-метод. конф. «Компьютерные технологии в высшем образовании». Ульяновск: УлГТУ, 1999.
5. Однокристальные микроЭВМ. М.: МИКАП, 1994.
ОГЛАВЛЕНИЕ
ПРЕДИСЛОВИЕ. . . . . . . . . . . . 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
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |


