Міністерство освіти і науки України
Національний технічний Університет “ХПІ”
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра “Обчислювальної техніки та програмування”
Звіт з лабораторної роботи №6
з курсу “Мікроконтролери та мікро ЕОМ”
Тема: “Ввід і вивід аналогових сигналів
у мікроконтролерах сімейства PIC16Cxx”
Кучеренко М.О.
Перивірив:
Скородєлов В.В.
Лабораторна робота №6
Мета роботи: Вивчити принцип роботи аналого-цифрового перетворювача на прикладі мікроконтролера PIC16C71. Навчитися вводити аналогові сигнали. Розглянути способи виводу аналогових сигналів. Навчитися формувати широтно-модульовані сигнали.
1. Ввод аналогових сигналів.
1.1. Виконати конфігурацію мікроконтролера на вводу аналогових сигналів.
1.2. Ввести сигнали з двох аналогових датчиків U1 і U2.
1.3. Зробити порівняння введених сигналів.
1.4. За результатами порівняння виконати підпрограму згідно варіанту.
1.5. Визначити час виконання перетворення АЦП.
2. Вивід аналогових сигналів.
2.1. На заданому виводі мікроконтролера сформувати сигнал із заданим періодом повторення T і числом рівнів квантування N.
Індивідуальне завдання:
1. Якщо U1 <= U2 то виконати підпрограму E – формування позитивного імпульсу тривалістю ti = 5 · tц на виводі RB0, де tц – тривалість командного циклу; якщо U1 > U2 то виконати підпрограму В – декремент 16-розрядного лічильника в пам'яті даних.
2. На виводі RB4 мікроконтролера сформувати сигнал з періодом повторення T=32 мс і числом рівнів квантування N=256.
Хід роботи:
Перед тим як розробити текст програми, яка буде виконувати всі дії які необхідні для виконання індивідуального завдання, розробимо алгоритм виконання цього завдання:
Алгоритм виконання завдання:
1. Спочатку робимо ініціалізацію мікроконтролера, а саме налагоджуемо виводи RA3-RA0 як аналогові записавши 0 у регістр ADCON1, обираємо аналоговий канал 0 (AIN0) (у ADCON0 біти CSH1 та CSH0 скидаемо) та вмикаємо АЦП встановивши біт ADON у “1” (ADCON0). Також налагоджуємо виводи порта В RB0 та RB4 на вивід, а інші на ввод.
2. Далі виконуємо ввод двох аналогових сигналів та збережуемо у комірках пам’яті результати їхнього перетворення. Для цього спочатку витримати затримку у 30 мксек, після чого почати перетворення встановивши у регістрі ADCON0 біт GO_DONE у “1” та після закінчення перетворення збережемо отриманий результат, що знаходиться у регістрі ADRES у акумулятор (регістр W) та потім з нього збережуємо це значення у комірці пам’яті.
3. Після того, як обидва значення аналогових сигналів збережено, виконуємо порявняння цих значень, а саме шляхом віднімання одного від іншого та результат визначаємо по стану прапоця переносу Carry регістру STATUS. Тобто якщо Carry=0 то U1 <= U2 тому викликаємо підпрограму E – формування позитивного імпульсу тривалістю ti = 5 · tц на виводі RB0, а якщо Carry=1 то U1 > U2 тому викликаємо підпрограму В – декремент 16-розрядного лічильника в пам'яті даних.
4. Далі на виводі RB4 мікроконтролера формуємо сигнал з періодом повторення T=32 мс і числом рівнів квантування N=256. Це робимо використовуючи допоміжні комірки пам’ті, а саме заносимо у них необхідні значення та у циклі робимо їх декремент поки вони не стануть дорівнювати нулю.
Розобивши алгоритм виконання завдання, напишемо текст програми, яка буде працювати за цим алгоритмом:
Текст програми:
list p=16с71 ;определение типа мк
#include P16c71.inc ;подключение файла p16с71.inc
counter_l EQU 0x0c ;младший байт 16-розрядного счетчика
T_U1 EQU 0x0d ;ячейка в которой будет сохранено значение первого аналогового сигнала
del EQU 0x0e ;дополнительная ячейка
T_U2 EQU 0x0f ;ячейка в которой будет сохранено значение второго аналогового сигнала
counter_h EQU 0x10 ;старший байт 16-розрядного счетчика
test EQU 0x11 ;дополнительная ячейка
an1 EQU 0x12 ;дополнительная ячейка
an2 EQU 0x13 ;дополнительная ячейка
bcf INTCON, GIE ;запрет прерываний
goto start
start call initAD ;вызов подпрограммы
call Convert ;вызов подпрограммы
movwf T_U1 ;сохраняем значени первого аналогового сигнала
call Convert ;вызов подпрограммы
movwf T_U2 ;сохраняем значени второго аналогового сигнала
bcf STATUS,0 ;Сarry=0
subwf T_U1,0 ;T_U1-W
btfss STATUS,0 ;проверяем Сarry=1
goto k ;если да переход на подрограмму В
call proc_B ;есле нет переход на подрограмму Е
goto k1
goto k1
k call proc_E
k1 call analog ;вызов подпрограммы формирующей на RB4 сигнал
;с периодом Т=32 мсек и числом уровней квантования 256
goto start ;зацикливаем программу
initAD bsf STATUS,RP0 ;выбор банка 1
movlw b'00000000' ;RA3-RA0 - аналоговие выводы
movwf ADCON1
bcf STATUS,RP0 ;выбор банка 0
movlw b'11000001' ;RC-генератор для АЦП
movwf ADCON0 ;канал 0, вкл. АЦП
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.