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

25.1. Таблиця результатів тестування

Стан тумблерів

Стан світлодіодів

RB4

RB5

RB6

RB7

RB3

RB2

RB1

RB0

RA3

RA2

RA1

RA0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

1

0

0

1

1

0

0

1

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

1

0

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

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

;Взаємодія контролера з клавіатурою

LIST P=16F628

INCLUDE "P16F628.INC";підключення файла стандартних імен

;директиву __CONFIG набрати в одному рядку,

;закінчуючи словом _LVP_OFF

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _MCLRE_ON & _LVP_OFF

TEMP EQU h'20' ;регістр для тимчасового зберігання і

;обробки інформації

org 0

goto start

org h'4'

goto ServiceInt ;підпрограма обробки переривань

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

start: call init ;виклик підпрограми ініціалізації

loop: sleep ; встановити режим енергозбереження

nop

goto loop

ServiceInt: btfsc INTCON,RBIF ;переривання від зміни

;стану клавіатури?

goto ServiceWakUp ;якщо так, тоді обслуговування

bcf INTCON, T0IE ;якщо ні, заборонити переривання

;від таймера

bcf INTCON, T0IF ;скинути прапор таймера TMR0

return

;визначення натиснутої клавіші,

;ввімкення відповідних світлодіодів

;і очікування відпускання всіх клавіш

ServiceWakUp: bcf INTCON, RBIE ;заборонити переривання

;від порту В

movf PORTB, w ;прочитати порт В

bcf INTCON, RBIF ;скинути прапор зміни стану порту В

call delay16 ;затримка 16 мс для завершення

;дренькоту контактів

movf PORTB, w

andlw b'11110000' ;виділити і запам'ятати

movwf TEMP ; код контактів

;управління світлодіодами:

btfsc TEMP, 7 ;якщо замкнуто контакт RB7,

goto variant ;перейти до виконання власного фрагмента

clrf PORTA ;якщо замкнуто інший контакт,

swapf TEMP, w ;вивести інформацію

movwf PORTB ;на RB0-RB3.

ochik: call KeyRelease ;виклик п/п очікування

;відпускання контактів

retfie ;вертання з п/п переривання

variant:

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

;тут зробити вставку власного фрагмента програми,

;який у двійковій формі виводить на світлодіоди десяткове

;число БГ, де Б – номер бригади, Г – групи.

;Використати світлодіоди RB3-RB0, RA3-RA0, підключені до

;портів В і А. Вважати RB3 старшим, RA0 молодшим розрядами

;двійкового числа. Наприклад, число d'69' має бути

;відображено так: RB3 RB2 RB1 RB0 RA3 RA2 RA1 RA0

;вагові коефіцієнти: 128 64 32 16 8 4 2 1

;двійкові цифри: 0 1 0 0 0 1 0 1

; (стан світлодіодів)

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

goto ochik

;підпрограма очікування відпускання всіх клавіш

KeyRelease: call delay16 ; затримка, щоб завершився

;дренькіт

movf PORTB, w ;читання з порту В

bcf INTCON, RBIF ;скинути прапор порту В

bsf INTCON, RBIE ;дозвіл переривань при зміні

;стану порту В

andlw b'11110000' ;виділити біти, до яких

;підключені контакти

btfsc STATUS, Z ;контакти іще замкнуті?

return ;ні – вертання з підпрограми

sleep ;якщо так, – перейти в режим енергозбереження

bcf INTCON, RBIE ;після пробудження заборонити

;переривання від зміни стану порту В

movf PORTB, w ;прочитати порт В

bcf INTCON, RBIF ;скинути прапор порту В

goto KeyRelease ;повторити очікування

;підпрограма ініціалізації

init: movlw h'07'

movwf CMCON ;відключити компаратори

clrf PORTA ;/вивести у защіпки

clrf PORTB ;/портів А і В нулі

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

clrf TRISA ;порт А – на виведення

movlw b'11110000' ;\ RB4-RB7 – режим введення

movwf TRISB ;\ RB0-RB3– режим виведення

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

bcf INTCON, RBIE ;заборонити переривання від

;зміни стану порту В

movf PORTB, w ;прочитати порт В

bcf INTCON, RBIF ;скинути прапор порту В

bsf INTCON, RBIE ;дозволити переривання від зміни

;стану порту В

retfie

;затримка 16 мс

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

movlw b'10000101' ;\підключити переддільник до TMR0

movwf OPTION_REG ;\з коефіцієнтом 1/64

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

clrf TMR0 ;скидання таймера

bcf INTCON, T0IF ;скинути прапор таймера TMR0

bsf INTCON, T0IE ;дозволити переривання від

;таймера TMR0

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

goto CheckAgain ;/таймера TMR0

bcf INTCON, T0IE ;заборонити переривання від

;таймера TMR0

bcf INTCON, RBIF ;;скинути прапор таймера TMR0

return

end

ЗМІСТ ЗВІТУ

Зміст має містити: назву та мету лабораторної роботи, схеми підключення клавіатури до мікроконтролера, скорочений порядок виконання лабораторної роботи, алгоритм і програму з коментарем, таблицю результатів тестування системи.

КОНТРОЛЬНІ ЗАПИТАННЯ

  1. Як позбутися "висячих" (непідключених до "0" або "1") входів мікроконтролера від контактних пристроїв введення інформації?

  2. Чим шкідливе явище дренькоту контактів?

  3. Як при програмуванні усунути вплив дренькоту контактів?

  4. У чому суть алгоритму переривання, пов'язаного зі зміною стану порту В?

  5. У чому перевага матричного способу підключення клавіатури?

  6. За яким алгоритмом здійснюється опитування клавіатури, підключеної матричним способом?

Лабораторна робота № 26

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