Широкого применения
Сроки проектирования прикладного программного обеспечения микроконтроллеров MCS-51 существенно сокращаются при использовании готовых МК-программ, реализующих типовые процедуры обработки данных (преобразование системы счисления, работа с таблицами констант, формирование заданной задержки и др.). Рассмотрим ряд МК-программ широкого применения, написанных на языке АСМ51.
Преобразование системы счисления. Подпрограмма BINBCD выполняет преобразование целого двоичного 8-разрядного числа без знака, содержащегося в аккумуляторе A (значение в интервале 0-255), в трехзначное двоично-десятичное число, занимающее два байта и размещаемое в регистрах R1 (сотни), R2 (десятки и единицы).
BINBCD MOV B,#100
DIV AB;разделить на 100 для определения
;числа сотен
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