Микропроцессоры и микроконтроллеры

 
 
 
«Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.»
Brian W. Kernighan.
Русский | Українська


Микропроцессоры и микроконтроллеры :: Каналы ввода-вывода на основе МК51 :: Разработка схемы ССД и программного обеспечения

Разработка схемы ССД и программного обеспечения

В приведенном примере для удобства подключения к МК будем использовать восьмиразрядный АЦП К572ПВ3. Эта БИС также является функционально законченным АЦП, которая непосредственно сопрягается с МП.

Условное схематическое обозначение данного АЦП можно получить из схемы рис.20.1,а, а временные диаграммы его работы - из рис.20.1,б. Уровень "1" на входе #RD обеспечивает "сброс" АЦП, а подача "0" на вход #СS инициирует начало преобразования. Преобразование заканчивается выдачей сигнала BU=1, считывание выходного кода возможно при комбинации #СS=0 и #RD=0. Время преобразования составляет 7,5 мкс. Анализ сигнала готовности следует выполнять по логике, обратной к описанной в предыдущем примере (см. ранее).

Подобная схема управления АЦП позволяет реализовать двойное его использование:

– размещение в системном АП, доступ командами обращения к памяти, которые реализуются с циклами ожидания (в режиме доступа к ОЗУ или ПЗУ). Для МК51 такая схема непригодна, так как команды MOVX с доступом к внешней памяти реализуются без тактов ожидания;

– непосредственное подключение к портам МК, доступ с помощью команд ввода-вывода, работающих с портами.

Подключение БИС АЦП к МК в основном подобно описанному ранее. Следует выделить дополнительные линии портов МК для выдачи сигналов управления на АМХ и сигнала #CS. Благодаря тому, что время преобразования в АЦП мало, использование обмена по прерыванию неэффективно; поэтому разработаем протокол программно-управляемого обмена с ожиданием готовности данных. Таким образом, принимаем такое распределение линий портов:

порт Р0 - прием в МК байта данных с АЦП (результат преобразования);

Р1.0...Р1.2 - выдача с МК кода адреса канала АМХ (0...7);

Р1.3 - выдача сигнала разрешения работы Е для АМХ;

Р1.4 - выдача сигнала RD для сброса/считывания АЦП;

Р1.5 - выдача сигнала CS – разрешения преобразования для АЦП;

Р1.6 - прием в МК сигнала BU занятости АЦП.

Разработка программы обслуживания ССД состоит в точном соблюдении последовательности выдачи и анализа сигналов управления, которая определяется временной диаграммой рис.20.1-б.

Программа может быть представлена в таком виде:

; Декларативная часть

CS bit P1.5

RD bit P1.4

BU bit P1.6

E_AMX bit P1.3

start_P1 equ 01101000B ; Код для стартовой настройки порта Р1

; Инициализация системы

MOV P0, #0FFH ; Порт Р0 - на ввод информации

MOV P1, #start_P1 ; Стартовая выдача сигналов через порт Р1

...

Процедура обслуживания преобразования по одному каналу ожидает в аккумуляторе (А) адрес канала (0...7) и возвращает через аккумулятор результат преобразования по этому каналу.

ADT_chnl: ORL A, #start_P1 ; Объединение слова настройки порта Р1

MOV P1, A ; с номером канала и выдача через порт

NOP

CLR E_AMX ; Включение AMX

SETB RD ; "Сброс" АЦП

NOP ; Интервал - 2 мкс

NOP

CLR CS ; Запуск АЦП

CLR RD ; Разрешение считывания выходного кода АЦП

WAIT: JNB BU, WAIT ; Ожидание готовности данных

MOV A, P0 ; Прием результата преобразования в МК

ORL P1, #01110000B ; Перевод АЦП в начальное состояние (сброс)

SETB E_AMX ; Отключение АМХ

RET

При разработке программы используем процедуру ADT_chnl.

Пусть каналы следует опрашивать поочередно от нулевого к седьмому или от седьмого к нулевому. Данные, которые будут приниматься в МК, будем размещать в виде одномерного массива в РПД, начиная с адреса, например, 40H.

Дополнительно используем регистры:

R0 - для косвенной адресации массива данных в РПД;

R3 - как счетчик каналов в режиме обратного счета (8®0).

Приведем два варианта программной реализации опроса ССД:

; Декларативная часть (дополнение к предыдущему программному фрагменту)

tabl_start DATA 40H ; описание таблицы в РПД

tabl_size EQU 8

tabl_end DATA tabl_start + tabl_size

; Инициализация

; 1) заполнение с начала (0®7) 2) заполнение из конца (7®0)

MOV R0, #tabl_start MOV R0, #tabl_end

MOV R3, #tabl_size MOV R3, #tabl_size

; Реализация опроса восьми каналов

R_Tabl: MOV A, #8 R_Tabl: MOV A, R3

CLR C DEC A ;номер канала

SUBB A, R3 ; номер канала CALL ADT_chnl

CALL ADT_chnl MOV @R0, A

MOV @R0, A DEC R0

INC R0 DJNZ R3, R_Tabl

DJNZ R3, R_Tabl RET

RET

Самостоятельно студенты должны разработать аналогичную схему многоканальной системы сбора данных на основе АЦП К1113ПВ1 (10-разрядный АЦП), сравнить параметры и удобство программирования.