Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
07.04.2023
Размер:
425.08 Кб
Скачать

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра ВТ

ОТЧЕТ

по лабораторной работе №6

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

Тема: Изучение работы аналого-цифрового преобразователя в микроконтроллере.

Студенты гр.

Преподаватель

Зуев И.С.

Санкт-Петербург

2023

Цель работы.

  1. Ознакомление со структурой блока аналого-цифрового преобразования (АЦП) в микроконтроллере ADuC812.

  2. Изучение вопросов программирования и применения блока аналого-цифрового преобразования в основных режимах его работы.

Задание на лабораторную работу

Составить программу, обеспечивающую ввод аналоговой информации последовательно по трем каналам (15 отсчетов) в режиме прерывания АЦП. Запуск преобразования выполнять с помощью таймера. Обосновать выбор частоты запуска АЦП. Выполнить обработку информации по алгоритму, представленному в п. 4 лабораторной работы 1.

Ход работы

Блок АЦП в микроконтроллере AduC812 включает в себя восьмиканальный пятимикросекундный преобразователь аналогового сигнала в цифровой с однополярным питанием, многоканальный мультиплексор, устройство выборки-хранения (УВХ), источник опорного напряжения (ИОН), систему калибровок.

Компоненты блока управляются через три интерфейсных SFR-регистра:

  • регистр ADСCON1 управляет преобразованием, временем переключения, режимами преобразования и потреблением устройства.

  • регистр ADCСON2 управляет выбором номера канала и режимами преобразования.

  • регистр ADCСON3 дает прикладным программам информацию о занятости АЦП.

После настройки и запуска АЦП выполняется преобразование и запись результата, представляющего собой 12-разрядный код, в регистры ADCDATA.

Выполнение аналого-цифрового преобразования в циклическом режиме с максимальной скоростью может быть реализовано с использованием режима прямого доступа к памяти (ПДП). Режим ПДП включается битом разрешения ПДП (ADCCON2.6). Результат каждого преобразования записывается во внешнюю статическую память, минуя микропроцессорное ядро. До включения режима ПДП необходимо разметить внешнюю память, в которую будут записываться данные. Разметка состоит в записи идентификаторов номеров каналов ID (четыре старшие разряда). Пример разметки показан в таблице 1.

Таблица 1.

Адрес

Байт

Содержание

00000AH

1

1

1

1

Команда СТОП ПДП

Младший байт результата преобразования канала 3

0

0

1

1

Повторить преобразование канала 3

Младший байт результата преобразования канала 3

0

0

1

1

Преобразовать канал 3, старшая тетрада результата

Младший байт результата преобразования температурного сенсора

1

0

0

0

Преобразовать температурный сенсор

Младший байт результата преобразования канала 5

0

1

0

1

Преобразовать канал 5, старшая тетрада результата

000001H

Младший байт результата преобразования канала 2

000000H

0

0

1

0

Преобразовать канал 2, старшая тетрада результата

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

После разметки стартовый адрес начала размеченной таблицы (0 для примера в таблице 1.) записывается в регистры DMAP, DMAH и DMAL. Три байта стартового адреса следует записывать в следующем порядке: DMAL, DMAН и DMAP. Конец таблицы ПДП обозначается записью ≪1111≫ в поле выбора канала. Время преобразования устанавливается через SFR ADCCON1. Теперь для запуска ПДП и передачи результатов в последовательные ячейки внешней памяти можно установить бит разрешения (ADCCON2.6, DMA). Окончание ПДП преобразования устанавливается битом прерывания АЦП в ADCCON2.7. По окончанию ПДП внешняя память данных окажется загруженной новыми результатами работы АЦП согласно разметке.

Листинг программы.

Code.asm

$MOD812 ORG 0h JMP MAIN ORG 0033h ; прерывание по концу работы АЦП JMP START MAIN: MOV ADCCON1, #62h ; 01100010b == нормальный, от таймера 2 ; установка времени преобразования MOV ADCCON2, #00h ; 00000000b == 0 канал MOV RCAP2L, #0A4h ; В регистры RCAP2H и ; RCAP2L записываются данные для загрузки в регистры счетчика TH2 и TL2 MOV RCAP2H, #0FFh MOV TL2, #0A4h ; обнуляем счетчик 2 MOV TH2, #0FFh ; то, что будет загружаться в TL2 при перезаполнении MOV 10h, #10h ; кол-во чисел (+1, т.к. DJNZ "упустит" последнее число) MOV IE, #0C0h ; 11000000b == вкл + от АЦП вкл SETB TR2 ; старт для таймера 2 MOV DPH, #0h MOV DPL, #0h MOV P1, #10010000b ; ниже просто записываем Q_min и Q_max в External Memory MOV DPL, #70h MOV A, #55h ; q_min tyt MOVX @DPTR, A MOV DPL, #71h MOV A, #70h ; q_max tyt MOVX @DPTR, A CLR A LOOP: JMP LOOP START: DJNZ 10h, NEXT ; считываем числа и записываем их в External Memory CLR TR2 ; останавливаем таймер JMP LAB1_4 ; переходим к выполнению алгоритма работы программы из лабораторной 1_4 NEXT: PUSH ACC PUSH DPH PUSH DPL ; сохраняем текущий DPTR MOV DPH, #0h MOV DPL, #0h ; в нулевой ячейке держим количество чисел в памяти MOVX A, @DPTR ; берём из нулевой ячейки значение INC A MOVX @DPTR,A ; +1 записываем обратно MOV DPL, A ; дальше записываем число в "массив" MOV A, #0h MOVX @DPTR,A MOV A, ADCDATAL MOVX @DPTR,A POP DPL POP DPH POP ACC RETI LAB1_4: ; сохраняем состояния регистров до работы PUSH 0 PUSH 1 PUSH 2 PUSH 3 PUSH 4 PUSH 5 PUSH 6 PUSH ACC PUSH PSW PUSH DPH PUSH DPL MOV DPH, #0h MOV DPL, #0h ; ниже лабораторная работа 1_4, и здесь добавлено только получение количества чисел, диапазон из External Memory MOVX A, @DPTR MOV R0, A INC DPTR MOV R2, #0h MOV R3, #0h MAIN_LOOP: MOVX A, @DPTR INC DPTR MOV R4, A LCALL ADD_OPERATION MOV A, R5 MOV R2, A MOV A, R6 MOV R3, A DJNZ R0, MAIN_LOOP MOV DPH, #0h MOV DPL, #0h ; в нулевой ячейке держим количество чисел в памяти MOVX A, @DPTR MOV R4, A ; кол-во чисел LCALL DIVIDE_OPERATION ; В R5 среднее значение, в R6 есть ли остаток MOV DPL, #70h MOVX A, @DPTR; Q_MIN MOV R0, A INC DPTR MOVX A, @DPTR; Q_MAX MOV R1, A MOV A, R5 SUBB A, R1 JNC MAIN_P11 ; R5 >= R1 <-> x_ср >= Q_max CLR PSW.7 ; C - carry flag MOV A, R0 SUBB A, R5 JC MAIN_P10 ; R0 < R5 <-> Q_min < x_ср ; То что ниже, это для x_ср <= Q_min CLR PSW.7 ; C - carry flag MOV A, R0 SUBB A, R5 JNZ MAIN_P00 ; R0 != R5 <-> Q_min != x_cp MOV A, R6 JZ MAIN_P00 ; mod == 0 JNZ MAIN_P10 ; mod != 0 MAIN_P11: MOV P1, #3h JMP POP_EVENT MAIN_P10: MOV P1, #2h JMP POP_EVENT MAIN_P00: MOV P1, #0h JMP POP_EVENT POP_EVENT: POP DPL POP DPH POP PSW POP ACC POP 6 POP 5 POP 4 POP 3 POP 2 POP 1 POP 0 RETI ADD_OPERATION: ; Складывает R2R3 и R4 в R5R6 ; R3 и R6 - это младшие разряды ; R5, R6 и A меняются после вызова процедуры CLR PSW.7 ; C - carry flag MOV A, R4 ADD A, R3 MOV R6, A MOV A, R2 ADDC A, #0h MOV R5, A RET DIVIDE_OPERATION: ; Целочисленное деление R2R3 на R4 в R5 ; Если остаток от деления равен 0, то R6 = 0 ; R3 - это младший разряд ; R5, R6 и A меняются после вызова процедуры PUSH 0 ; R0 PUSH 1 ; R1 MOV R0, #0h MOV R1, #0h MOV R5, #0h MOV R6, #0h CLR PSW.7 ; C - carry flag DIVIDER_LOOP: INC R5 ; плюсуем к R1R0 R4 MOV A, R0 ADD A, R4 MOV R0, A MOV A, R1 ADDC A, #0h MOV R1, A ; Сравниваем R2R3 и R1R0 MOV A, R2 SUBB A, R1 JC DIVIDER_END JNZ DIVIDER_LOOP MOV A, R3 SUBB A, R0 JC DIVIDER_END JNZ DIVIDER_LOOP ; JZ DIVIDER_END INC R5 DEC R6 DIVIDER_END: DEC R5 INC R6 POP 1 ; R1 POP 0 ; R0 RET END

Результат выполнения программы.

Для моделирования процесса аналогово-цифрового преобразования в симуляторе подготовили файл результатов преобразования, представленный на рисунке 1.

Рисунок 1. Файл результатов преобразования.

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

Рисунок 2. Результат выполнения программы (установка параметров).

Рисунок 3. Результат выполнения программы (сообщение передано).

Соседние файлы в папке 6 лаба
  • #
    07.04.202396 б0ADCDATA.ADC
  • #
    07.04.2023425.08 Кб1lab6.docx
  • #
    07.04.20235.11 Кб0lab6_2.asm