приветствую создателей курса и благодарю за доступ к информации! понимаю, что это уже никто не исправит, но, возможно, будут следующие версии и было бы неплохо дать расшифровку сокращений имен регистров итд, дабы закрепить понимание их роли в общем процессе. |
Построение микропроцессорных систем на основе однокристальных микроконтроллеров. Тенденции развития однокристальных микроконтроллеров
Полученная программа приведена ниже.
;Ввод информации по готовности .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.
Изменения по сравнению с рис. 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