;числа сотен

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