Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 03.03.2010 | Доступ: свободный | Студентов: 5335 / 1307 | Оценка: 4.35 / 3.96 | Длительность: 24:14:00
ISBN: 978-5-9963-0267-3
Специальности: Разработчик аппаратуры
Лекция 15:

Построение микропроцессорных систем на основе однокристальных микроконтроллеров. Тенденции развития однокристальных микроконтроллеров

< Лекция 14 || Лекция 15: 123 || Лекция 16 >

Полученная программа приведена ниже.

;Ввод информации по готовности
.ORG    0H
AJMP Start ; на начало программы
.ORG 0BH
AJMP Int_TC0 ; на обработчик прерывания Т/С0
Курс
206
.ORG 30H
Start:  MOV IE,#00000010b ; разрешение прерываний от Т/С0
MOV TCON,#0 ; сброс флагов, останов Т/С0
MOV P0,#00011111b
MOV P1,#01100000b
MOV P2,#00000000b
MOV TMOD,#00000010b ; Т/С0 в режим 2
MOV TL0,#6 ; настройка Т/С0 на 250 мкс
MOV TH0,#6
CLR A ; ?=0
MOV R0,#6 ; количество опросов датчика
MOV R1,#250
MOV R2,#16
SETB TR0 ; запуск T/C0
SETB EA ; разрешение всех прерываний
; Генерация сигнала на выходе P2.7
Cycle: SETB    P2.7  ; P2.7 = 1
MOV     R3,#100
Delay1: DJNZ   R3,DELAY1 ; задержка на t = 200 мкс
CLR     P2.7 ; P2.7 = 0
MOV R3,#3 ; Задержка на T–t = 600 мкс
Delay2: MOV  R4,#100     
DJNZ R4,$
DJNZ R3,Delay2
AJMP   Cycle ; возврат на цикл генерации сигнала
; Обработчик прерываний от таймера
Int_TC0: CLR TR0 ; останов таймера
DJNZ R1,Out_Int  ; подсчет количества входов в обработчик
MOV R1,#250
DJNZ   R2,Out_Int
MOV R2,#16
Opros: CLR P1.6 ; запуск АЦП
JB P1.5,$ ; ожидание готовности данных
ADD A,P0 ; ?= ? + D
i
SETB P1.6 ; гашение АЦП
MOV R5,#5
DJNZ   R5,$
DJNZ R0, Opros ; проверка окончания опроса
MOV B,#6 ; вычисление среднего значения
DIV AB ; D
ср = ?/ n
ANL P2,#11100000b  ; вывод результата
207
SETB P2.5 ; строб записи в ВУ
CLR P2.5
CLR A ; восстановление параметров цикла
MOV R0,#6
Out_Int: SETB TR0 ; запуск таймера
RETI ; выход из обработчика
.END

Программно управляемый ввод предполагает, что к моменту обращения микроконтроллера к внешнему устройству последнее готово к обмену. Эта ситуация требует учета особенностей работы конкретного устройства. В нашем случае анализ работы аналого-цифрового преобразователя показывает, что если между запуском АЦП и считыванием с него информации проходит не менее 30 мкс, то это гарантирует завершение преобразования аналог-код и достоверность данных на выходе преобразователя.

Анализ времени выполнения некоторого участка программы можно сделать на основе данных о времени выполнения отдельных команд, приведенных в табл. 14.3. При составлении программы для решения нашей задачи мы введем эту задержку явным образом, используя команды работы с циклами.

Пусть задача ставится так: разработать микропроцессорную систему, которая определяет максимальное значение шести последовательных показаний датчика и выводит полученное значение на внешнее устройство.

Обращение к датчику осуществляется 1 раз в секунду. В промежутках между работой с датчиком МПС на выходе P2.7 формирует периодическую последовательность импульсов длительностью t = 200 мкс и периодом T = 800 мкс.

В этом случае схема МПУ будет аналогична схеме, представленной на рис. 15.3, за исключением того, что в ней будет отсутствовать линия, соединяющая выход готовности данных АЦП с микроконтроллером.

Программа решения этой задачи имеет следующий вид:

; Программно управляемый ввод
.ORG    0H
AJMP Start ; на начало программы
.ORG 0BH
AJMP Int_TC0 ; на обработчик таймера Т/С0
.ORG 30H
Start:  MOV IE,#00000010b ;pазpешение пpеpываний от Т/С0
MOV TCON,#0 ;сбpос флагов, останов Т/С0
MOV P0,#00011111b
Курс
208
MOV P1,#01000000b
MOV P2,#00000000b
MOV TMOD,#00000010b
MOV TL0,#6
MOV TH0,#6
MOV R0,#6 ;количество опросов датчика
MOV R1,#250
MOV R2,#16
MOV  R6,#0 ;регистр для хранения максимума
SETB TR0 ;запуск T/C0
SETB EA ;разрешение всех прерываний
; Генерация сигнала на выходе P2.7
Cycle: SETB P2.7 ; P2.7 = 1
MOV R3,#100
Delay1: DJNZ   R3,DELAY1 ; задержка на t = 200 мкс
CLR P2.7 ; P2.7 = 0
MOV R3,#3 ; Задержка на T–t = 600 мкс
Delay2: MOV R4,#100     
DJNZ R4,$
DJNZ R3,Delay2
AJMP  Cycle ;возврат на цикл генерации сигнала
;Обработчик прерываний от таймера
Int_TC: CLR TR0 ;останов  таймера
DJNZ   R1,Out_Int ;подсчет количества входов в обработчик
MOV R1,#250
DJNZ   R2,Out_Int
MOV R2,#16
CLR P1.6 ;запуск АЦП
MOV R5,#15
M1: DJNZ R5,M1 ;задержка на преобразования сигнала
MOV A,R6 ;сравнение с текущим максимумом
CLR C
SUBB A,P0
JNB A.7,M2
MOV R6,P0 ;замена текущего максимума
M2: SETB P1.6 ;гашение  АЦП
MOV R5,#5 ;задержка на гашение АЦП
M3: DJNZ R5,M3
DJNZ R0,Out_Int ;проверка окончания опроса
MOV A,R6
ANL P2,#11100000b ;вывод результата
CLR P2.5 ;строб записи в ВУ
SETB P2.5
MOV R6,#0 ;восстановление параметров цикла
MOV R0,#6
Out_Int: SETB TR0 ;запуск  таймера
RETI ;выход из обработчика
.END

Анализ ввода по прерыванию проведем на следующем примере.

Микропроцессорная система определяет минимальное значение показаний 6 датчиков и выводит полученное значение на внешнее устройство. Опрос датчиков проводится непрерывно. Во время выполнения аналого-цифрового преобразования МПС решает другие задачи.

Структура микропроцессорной системы в этом случае имеет вид, представленный на рис. 15.4.

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

Рис. 15.4. Структурная схема МПС с 6 датчиками и вводом информации по прерыванию

Изменения по сравнению с рис. 15.3 касаются введения в МПС аналогового мультиплексора и подключения выхода готовности данных АЦП ко входу запроса внешнего прерывания INT0 (вход 2 порта P3) микроконтроллера. Здесь же следует обсудить настройку прерывания по этому входу. Как отмечалось выше, внешние прерывания мик роконтроллера могут быть настроены на установку флага запроса либо по низкому уровню, либо по спаду сигнала на входах INTх. В нашем случае этот сигнал поступает с выхода готовности данных АЦП и переключается с высокого уровня на низкий как раз в момент окончания преобразования. Так что целесообразно настроить установку запроса прерывания по входу INT0 на восприятие среза этого сигнала. К тому же в этом случае запрос будет сбрасываться автоматически при входе в обработчик.

Перед запуском АЦП микроконтроллер должен выдать на адресный вход мультиплексора номер датчика, показания которого будут считаны. Для хранения этого номера в программе используется регистр R2. Для организации сравнения показания первого датчика с текущим минимальным значением в задействованный для этих целей регистр R6занесем при инициализации максимально возможный 5-разрядный код 00011111b.

Выполнение фоновой задачи имитируем бесконечным циклом, выход из которого происходит по сигналу прерывания от АЦП.

Текст программы с необходимыми комментариями приведен ниже.

; Ввод по прерыванию
.ORG 0H
AJMP Start ; на начало программы
.ORG 3
AJMP Int_INT0 ; на обработчик INT0
.ORG 30H
Start:  MOV IE,#00000001b ; разрешение прерываний от INT0
MOV     TCON,#00000001b  ; сброс флагов, INT0 по срезу
MOV P0,#00011111b
ACALL INIT
SETB EA ; разрешение всех прерываний
M: AJMP M ; фоновая задача
; Обработчик прерываний от INT0
Int_INT0:MOV A,R6 ; сравнение с текущим минимумом
CLR C
SUBB A,P0
JB A.7,M1
MOV R6,P0
M1: SETB P1.6 ; гашение АЦП
MOV R5,#5 ; задержка на гашение
DJNZ R5,$
DJNZ R3,M2 ; проверка опроса всех датчиков
ANL P2,#11100000B ; вывод результата
211
MOV A,R4
ORL P2,A
CLR P2.5 ; строб записи в ВУ
SETB P2.5
ACALL INIT
RETI
M2: INC R2 ; А
др = А
др + 1
ACALL INIT1
RETI ; выход из обработчика
; начальные установки
INIT: MOV R2,#11000000b ; R2<2...0> = <номер датчика>
MOV R6,#00011111b ; регистр для хранения минимума
MOV R3,#6 ; количество датчиков
INIT1: MOV P1,R2 ; выдача номера датчика
CLR P1.6 ; запуск АЦП
RET
.END
< Лекция 14 || Лекция 15: 123 || Лекция 16 >
Владислав Салангин
Владислав Салангин

приветствую создателей курса и благодарю за доступ к информации! понимаю, что это уже никто не исправит, но, возможно, будут следующие версии и было бы неплохо дать расшифровку сокращений имен регистров итд, дабы закрепить понимание их роли в общем процессе. 

Михаил Королёв
Михаил Королёв