Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка АК Ч1.doc
Скачиваний:
40
Добавлен:
13.11.2019
Размер:
977.41 Кб
Скачать
    1. Изучение команд передачи управления и программирование алгоритмов с ветвлением для микроконтроллеров mcs-51

Цель работы: изучить команды передачи управления однокристальных микроконтроллеров MCS-51 и освоить составление программ с ветвлением.

Теоретические положення

Структура и способы организации индикаторов.

Часто в МПС требуется индикация типа ДА/НЕТ, ВКЛ/ВЫКЛ. Такая информация отображается с помощью отдельных светодиодов. На рис. 4.1 показаны схемы включения све­тодиодов, где в качестве ключей используется логический инвертор.

Рисунок 4.1 Включение светодиодных индикаторов с применением ИМС инвертора: а - с открытым коллектором ; б - типовая схема

В полупроводниковых светодиодах используется свойство р-n перехода излучать свет в видимой части спектра при протекании через него прямого тока IПР = 5 – 20 мА, UПР = 2 – 3 В). Балластный резистор включается последовательно со светодиодом и ограничивает величину его прямого тока 1ПР.

Для отображения цифровой информации наибольшее распространение получили 7-ми сегментные индикаторы, в которых изображение цифры составляют из семи линейных светодиодных сегментов (а, b, с, d, e, f, g) расположенных в виде цифры 8. С помощью этих индикаторов отображаются десятичные и шестнадцатеричные цифры, некоторые буквы русского и латинского алфавитов, а так же некоторые специальные знаки. Светодиодные сегменты располагают на корпусе ИМС цифрового индикатора с добавлением сегмента h десятичной точки (DP) и вывода EN - блокировки (BL) работы индикатора.

Структура 7-ми сегментного индикатора и способы его подключения к порту МК51 Р1 показаны на рис. 4.2.

Низкая нагрузочная способность линий порта МК51 (1ВЫХ = 1 мА) позволяет подключить только один вход ТТЛ ИМС и не допускает прямого включения индикатора. В качестве промежуточных усилителей тока используются логические элементы (обычно инверторы) или ИМС преобразователей кодов (дешифраторов DC) для управления 7-ми сегментным индикатором.

Рисунок 4.2 7 - ми сегментный индикатор: а — внешний вид; б — схемы с общим катодом и анодом, в, г – способы подключения к порту P1 MK51

Подходы к построению системы индикации в МПС

На основе светодиодов и 7 - ми сегментных индикаторов строятся модули отображения информации МПС. При построении модулей отображения информации различают два подхода — динамическая и статическая схема построения индикации.

Статическая индикация заключается в постоянной подсветке индикаторов HL1 - HLn от одного источника информации рис. 4.3. В такой системе каждый индикатор HL1 - HLn подключен через собственный дешифратор DC1 - DCn и регистр-защелку Rl - Rn к шине данных ШД. Выборка регистров Rl - Rn производится при помощи селектора на основе дешифратора адреса DA. Аппаратные затраты при такой организации составляют n пар: регистр + дешифратор при n десятичных разрядов индикатора.

Сущность динамической индикации заключается в поочередном циклическом подключении каждого индикатора HL1 - HLn к источнику информации через общую шину данных, рис 4.4. Выборка индикатора осуществляется дешифратором адреса DA. В регистре данных RD хранится цифровой код, предназначенный для отображения. В регистре RA хранится адрес индикатора.

При таком включении индикаторов HL1 - HLn значительно уменьшаются аппаратные затраты на реализацию модуля индикации. Преимущества динамического способа построения модуля особенно заметны при количестве разрядов индикации больше пяти. Для достижения достаточной яркости необходимо обеспечить определённое время свечения одного индикатора и такую частоту их перебора, чтобы не было заметно мерцание. Если информацию обновлять с частотой примерно 20 раз в секунду, то данные на индикаторе представляются неизменными.

Рисунок 4.3 Структурная схема статической индикации

Здесь обозначены:

DA – дешифратор адреса, который необходим для выборки соответствующего регистра;

Rl - R4 – регистры, в которых временно хранится значение кода числа для отображения (соответствующий регистр выбирается дешифратором DA);

DC1 - DC4 – дешифраторы, преобразующие двоичный код в 7-ми сегментный код;

HL1 - HL4 – 7-ми сегментные индикаторы;

ШД – шина данных, по линиям которой осуществляется передача данных на индикацию.

Знакосинтезирующая светодиодная индикация (ЗСИ) используется для отображения алфавитно-цифровой информации. ЗСИ выполняются в виде ИМС, представляющей собой матрицу светодиодов размерностью m x n , где m - число строк, n - число колонок матрицы (рис. 4.5). Чаще всего ЗСИ имеют размерность 7x5 или 9x7.

Рисунок 4.4 Структурная схема динамической индикации

Здесь обозначены:

RD – регистр данных для временного хранения отображаемого числа или символа;

RA – регистр адреса для временного хранения двоичного кода адреса выбираемого индикатора;

DA – дешифратор для преобразования адреса, задаваемого двоичным кодом, в строб выбора индикатора;

HL1 - HL4 – 7-ми сегментные индикаторы.

Рисунок 4.5 - Знакосинтезирующий индикатор: a - внешний вид; б – схема

Для включения одного светодиода матрицы необходимо обеспечить прямой ток 10-15 мА при прямом падении напряжения в 2 - 2,5 В. Подключение ЗСИ к МК51 осуществляется посредством управляемых схем формирования тока колонок и строк (рис. 4.6).

Рисунок 4.6 - Схема подключения ЗСИ к МК (а) и цепь протекания через светодиод (б)

Для отображения многосимвольной информации применяются линейные (однострочные) дисплеи. Такие дисплеи представляют собой «линейку», составленную из отдельных светодиодов, 7-ми сегментных индикаторов или ЗСИ. Число знакомест дисплея зависит от требований МПС.

В стенде (рис. 4.7) статическая индикация реализована на четырех статических 7-ми сегментных индикаторах HG1 (разряды HG1.0, HG1.1, HG1.2 HG1.3). Обращение к ним производится, как к ячейкам памяти с адресами A000h (левая пара знакомест - 0, 1), B000h (правая пара знакомест - 2, 3).

Динамическая индикация реализована на плате расширения с помощью четырехразрядного 7-ми сегментного индикатора HL2. Управление динамической индикацией осуществляется посредством порта В микросхемы системного контроллера (см. схему электрическую принципиальную стенда, приложение 1), сигналы выборки соответствующего индикатора поступают от линии порта РС0, РС1 к дешифратору адреса разряда DD3.

ЗСИ HG1 расположен на плате расширения стенда и является матрицей светодиодов 5x7. Управление светодиодной матрицей осуществляется по линиям РА0 – РА4 и РС0 РС6. Например для того чтоб засветить точку с координатами [1;1] необходимо выставить уровень логической единицы на линии РА0, в уровень логического нуля на линии РС0.

Также в стенде есть линейка светодиодов HL1 - HL8, доступ к которым осуществляется как к ячейке внешнего ОЗУ по адресу 0A006h. Светодиоды включаются записью логических единиц в соответствующие разряды.

Вывод данных на индикаторы. Вывод данных, представленных двоичным кодом, наиболее прост при его отображении единичными светодиодными индикаторами или линейкой светодиодов. Достаточно только записать этот код в регистр индикатора LED_REG по адресу 0A006h (рис. 4.7). Но для 7-ми сегментного индикатора и светодиодной матрицы требуется преобразование двоичного кода в код символа, которое реализуется либо с помощью дешифратора, либо программным способом.

Статический 4-х разрядный индикатор с помощью дешифраторов DC преобразует двоичный код в код шестнадцатеричных символов для 7-ми сегментных индикаторов (рис. 4.7). Для индикации данных на статическом индикаторе HG1 требуется записать их в соответствующие регистры-дешифраторы RG - DC: DISPLAY[0] – адрес 0A000h (0, 1 знакоместо) или DISPLAY[1] – адрес 0B000h (рис. 4.7).

Режим работы статического индикатора задаётся путём установки битов регистра управления DC_REG по адресу 0A004h. Формат этого регистра дан в карте портов ввода/вывода данных стенда табл. 4.1, где DPi - бит управления десятичной точкой разряда; BLi - бит управления гашением разряда; i = 0, 1, 2, 3 - номер разряда (знакоместо). Установка в 0 битов регистра управления DC_REG блокирует индикацию десятичных точек (DP0 - DP3) и разрешает работу индикаторов (BL0 - BL3).

При динамической индикации байт кода символа записывается в регистр порта В PB_REG по адресу 08001h. Выходы этого регистра (РВ0 – РВ6 — код символа, РВ7 — бит гашения) подключены на входы всех четырёх 7-ми сегментных индикаторов. Для выбора разряда в регистр порта С PC_REG по адресу 08002h записывается 2-х битовый код его номера РС0, PC 1. Дешифратор DC по линиям 1, 2, 3, 4 выбирает соответствующий разряд динамического индикатора.

Для отображения символа на ЗСИ используется принцип динамической индикации по колонкам. Байт индикации является кодом засветки светодиодов соответствующей колонки. Графический образ символа набирается из последовательности пяти байтов индикации путём перебора колонок.

Байт индикации записывается в регистр порта С PC_REG по адресу 08002h: РС0 – бит 1-й строки, ... , РС6 – бит 7-й строки, РС7 = 0 (этот бит не влияет на работу ЗСИ). Запись 0 в соответствующий бит соответствует засветке данного светодиода ЗСИ.

Таблица 4.1 - Карта портов ввода/вывода данных стенда

Адрес

Тип цикла

B7

B6

B5

B4

B3

B2

B1

B0

Имя

Порты периферийных устройств

8xx0

Запись

[Порт A]

PA_REG

8xx1

Запись

[Порт B]

PB_REG

8xx2

Запись

[Порт C]

PC_REG

8xx3

Запись

x

x

x

x

x

TRISC

x

x

TRIS

ЖКИ

8xx4

Запись

Регистр команд ЖК индикатора

LCD_CMD

8xx5

Запись

Регистр данных ЖК индикатора

LCD_DATA

Последовательный порт

9xxx

Чтение

CTS

DSR

DCD

RI

KL3

KL2

KL1

KL0

US_REG

Cxx0

Запись

x

x

X

x

DTR

RTS

CFG1

CFG0

UC_REG

Индикатор и светодиоды

Axx0

Запись

[Регистр индикатора 0]

DISPLAY[0]

Axx1

Запись

[Регистр индикатора 1]

DISPLAY[1]

Axx2

Запись

<зарезервировано>

DISPLAY[2]

Axx3

Запись

<зарезервировано>

DISPLAY[3]

Axx4

Запись

DP3

DP2

DP1

DP0

BL3

BL2

BL1

BL0

DC_REG

Axx5

Запись

<зарезервировано>

EDC_REG

Axx6

Запись

LED7

LED6

LED5

LED4

LED3

LED2

LED1

LED0

LED_REG

Управление работой

Axx7

Запись

x

x

X

x

x

x

x

RUN

SYS_CTL

Совместимые регистры

Bxx0

Запись

[Регистр индикатора 1]

DISPLAYB

Выбор колонки ЗСИ организуется путём записи 1 в один из 5-ти битов РА0 – РА4 порта A PA_REG по адресу 08000h: «00001» - 1-я колонка; ... ; «10000» - 5-я колонка («бегущая» 1). Биты РА5 - РА7 = 0 и не влияют на работу ЗСИ.

Следовательно, вывод символа на динамическую индикацию или на ЗСИ целесообразно представить в виде двух отдельных процедур (подпрограмм): перекодировки и отображения. Перекодировка — представление двоичного кода символа в виде 7-ми сегментного кода (динамический индикатор) или последовательности пяти кодов индикации колонок (ЗСИ). Процедуру перекодировки рекомендуется выполнять таблично. Процедура отображения символа определяется алгоритмом выбора индикатора (колонки).

Рисунок 4.7 Функциональная схема к лабораторной работе №4

Основу всех программ данной лабораторной работы (и многих следующих) составляет подпрограмма временной задержки TIME. Подпрограмма требует 1, 2 или 3 РОН, например, Rl, R2, R3.

Суть подпрограммы TIME выполнение команд «цикл в цикле». Цикл организуется с помощью команды DJNZ Rn, Met, которая предписывает декремент (–1) содержимого регистра Rn и переход на метку Met, если не ноль. Рассмотрим подпрограмму TIME для организации длительных временных задержек.

TIME:

; подпрограмма задержки

mov Rl,#const

; загрузка POH R1константой const

С3:

mov R2,#0FFh

; загрузка POH R2 константой FFh (25510)

С2:

mov R3,#0FFh

; загрузка POH R3 константой FFh (25510)

С1:

djnz R3,C1

; первый цикл (метка С1)

djnz R2,C2

; второй цикл (метка С2)

djnz Rl,C3

; третий цикл (метка СЗ)

ret

; выход из подпрограммы

Рассчитаем время задержки подпрограммы TIME. В приложении «Система команд» выберем для каждой из команд подпрограммы число машинных циклов (столбец «МЦ»): Call — 2; Mov — 1; djnz — 2; ret — 2. Определим число машинных циклов, затрачиваемых МК51 на выполнение подпрограммы TIME:

TTIME = 2CALL + 1MOV + const * [1MOV + 255*(1MOV + 255*2DJNZ + 2DJNZ) + 2DJNZ] + 2RET = 5 + const * [3 + 255 * 513] = 5 + const * 130818 (машинных циклов).

Зная длительность одного машинного цикла (1,628 10–6 сек.), получим время выполнения подпрограммы (время задержки):

Тзадержки = ТТIМЕ * Тмц = (5 + const * 130818) * 1,628 10–6 сек.

Например, при const = 5 получим Тзадержки = 1,065 сек.

Очевидно, что три цикла дают нам время задержки в единицы – десятки секунд. При меньшей задержке требуется и меньшее число циклов (два или даже один). Пользуясь вышеизложенной методикой, можно легко организовать задержку в соответствии с требованиями индивидуального задания.

Рассмотрим пример программы для статической индикации, использующую подпрограмму задержки TIME.

Пример 4.1. С частотой 1 Гц отобразить число 0404h на статическом индикаторе.

$INCLUDE(C:\MK5 l\Compiler\ASM5l\MOD\MOD51)

ORG 0

Continue:

mov A,#0 ; отменить гашение знакомест

mov DPTR,#0A004h ; и десятичные точки

movx @DPTR,A ; статического индикатора

mov A,#04h ; записать в Аккумулятор число 04h

mov DPTR,#0A000h ; индикация числа 04h на 3 и 4

movx @DPTR,A ; знакоместе статического индикатора

mov DPTR,#0B000h ; индикация числа 04h

movx @DPTR,A ; на 1 и 2 знакоместе

; статического индикатора

CALL TIME ; вызов подпрограммы задержки

mov A,#00001111b ; гашение всех знакомест mov DPTR,#0A004h ; статического movx @DPTR,A ; индикатора

CALL TIME ; вызов подпрограммы задержки

jmp Continue ; переход на начало программы

TIME: ; подпрограмма задержки

mov Rl,#05h

С3: mov R2,#0FFh

С2: mov R3,#0FFh

С1: djnz R3,C1

djnz R2,C2

djnz R1,C3

ret ; выход из подпрограммы

END

Следующей по частоте применения в программах лабораторных работ является подпрограмма CODER — перекодировка на основе табличного метода.

Работа подпрограммы CODER основана на командах MOVC (см. приложение «Система команд»), которые предполагают 3-х шаговую последовательность для доступа к таблице в памяти программ МК51.

Команда MOVC A, @A+DPTR предполагает выполнение следующей последовательности действий (команд):

  1. загрузка регистра - указателя адреса DPTR;

  2. загрузка аккумулятора А индексом (координатой входа в таблицу);

  3. выполнить команду MOVC A, @A+DPTR и записать в аккумулятор А данные из ячейки памяти программ МК51 с адресом (A+DPTR).

Версия с программным счётчиком PC команды MOVC A,@A+PC не требует регистра DPTR и обычно используется для «локальных» таблиц и так же предполагает выполнение 3-х шаговой последовательности:

  1. загрузка аккумулятора А индексом;

  2. добавление смещения к содержимому аккумулятора А, чтобы выйти на требуемый адрес таблицы;

  3. выполнить команду MOVC А, @А+РС и записать в аккумулятор А данные из ячейки памяти программ МК51 с адресом (А+РС+1).

Рассмотрим подпрограмму CODER на основе команды MOVC A, @А+РС.

CODER: ; подпрограмма перекодировки 2-го кода в 7-ми сегментный код

inc А ; смещение на 1 для «перехода» через ret

move A, @A+PC ; загрузка в А кода символа ret ; выход из подпрограммы

; таблица 7-ми сегментных кодов шестнадцатеричных символов

; биты Tgfedcba Т - дес. точка, gfedeba - сегменты индикатора

DB 0011111lb ; «0»

DB 00000110b ; «1»

DB 01011011b ; «2»

DB 01001111b ; «3»

DB 01100110b ; «4»

DB 01101101b ; «5»

DB 01111101b ; «6»

DB 00000111b ; «7»

DB 01111111b ; «8»

DB 0ll0l1l1b ; «9»

DB 01110111b ; «A»

DB 01111100b ; «B»

DB 00111001b ; «C»

DB 01011110b ; «D»

DB 01111001b ; «E»

DB 01110001b ; «F»

Перед вызовом подпрограммы (перед командой CALL CODER) необходимо в аккумулятор А записать код отображаемого символа: 00h – «0», 01h – «1», ... , 0Fh – «F».

Рассмотрим пример программы для динамической индикации, использующую подпрограмму перекодировки CODER.

Пример 4.2 – На динамическом индикаторе отобразить число 3.3.3.3.

$INCLUDE(C:\MK51\Compiler\ASM51\MOD\MOD51)

ORG 0

START:

MOV R0, #0 ; Установить начальное состояние

; регистра номера знакоместа (D1)

MOV A, #03h ; Занести в А код цифры 3

SETB ACC.7 ; Индицировать десятичные точки

mov DPTR,#08001h ; Занести в регистр индикатора movx @DPTR,A ; код символа

МЕТ1:

mov A,R0 ; Динамическая индикация символа

DPTR,#08002h ; R0.0 = PC0, R0.1 = PC1 - код знакоместа

movx @DPTR, A ; 00 - Dl, 01 - D2, 10 - D3, 11 - D4

; (слева направо)

inc R0 ; Перейти на индикацию следующего

CJNE R0,#04h,MET1 ; знакоместа, если R0 Ф 4

jmp START ;Переход на начало программы START

CODER: ; подпрограмма перекодировки 2-го кода в 7-ми сегментный код

inc А ; смещение на 1 для «перехода» через ret

move A, @A+PC ; загрузка в А кода символа ret ; выход из подпрограммы

; таблица 7-ми сегментных кодов шестнадцатеричных символов

; биты Tgfedcba Т - дес. точка, gfedeba - сегменты индикатора

DB 0011111lb ; «0»

DB 00000110b ; «1»

DB 01011011b ; «2»

DB 01001111b ; «3»

DB 01100110b ; «4»

DB 01101101b ; «5»

DB 01111101b ; «6»

DB 00000111b ; «7»

DB 01111111b ; «8»

DB 0ll0l1l1b ; «9»

DB 01110111b ; «A»

DB 01111100b ; «B»

DB 00111001b ; «C»

DB 01011110b ; «D»

DB 01111001b ; «E»

DB 01110001b ; «F»

END