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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: