Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
knigaEMTmikroprotsesori.doc
Скачиваний:
16
Добавлен:
10.03.2016
Размер:
1.33 Mб
Скачать

Закрити вікно icd Options().

У вікні MPLAB ICD мають бути обрані такі пункти: COM1, 19200, Minimum and Watch window, 2MHz-10MHz (вікно MPLAB ICD не закривати!).

  1. Стандартним шляхом скопіювати текст програми з файлу D:\TEMP\ACP.asm в асемблерний файл вашого проекту. Переглянувши текст програми, дописати асемблерні фрагменти, вказані в коментарі.

;*********************************************************

;Лабораторна робота 27

;Дослідження модуля АЦП мікроконтролера PIC16F877

;*********************************************************

list p=16f877 ;директива визначення типу процесора

#include <p16f877.inc> ;включення файлу стандартних імен

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_ON & _CPD_OFF

CBLOCK 20H

T_C;тимчасове зберігання результату АЦ перетворення

_N ;змінна для завдання величини затримки

LOOP3 ;змінні

LOOP2 ; для

LOOP1 ; підпрограм

LOOP0 ; затримок

LSD;молодший десятковий розряд значення температури

MSD ;старший десятковий розряд значення температури

L7 ;7-сегментний код молодшої цифри

M7 ;7-сегментний код старшої цифри

ENDC

;======================================

; Основна програма

;======================================

org 0x000

nop ;початок програми

nop

goto Start

;=================

org 0x4

nop

int: retfie

;=================

Start: clrf PORTA ;обнулити порт А

bsf PORTA,2 ;зняти скидання регістрів зсуву

clrf PORTC ;Обнулити порт С,

bsf STATUS,RP0 ;банк регістрів 1

movlw b'11111011' ;RA2 - на виведення,

movwf TRISA ;інші біти порту А - на введення,

; в т.ч. RA0 !

movlw b'11010111' ;встановити RC5, RC3 на виведення,

movwf TRISC ;інші біти порту С - на введення

bcf STATUS,RP0 ;банк регістрів 0

banksel PORTC

clrf PORTC ;очистити PORTC

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;встановлення режимів роботи модуля АЦП

????? ??????????? ;встановити тактову частоту

; Fosc/8, канал 0

????? ?????? ;і ввімкнути модуль АЦП

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

banksel OPTION_REG

movlw B'10000111' ;переддільник підключити до

; таймера TMR0,

movwf OPTION_REG ;і встановити коефіцієнт 1:256

movlw B'00001110' ;вирівнювання вліво, один

; аналоговий канал № 0,

movwf ADCON1 ;опорні напруги: V+ = Uживл. = +5 В,

; V- = 0

banksel PORTC

Main: btfss INTCON,T0IF ;очікування переповнення

; таймера 0

goto Main

bcf INTCON,T0IF ;скидання ознаки переповнення

;таймера 0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

??? ????????? ;\старт АЦ перетворення

Wait: ????? ?????? ;\очікування завершення перетворення

???? ????

???? ???????? ;запис результату АЦ перетворення

????? ??? ;в регістр T_C

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

call RASPAK ;розпаковка байта на дві окремі тетради

;---------------------------------------------------------

MAIN_1: call HEX_7 ;перетворення НЕХ коду 2-х цифр у

; код 7-сегментних індикаторів

disp: CALL DISPLAY ;результат вимірювання – через

;регістри зсуву - на індикацію

movlw 1 ;константа для паузи 0.25 секунди

MOVWF LOOP3

MAIN_2:

CALL DELAY_LONG ;затримка на час (LOOP3)*0.25 с

DECFSZ LOOP3, F

GOTO MAIN_2

;-----------------------------------------------

GOTO Main ;перехід до Main

;===============================================

;п/п зсуву вмісту регістрів M7, L7 молодшими розрядами

; вперед у 2 регістри зсуву 74НС164

DISPLAY:

bcf PORTA,2 ;скидання регістрів

bsf PORTA,2 ;зсуву (для індикаторів)

movlw d'16' ;лічильник в _N

movwf _N

NastBit: rrf M7,f ;зсув вправо пари регістрів M7, L7

rrf L7,f

bcf PORTC,5 ;якщо висунутий біт=0, встановити RC5=0

btfsc STATUS,C ;якщо висунутий біт=1, - RC5=1,

bsf PORTC,5 ;

nop

bsf PORTC,3 ;

nop ;тактовий імпульс

bcf PORTC,3 ;

decfsz _N,f ;лічильник - 1, і пропустити, якщо він

; дорахував до нуля

goto NastBit ;зсув повторюється 16 разів

return

;---------------------------------------

DELAY_LONG

MOVLW .250 ;затримка 250 мс

MOVWF LOOP1

DELAY_N_MS:

OUTTER:

MOVLW .102 ;затримка 1 мс

MOVWF LOOP2

INNER:

movlw d'2'

movwf LOOP0

ININNER:

DECFSZ LOOP0,F

goto ININNER

DECFSZ LOOP2, F

GOTO INNER

DECFSZ LOOP1, F

GOTO OUTTER

RETURN

;---------------------------------------

DELAY_10USEC: ;затримка тривалістю (W)*10 мкс

MOVWF LOOP1

DELAY_10USEC_0

movlw d'2'

movwf LOOP0

DELAY_10USEC_1:

DECFSZ LOOP0,F

GOTO DELAY_10USEC_1

decfsz LOOP1,f

goto DELAY_10USEC_0

return

;********************************************

; Стандартні процедури роботи з дисплеєм

;********************************************

;п/п розпаковки дворозрядного 16-кового числа

RASPAK: MOVF T_C,w

andlw h'f0'

movwf MSD

swapf MSD,f

MOVF T_C,w

andlw h'0f'

MOVWF LSD

retlw 0

;------------------------------------

;п/п перетворення 2-х чотирибітних чисел з регістрів MSD,

; LSD

;у 7-сегментні коди двох цифр в регістрах M7, L7

HEX_7: movf MSD,W

call tab7s ;п/п перетворення цифри (W)=0..F у

;7-сегментний код в W

movwf M7 ;7-сегм. код старшої цифри

movf LSD,W

call tab7s

movwf L7 ;7-сегм. код молодшої цифри

return

;------------------------------------

tab7s: addwf PCL,f ;п/п перетворення шістнадцяткової

; цифри (W)=0..F у 7-сегментний код в W

retlw b'11111100' ;0

retlw b'01100000' ;1

retlw b'11011010' ;2

retlw b'11110010' ;3

retlw b'01100110' ;4

retlw b'10110110' ;5

retlw b'10111110' ;6

retlw b'11100000' ;7

retlw b'11111110' ;8

retlw b'11110110' ;9

retlw b'11101110' ;A

retlw b'00111110' ;b

retlw b'10011100' ;C

retlw b'01111010' ;d

retlw b'10011110' ;E

retlw b'10001110' ;F

retlw b'00000000' ;код гасіння індикатора

;*************************************************

END

  1. Виконати компіляцію програми (Project – Make Project, або кнопка у вигляді зеленої лійки, або клавіша F9). На екрані з'являється вікно результатів компіляції (Build Results).

  2. Якщо з'явилось повідомлення про помилки (error), ознайомившись з поясненням змісту помилки, слід натиснути мишею на цей рядок вікна Build Results. MPLAB зробить активним той рядок у тексті програми, де ймовірно зроблено помилку. Треба виправити її і далі так само й інші помилки. Потім повернутись до п. 8, 9, поки не буде видано повідомлення "Build completed successfully" (Компіляцію завершено успішно). При цьому створюється файл з тим же ім'ям і розширенням .hex. Може також з'явитись віконце нагадування про те, що після змін у програмі потрібно виконати програмування мікроконтролера за допомогою відладчика.

  3. Слід закрити це вікно і вікно Build Results. Виконати програмування мікроконтролера, натиснувши у вікні MPLAB ICD кнопку Program.

  4. Виконати пуск програми, натиснувши клавішу F9 або кнопку зеленого світлофора.

  5. Підключити вольтметр до входу RA0/AN0 АЦП і загального виводу. Змінюючи викруткою положення змінного резистора R56, встановлювати за показами вольтметра значення напруг, обчислених за формулою:

U(i) = 0,05*i*N, для і = 0, 1, 2, ..., 10, де N – номер бригади.

Для кожної встановленої напруги записати з цифрового індикатора результат АЦ перетворення у шістнадцятковій формі. Отримані значення занести в таблицю 8.1. Перевести шістнадцяткові коди у десяткові. Розрахувати значення аналогових напруг, відповідних цим кодам з формули лінійного перетворення:

, (1)

де U*(i) – аналогова напруга, відповідна коду;U+таU– позитивна і негативна опорні напруги (U+= 5 В,U= 0); С(і) – десятковий код з таблиці; С+, С– коди, що відповідають позитивній і негативній опорним напругам (С+= 255, С= 0). Для зручності розрахунку треба перетворити (1) до виглядуU*(i) =f [С(і)].

Обчислити приведену похибку: .

Результати занести в таблицю 27.1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]