Автор: Пользователь скрыл имя, 15 Марта 2012 в 13:36, контрольная работа
Предложите микроконтроллерное устройство позволяющее ввести от двух независимых датчиков аналоговые сигналы постоянного тока (U1 и U2), сравнить их между собой и по результатам сравнения осуществить.
Задача№ 1
Предложите микроконтроллерное
устройство позволяющее ввести
от двух независимых датчиков
аналоговые сигналы
Дополнительные условия задачи (Из таблицы с вариантами задач):
4. Тип используемого генератора тактовых импульсов: XT;
5. Способ формирования сигнала «Сброс» по выключению питания: Внутренний.
6. Выходные (управляющие) сигналы:
Импульсные:
Последовательность импульсов с параметрами: tи = 2 tц; tп = 2 tц;
Решение
Был выбран ОМК PIC16C71, так как этот
микроконтроллер имеет
Структура регистра ADCON (Адрес 08h в памяти данных) следующая:
7 0
ADCS1 |
ADCS0 |
CHS1 |
CHS0 |
GO/DONE |
ADIF |
ADON |
ADON - Включение АЦП:
ADIF - Флаг прерывания по окончанию преобразования:
GO:/DONE -Запуск АЦП (начало преобразования):
CHS1,CHS0 - Выбор аналогового канала:
10: канал 2 (AIN2); 11: канал 3 (AIN3).
ADCS1,ADCS0 - Выбор частоты преобразования:.
Сформированный сигнал управления выдается через вывод RB1 порта В. Для сравнения двух восьмиразрядных кодов, представляющих собой результаты преобразования сигналов U1 и U2 можно воспользоваться стандартной процедурой – вычитание двух кодов и проверка результата.
Был подключен ХТ генератор тактовых импульсов, при прошивке ОМК надо записать в байт конфигурации по адресу 2007 тип генератора.
Функциональная схема устройства
Текст программы в соответствии с данным алгоритмом приведен ниже:
;Текст программы
p=16c71, r=HEX
TITLE "VIBHU"
; Секция заголовка
; Описание регистров, битов и переменных
STATUS EQU 03H ; Регистр STATUS
PORTB EQU 06H ; Регистр порта В
ADCON0 EQU 08H ; Регистр управления АЦП
ADRES EQU 09H
; Регистр результата АЦП преобразования
INTCON EQU 0BH ; Регистр управления прерываниями
OPTREG EQU 81H ; Регистр OPTION
TRISB EQU 86H ; Регистр конфигурации порта В
ADCON1 EQU 88H ; Регистр конфигурации АЦП
RP0 EQU 5H ; Бит переключения страниц в
; регистре STATUS
Z EQU 02H
; Флаг Z – нулевого результата в регистре STATUS
CYCLE EQU 0DH
F0 EQU 0CH
; флаг, который нужно выставлять
; Рабочая секция
ORG 0 ; Начальный адрес после сброса
GOTO BEG
; Переход на начало программы
ORG 100 ; Начальный адрес программы
; (следующая команда будет расположена по адресу 100H)
BEG
; Инициализация микроконтроллера
BSF STATUS,RP0
; Включить первую страницу ПД
BCF OPTREG,7
; Отключить активную нагрузку от выводов порта В
BCF TRISB,0
; Установить бит 0 порта В на вывод
CLRF ADCON1
; Установить входы порта А как аналоговые, опорное
; напряжение для АЦП равно Vdd
BCF STATUS,RP0 ; Включить нулевую страницу ПД
MOVLW B'11000000' ; Разрешить прерывания только
MOVWF INTCON ; от АЦП (все остальные прерыва-
; ния запрещены !)
MOVLW 0C1H ; Синхронизация АЦП от
; собственного генератора.
MOVWF ADCON0 ; Разрешить работу АЦП
; Ввод и преобразование сигналов U1 и U2
OPROS:
BCF ADCON0,3 ; Установить входной канал AIN0
BSF ADCON0,2 ; Начать процесс преобразования
; сигнала U1
LOOP2 BTFSS ADCON0,2
; Ждать окончания
GOTO LOOP2
MOVF ADRES,0 ; Результат преобразования
; сигнала U1 записать в W
BCF ADCON0,1
; Сбросить флаг окончания преобразования ADIFв регистре ADCON0
BSF ADCON0,3 ; Установить входной канал AIN1
BSF ADCON0,2 ; Начать процесс преобразования
; сигнала U2
LOOP3 BTFSS ADCON0,2
; Ждать окончания
GOTO LOOP3
BCF ADCON0,1
;Сбросить флаг окончания преобразования ADIF в регистре ADCON0
; Процедура сравнения U1 и U2
SUBWF ADRES,0 ; U2-U1
BTFSC STATUS, Z
; Проверка состояния флага нулевого результата
; Z.Если Z=1 (U1=U2),
;то переход на фрагмент программы с адресом А1
GOTO A1
; Установка флага F0 в"0"
BCF F0, 0
; Вывод управляющих сигналов
MOVLW 8 ; 8 импульсов
MOVWF CYCLE
ST BSF PORTB,0
; Последовательность длиной 8 импульсов.
NOP ; __
NOP ; / \__
BCF PORTB,0 ;
DECFSZ CYCLE
; Занимает 2 цикла, поэтому не нужны NOP
GOTO ST ; если 0 пропускает след ком.
GOTO A2 ; Переход на фрагмент программы с адресом А2
; Установка флага F0 в "1"
A1 BSF F0, 0
GOTO OPROS
A2 GOTO OPROS
Рассмотрим результаты трансляции программы .
Код программы в ПЗУ (файл 1.нех):
:020000000029D5
:
:
:
:
:
:
:00000001FF
Поскольку симулятор MPLAB IDE не позволяет проводить корректную отладку и моделирование работы встроенного АЦП , для выполнения проверки работоспособности программы необходимо соответствующим образом изменить исходный текст программы, введя принудительную модификацию результатов работы АЦП .
;Текст программы (для отладки )
;p=16c71, r=HEX
;TITLE "VIBHU"
; Секция заголовка
; Описание регистров, битов и переменных
STATUS EQU 03H ; Регистр STATUS
PORTB EQU 06H ; Регистр порта В
ADCON0 EQU 08H ; Регистр управления АЦП
ADRES EQU 09H
; Регистр результата АЦП преобразования
INTCON EQU 0BH ; Регистр управления прерываниями
OPTREG EQU 81H ; Регистр OPTION
TRISB EQU 86H ; Регистр конфигурации порта В
ADCON1 EQU 88H ; Регистр конфигурации АЦП
RP0 EQU 5H ; Бит переключения страниц в
; регистре STATUS
Z EQU 02H
; Флаг Z - нулевого результата в регистре STATUS
CYCLE EQU 0DH
F0 EQU 0CH ; флаг, который нужно выставлять
U1 EQU 0Eh ;U1
U2 EQU 0Fh ;U2
; Рабочая секция
ORG 0 ; Начальный адрес после сброса
GOTO BEG ; Переход на начало программы
ORG 100 ; Начальный адрес программы
; (следующая команда будет ; расположена по адресу 100H)
BEG
; Инициализация микроконтроллера
BSF STATUS,RP0
; Включить первую страницу ПД
BCF OPTREG,7
; Отключить активную нагрузку
BCF TRISB,0
; Установить бит 0 порта В на вывод
CLRF ADCON1
; Установить входы порта А как аналоговые, опорное
; напряжение для АЦП равно Vdd
BCF STATUS,RP0
; Включить нулевую страницу ПД
MOVLW B'11000000' ; Разрешить прерывания только
MOVWF INTCON ; от АЦП (все остальные прерыва-
MOVLW 0C1H ; Синхронизация АЦП от
MOVWF ADCON0 ; Разрешить работу АЦП
movlw 0
movwf U1
movlw 6
movwf U2
; Ввод и преобразование сигналов U1 и U2
CONVERT:
BCF ADCON0,3
; Установить входной канал AIN0
BSF ADCON0,2
; Начать процесс преобразования
; сигнала U1
LOOP2:
BTFSS ADCON0,2 ; Ждать окончания преобразова-
; ния сигнала U1
GOTO LOOP2
MOVF U1,0
MOVWF ADRES
MOVF ADRES,0 ; Результат преобразования
; сигнала U1 записать в W
MOVWF U1
MOVLW 3
ADDWF U1,1
BCF ADCON0,1
; Сбросить флаг окончания преобразования ADIF в регистре
BSF ADCON0,3
; Установить входной канал AIN1
BSF ADCON0,2
; Начать процесс преобразования сигнала U2
LOOP3:
BTFSS ADCON0,2 ; Ждать окончания
GOTO LOOP3
BCF ADCON0,1
; Сбросить флаг окончания преобразования ADIF в регистре
MOVF U2,0
MOVWF ADRES,1
MOVF ADRES,0 ; Результат преобразования
; сигнала U2 записать в W
MOVWF U2
MOVLW 1
ADDWF U2,1
; Процедура сравнения U1 и U2
MOVF U1,0
SUBWF U2,0 ; U2-U1
BTFSC STATUS, Z
; Проверка состояния флага нулевого результата
; Z.Если Z=1 (U1=U2),то переход на фрагмент программы с ;адресом А1
GOTO A1
; Установка флага F0 в"0"
BCF F0, 0
; Вывод управляющих сигналов
MOVLW 8; 8 импульсов
Информация о работе Проектирование Микроконтролерных устройств