Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дмитриев Универсалный лабораторный стенд. Аппаратные средства проектирования встраиваемых систем 2009

.pdf
Скачиваний:
62
Добавлен:
17.08.2013
Размер:
10.11 Mб
Скачать

MKRD составляет 5 тактов. Поэтому использовать этот строб для непосредственного формирования сигнала RE недопустимо. Для выполнения чтения необходимо в стробе MKRD «вырезать» только один период сигнала синхронизации. Эту функцию как раз и выполняет схема на счетчике. Во-вторых, необходимо учитывать особенности формирования состояния выходной шины FIFO. Для уяснения принципа работы выходной шины FIFO рассмотрим временную диаграмму, изображенную на рис. 3.11.

Рис. 3.11. Временная диаграмма работы FIFO при чтении данных

Из диаграммы видно, что при записи очередных данных, они появляются на выходной шине FIFO (RG.D7) через один такт. Также и при чтении – через один такт на выходной шине выставляются данные, которые будут считаны при следующем обращении. Напомним, что длительность строба чтения MKRD составляет 5 тактов, а результат чтения данных в МК фиксируется по изменению 0/1 этого строба. Ясно, что возможна ситуация, когда в момент изменения 0/1 MKRD на выходе FIFO будут уже следующие данные. Чтобы избежать такой ситуации, в схему введен буферный регистр, в котором фиксируются данные, читаемые из FIFO в момент действия сигнала RE. На диаграмме воспроизведена ситуация, когда в FIFO записаны два значения 34h и 29h. Из диаграммы видно, что после первой записи флаг EMPTY сбрасывается в «0», а после последнего чтения устанавливается в «1».

На рис. 3.12 приведена временная диаграмма, на которой показано формирование флага FULL при заполнении буфера. Из диаграммы видно, что после сброса буфера в исходное состояние осуществляется последовательная запись 16-значений (16 тактовых

71

сигналов при установленном сигнале WE). В момент записи последнего значения устанавливается флаг FULL, что свидетельствует о заполненности буфера.

Отметим, что FIFO можно использовать и для организации обмена по прерываниям, когда источником прерывания от внешнего устройства является флаг FULL. Это эффективный механизм обмена, если требуется передача блока данных, длина которого равна емкости FIFO.

Рис. 3.12. Формирование флага FULL буфера FIFO

3.5. ПРОГРАММНОЕ УПРАВЛЕНИЕ РАБОТОЙ АЦП

Рассмотрим тексты программ, иллюстрирующие возможности программного управления работой АЦП в циклическом режиме. В этих программах код адреса канала измерения в регистре ADCON установлен по умолчанию (000), что соответствует линии Р5.0 порта Р5. В качестве результата преобразования берутся только 8 старших разрядов преобразования из регистра ADCH.

Пример программы циклического запуска АЦП с использованием прерывания:

 

ORG

8000h

P4

EQU

0C0h

IEN0

EQU

0A8h

ADCON

EQU

0C5h

ADCH

EQU

0C6h

 

MOV

IEN0,#0C0h ;разрешение прерывания от АЦП

M1:

MOV

A,ADCON

 

 

72

 

ANLA,#18h

;проверка флагов ADCI и ADCS

 

JNZ

M1

 

 

MOV

R0,#01h

;индикатор состояния АЦП

 

MOV

ADCON,#08h

;запуск АЦП

M5:

CJNE

R0,#02H,M5

;ожидание окончания АЦП

;

LJMP

M1

 

ORG

8053h

;обработчик прерывания от АЦП

 

 

MOV

A,ADCh

;чтение результата преобразования

 

SWAP A

 

 

MOV

P4,A

;вывод на индикацию

 

MOV

ADCON,#00h

;сброс флагов

 

MOV

R0,#02h

; установка индикатора состояния АЦП

 

RETI

 

 

 

END

 

 

Пример программы циклического запуска АЦП с опросом флага готовности:

 

ORG

8000H

 

P4

EQU

0C0H

 

ADCON

EQU

0C5H

 

ADCH

EQU

0C6H

 

M1:

MOV

A,ADCON

 

 

ANL A,#18H

;проверка флагов ADCI и ADCS

 

JNZ

M1

 

 

MOV

ADCON,#08H

;запуск АЦП

MM5:

MOV

A,ADCON

 

 

ANL

A,#10H

 

 

JZ

MM5

;ожидание окончания АЦП

 

MOV

A,ADCH

;чтение результата преобразования

 

SWAP

A

 

 

MOV

P4,A

;вывод на индикацию

 

MOV

ADCON,#00H

;сброс флагов

 

LJMP

M1

 

 

END

 

 

3.6.ПРОГРАММИРОВАНИЕ КОНТРОЛЛЕРА КЛАВИАТУРЫ И ИНДИКАЦИИ

Использование клавиатуры и дисплея на семисегментных индикаторах при работе с УЛС обеспечивается путем программной настройки контроллера клавиатуры и индикации 82С79, которую не-

73

обходимо выполнять с учетом рекомендаций п. 1.10 настоящего пособия. Ниже приведен пример программирования контроллера 82С79 при вводе и отображении символьных данных:

 

ORG

8000H

 

IEN0 EQU

0A8H

 

 

MOV

IEN0, #84Hh

;разрешение прерывания INT1

 

MOV

DPTR,#7FFFh

 

 

MOV

A,#01h

 

 

MOVX

@DPTR,A

;ввод символа слева,

 

LJMP M2

;декодированный режим

 

 

 

ORG

8013h

;обработчик прерывания INT1

 

MOV

DPTR,#7FFFh

 

 

MOV

A,#40h

 

 

MOVX

@DPTR,A

;разрешение чтения FIFO

 

MOV

DPTR,#7FFEh

;клавиатуры

 

 

 

MOVX

A,@DPTR

;чтение скан-кода

 

CJNE

A, #11011001B, K1

;проверка скан-кода

 

MOV

DPTR,#7FFEh

;клавиши «0»

 

 

 

MOV

A,#11110011b

 

 

MOVX

@DPTR,A

;вывод в видеопамять кода

 

LJMP

EXIT

;символа «0»

 

 

K1:

CJNE

A, #11000000B, K2

;проверка скан-кода

 

MOV

DPTR,#7FFEh

;клавиши «1»

 

 

 

MOV

A,#01100000b

 

 

MOVX

@DPTR,A

;вывод в видеопамять кода

 

LJMP

EXIT

;символа «1»

 

 

K2:

CJNE

A, #11000001B, K3

;проверка скан-кода

 

MOV

DPTR,#7FFEh

;клавиши «2»

 

 

 

MOV

A,#10110101b

 

 

MOVX

@DPTR,A

;вывод в видеопамять кода

 

LJMP

EXIT

;символа «2»

 

 

K3:

CJNE

A, #11000010B, K4

;проверка скан-кода

 

 

 

;клавиши «3»

 

 

 

74

MOV

DPTR,#7FFEh

 

MOV

A,#11110100b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «3»

 

K4: CJNE

A, #11001000B, K5

; проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «4»

 

MOV

A,#01100110b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «4»

 

K5 CJNE

A, #11001001B, K6

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «5»

 

MOV

A,#11010110b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «5»

 

K6: CJNE

A, #11001010B, K7

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «6»

 

MOV

A,#11010111b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «6»

 

K7: CJNE

A, #11010000B, K8

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «7»

 

MOV

A,#01110000b

;вывод в видеопамять кода

MOVX @DPTR,A

LJMP

EXIT

;символа «7»

 

K8: CJNE

A, #11010001B, K9

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «8»

 

MOV

A,#11110111b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «8»

 

K9: CJNE

A, #11010010B, K10

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «9»

 

MOV

A,#11110110b

 

MOVX @DPTR,A

;вывод в видеопамять кода

 

 

;символа «9»

 

 

75

LJMP

EXIT

 

K10: СJNE

A, #11000011B, K11

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «A»

 

MOV

A,#01110111b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «A»

 

K11: CJNE

A, #11001011B, K12

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «B»

 

MOV

A,#11000111b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «B»

 

K12: CJNE

A, #11010011B, K13

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «C»

 

MOV

A,#10010011b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «C»

 

K13: CJNE

A, #11011011B, K14

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «D»

 

MOV

A,#11100101b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «D»

;проверка скан-кода

K14: CJNE

A, #11011000B, K15

MOV

DPTR,#7FFEh

;клавиши «*»

 

MOV

A,#10010111b

 

MOVX @DPTR,A

;вывод в видеопамять кода

LJMP

EXIT

;символа «E»

 

K15: CJNE

A, #11011010B, EXIT

;проверка скан-кода

MOV

DPTR,#7FFEh

;клавиши «#»

 

MOV

A,#00010111b

 

MOVX @DPTR,A

;вывод в видеопамять кода

EXIT:

 

;символа «F»

 

 

RETI

 

;выход из обработчика

 

 

;прерывания INT1

 

 

76

M2:

MOV

DPTR,#7FFFh

 

MOV

A,#90h

 

МOVX @DPTR,A

;разрешение записи в видеопамять

LJMP

$

;с автоинкрементированием адреса

 

END

 

 

Представленная программа по скан-коду нажатой клавиши определяет код соответствующего этой клавише шестнадцатеричного символа после чего загружает его в видеопамять дисплея.

3.7.ПРОГРАММИРОВАНИЕ ВЫВОДА СИМВОЛЬНОЙ ИНФОРМАЦИИ НА ЖКИ

Рассмотрим пример построения системы диагностики цифрового узла в составе ПЛИС с выводом его состояния на ЖКИ. В качестве узла выбран 4-разрядный двоичный счетчик. Логика работы схемы подключения счетчика к МК, представленной на рис. 3.13 состоит в следующем. Генератор ГОИ1 работает в непрерывном режиме и подключен к С входу вспомогательного счетчика, который при нажатии кнопки ГОИ2 формирует сигнал внешнего прерывания МК INT0. Этот сигнал является импульсным, длительность которого равна 16 периодам внешнего тактового генератора. Одновременно этот сигнал подается на С вход тестируемого счетчика для увеличения его состояния на 1. Задача системы состоит в том, чтобы по сигналу прерывания выводить в первое знакоместо первой строки текущее значение счетчика в шестнадцатеричном формате. Для формирования кода шестнадцатеричного символа в схему включен аппаратный знакогенератор, выполненный на ПЗУ. Файл прошивки этого ПЗУ представлен на рис. 3.14. Значение кода символа для кодирования текущего состояния счетчика считывается в МК по адресу 7FFB. Для контроля работы системы в схеме используются шкалы светодиодных индикаторов. На шкалу Е выводится состояние счетчика в двоичном коде. На шкалы А и В, а также С и D выводится принятый в МК код шестнадцатеричного символа. На первую пару шкал данные выводятся через порт Р4. На шкалы C и D данные выводятся из МК путем выполнения команды записи по адресу 7FFA.

77

Рис. 3.13. Схема тестового примера диагностирования цифрового узла с выводом его текущего состояния на ЖКИ

Рис. 3.14. Файл прошивки ПЗУ знакогенератора шестнадцатеричного кода

78

Ниже приводится текст программы выполняемой МК в данной системе.

ORG8000h

LJMPM1

;******************************************************************************************

ORG 8003h

;обработчик прерывания INT0

MOV DPTR, #7FFAh

;прием кода символа в аккумулятор

MOVX A, @DPTR

 

MOV R4,A

;сохранение кода символа в R4

SWAP A

 

MOV 0C0h, A

;выдача кода символа в порт Р4

MOV DPTR, #7FFBh

;передача кода для индикации на шкалах ;C и D

MOVX @DPTR,A

 

LCALL VIVOD

;вызов подпрограммы вывода на ЖКИ

 

;символа в первое знакоместо первой

RETI

;строки, код символа в R4

 

;******************************************************************************************

M1: MOV A,#01h

;настройка прерываний

;INT0 – по фронту

 

MOV

TCON,A

MOV A,#81h

;разрешение прерывания от INT0

MOV

IE,A

LJMP $

 

;****************************************************************************************** ;подпрограмма вывода на ЖКИ символа в первое знакоместо первой строки

;код символа в R4

VIVOD:

 

MOV A,#38H

;две строки размер символа 5*8 точек

LCALL DINIT

;вызов подпрограммы записи команды в

 

;управляющий регистр дисплея

MOV A,#0CH

;включение дисплея

LCALL DINIT

 

MOV A,#06H

;сдвиг курсора вправо после вывода

LCALL DINIT

;символа

 

MOV A,#02H

 

LCALL DINIT

 

MOV A,#01H

;очистка дисплея

LCALL DINIT

 

MOV A,R4

;код символа из R4 в аккумулятор

LCALL DISP

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

 

;символа в регистр данных дисплея

 

79

RET ;**************************************************************************************** ;подпрограмма записи команды в управляющий регистр дисплея

DINIT:

MOV R0,A

MOV DPTR,#7FF6H ;ожидание установки флага завершения ;записи в память дисплея

BF:

MOVX A,@DPTR ANL A,#80H JNZ BF

MOV DPTR,#7FF4H ;запись кода команды в управляющий ;регистр дисплея

MOV A,R0 MOVX @DPTR,A RET

;***************************************************************************************** ;подпрограмма записи кода символа в регистр данных дисплея

DISP: MOV R0,A

MOV DPTR,#7FF6H ;ожидание установки флага завершения ;записи в память дисплея

BF1:

MOVX A,@DPTR ANL A,#80H JNZ BF1

MOV DPTR,#7FF5H ;запись значения кода символа в регистр ;данных дисплея

MOV A,R0 MOVX @DPTR,A RET

;****************************************************************************************

END

3.8. ИЗМЕРЕНИЕ ВРЕМЕННЫХ ИНТЕРВАЛОВ И ПОДСЧЕТ ВНЕШНИХ СОБЫТИЙ ПРИ ПОМОЩИ ТАЙМЕРОВ Т0 И Т1

В состав МК входят два таймера Т0 и Т1, которые могут работать в качестве таймера или счетчика внешних событий. При работе в качестве таймера состояние Т0 и Т1 инкрементируется 1 раз за машинный цикл, то есть за 12 периодов внешнего тактового гене-

80

Соседние файлы в предмете Интегрированные системы управления и проектирования