Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПМПУ / andr.doc
Скачиваний:
40
Добавлен:
20.04.2015
Размер:
710.14 Кб
Скачать

3.4. Примеры микроконтроллерных программ

широкого применения

Сроки проектирования прикладного программного обеспечения микроконтроллеров 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.