Ввід і вивід аналогових сигналів у мікроконтролерах сімейства PIC16Cxx

Страницы работы

Содержание работы

Міністерство освіти і науки України

Національний технічний Університет “ХПІ”

“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”

Кафедра “Обчислювальної техніки та програмування”

Звіт з лабораторної роботи №7

з курсу “Мікроконтролери та мікро ЕОМ”

Тема: “Ввід і вивід аналогових сигналів
у мікроконтролерах сімейства PIC16Cxx”

Виконав:

студент групи КІТ – 14Б

Богачов О. С.

Перивірив:

Ліпчанський М. В.

Скородєлов В.В.

Харків 2008

МЕТА: вивчити принцип роботи аналого-цифрового перетворювача на прикладі мікроконтролера PIC16C71. Навчитися вводити аналогові сигнали. Розглянути способи виводу аналогових сигналів. Навчитися формувати широтно-модульовані сигнали.

Індивідуальнезавдання:

1.  Введення аналогих сигналів.

1.1.  Ввести сигнал з двох аналогових датчиків А1, А2.

1.2.  Проаналізувати сигнал та виконати наступні дії:

Якщо А1<А2, тоді читаємо восьмирозрядне число з порту В, та записуємо його у комірку пам’яті (0х20) даних.

Якщо А1³А2, тоді декрементуємо значення комірки пам’яті (0х20) даних.

1.3.  Виведення аналогових сигналів. На виводі RB1 сформувати сигнал з періодом Т=2мс, і числом рівнів квантування N=128.

Алгоритм програми:

1.  Настоюємо АЦП мікроконтролера. Вибираємо з якого каналу отримувати аналоговий сигнал (початково з АN2,а потім з AN3), а також внутрішній генератор.

2.  Настроюємо переривання від АЦП. Для цього скидаємо флаг закінчення переривання та встановлюємо флаг який дозволяє переривання від АЦП, ті флаг який дозволяє переривання.

3.  Робимо затримку 30 мкс.

4.  Встановлюємо біт запуска АЦП, та очикуємо коли буде закінчено перетворення аналогового сигналу

5.  Після перетворення сигналу результат записуємо у r_AN2(3).

6.  Після того, як було перетворено 2 аналогових сигнали перевіряємо їх відношення одне до одного та виконуємо ту або інакшу дію.

7.  переходимо до пункту 1.

Для подання сигналів використовується файл (an.reg)який містить:

17

27

39

20

55

55

Текст програми:

; підключення файлу з описом стандартних констант і значень

     #include p16c71.inc

     cblock         0x0C

               r_AN2 ;1ый результат АЦП преобразования

               r_AN3 ;2ой результат АЦП преобразования     

               flag  ;записывать в r_AN1 или r_AN2?     

               cycl  ;для временной задержки

               ah

               al

               endc  

     goto   main

int_point org     0x04

     btfsc  ADCON0,ADIF; прерывавние по окончанию АЦП преобразования

     call     EndPr          ;вызов обработчика

     retfie            ;возврат с прерывания

EndPr

     movf  ADRES,0

     bcf     ADCON0,ADIF ;сброс флага конца АЦП преобразования

     return

initAD

     movlw         0xFF

     tris     PORTB      

     ; настройка каналов АЦП

     movlw         b'00000000' ;AN0-AN7 - аналоговые входы

     movwf         ADCON1^80

     movlw         b'11010001' ;внутрений RC генератор, выбор канала AN2.

     movwf         ADCON0   

     btfsc  flag,0

     bsf     ADCON0,3     ;выбор канала AN3            

     return

setInt

     bcf     ADCON0,ADIF ;сбросить флаг окончания прерывания

     bsf     INTCON,ADIE ;разрешить прерывание от АЦП

     bsf     INTCON,GIE  ;разрешить прерывание

     return

Delay30us

     movlw         9

     movwf         cycl

m_del     decfsz cycl,1

     goto m_del

     return

wait_res

m1          btfsc ADCON0,GO_DONE ;

     goto m1

     return

case_r    

     btfss   flag,0

     call     r_AN2c

     btfsc  flag,0

     call     r_AN3s

     movlw         0x01 

     xorwf flag,1  ;инвертируем 0ой бит в flag

     return

r_AN3s

     movwf         r_AN3

     bsf     flag,1

     return

r_AN2c

     movwf         r_AN2

     bcf     flag,1

     return

compare

     movf  r_AN3,0

     subwf          r_AN2,0 ;r_AN2-r_AN3

     btfsc  STATUS,C ;если r_AN2 < r_AN3

     goto   decrem

read       

     movf  PORTB,0

     movwf         0x20

     goto   ex     

decrem

     movlw         0x20

     movwf         FSR

     movf  FSR,0

     decf   W,0

     movwf         0x20

ex return

SHIM

     movlw         0xFD;

     tris     PORTB

     movlw         .128

     movwf         ah

     movwf         al

     bcf     INTCON,GIE;

     movlw         b'00010010' ; 1:8, по пер.фронту, от внешн.ист.сигн

                             ; делитель работает с TMR0        

     bsf     STATUS, RP0      ; вибір банку 1

     movwf         OPTION_REG                         ; запис у регістр OPTION

     bcf     STATUS, RP0      ; вибір банку 0

     movlw         0xFD

     andwf          PORTB,1

msh                           

     movlw         6

     movwf         TMR0;

     bcf     INTCON,T0IF; сброс флага переполнения

     movlw         0x02

     xorwf PORTB,1

mmh       decfsz          al,1

     goto   mmh

     movlw         0x02

     xorwf PORTB,1

mmcl      btfss   INTCON,T0IF

     goto   mmcl

     decf   ah,1  

     movf  ah,0

     movwf         al

     decfsz  ah,1

     goto   msh

     return

     org     60h

main      

     clrf     flag

loop        call     initAD

     call     setInt

     call     Delay30us

ares

     bsf     ADCON0,GO_DONE ;бит запуска АЦП  

     call     wait_res

     call     case_r

     btfsc  flag,1  ;если было преобразовано 2а числа

     call     compare ;тогда сравниваем числа

        call SHIM

     goto   loop

     END

Висновок: за допомогою АЦП можна перетворити аналоговий сигнал у цифровий кід. АЦП перетворення здійснюється за 5мкс. Цифрове значення можна записати у пам’ять мікроконтролера, або порівняти його з іншим числом. Цифрове значення можна представити у вигляді аналогового сигнала використовуя ШІМ

Похожие материалы

Информация о работе