Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. IV. Лабораторная диагностика ВИЧ-инфекции
  2. X. Робота самодіяльних організацій засуджених.
  3. XV. Аналітична робота.
  4. Ассемблер. Лабораторная работа № 5
  5. Бычий цепень. Систематическое положение, морфология, цикл развития, лабораторная диагностика. Тениаринхоза.
  6. Вирус папилломы человека. Характеристика. Онкогенность. Лабораторная диагностика
  7. Виховна та позакласна робота.
  8. Данная лабораторная работа предполагает освоение базовых принципов работы с консолью в Linux.
  9. Дипломна робота
  10. Емісійно-касова робота установ Національного банку України

 

 

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

Тема: “Система переривань мікроконтролера PIC16F84. Власні оброблювачі переривань”

 

Мета роботи: Вивчити систему переривань мікроконтролера PIC16F84, способи формування переривань, використання оброблювачів декількох переривань.

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

Написати оброблювачі переривань відповідно до варіанта завдання і номера студента за списком журналу групи (N=14).

1. Оброблювач переривання по передньому фронту сигналу на виводі повинен виконувати закінчення запису у EEPROM.

Варіант№1. Інкремент 16-розрядного лічильника в пам'яті даних.

2. Оброблювач переривання за зміною рівня сигналу на виводі RB7 повинен виконувати.

 

Хід роботи:

Перед тим як розробити текст програми, яка буде виконувати всі дії які необхідні для виконання індивідуального завдання, розробимо алгоритм виконання цього завдання:

 

Алгоритм виконання завдання:

 

Для всіх преривань мікроконтролера вектор преривання однаковий та має адресу 0004h, тому першим, що треба зробити, це починаючи з цієї адреси у пам’яті розташувати програмний код, який спочатку визначає джерело преривання (тобто від якого пристрою мікроконтролера прийшов сигнал преривання), а потім визначивши джерело преривання необхідно перейти на відповідну підпрограму, яка є оброблювачем цього преривання. Після виходу з цієї підпрограми необхидно зробити вихід з цього преривання.

Далі опишемо всі дії більш стисло з описом побудови оброблювачив преривань:

1. Спочатку виконуємо ініціалізацію мікроконтролера, а саме: 6-й біт INTEG регістру OPTION встановлюемо у “1”, це означає, що преривання на виводі RB0/INT буде по передньому фронту сигналу. Також налагоджуємо порти вводу/виводу: порт В всі виводи на ввод, а порт А вивід RA1 на вивод та інші на ввод.

2. Далі робимо заборону непотрібних преривань та дозволяемо необхідні, а саме: у регістрі INTCON 7-й біт GIE=1 (дозвіл усіх преривань), 4-й біт INTE=1 (дозвіл преривання на виводі RB0/INT), 3-й біт RBIE=1 (дозвіл преривання на виводах RB7-RB4), всі інші біти регістру скидаємо бо інші преривання нам непотрібні.

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

4. Для того щоб преривання трапилося на виводі RB0/INT ми за допомогою файлу стімулу на визначеному такті подаемо на вивід RB0/INT “1”, тобто трапляеться передній фронт сигналу (перехід від “0” до “1”), спричиняє преривання на виводі RB0/INT та перехід на адресу 0004h у пам’яті з якої ми починаємо програмний код оброблювачів цих преривань. Так само за допомогою файлу стімулу на визначеному такті подаемо на вивід RB4 “1”, тобто трапляеться зміна рівня сигналу на цьому виводі, а саме з “0” на “1”, що спричиняє преривання на виводі RB4 та перехід на адресу 0004h з якої ми починаємо програмний код оброблювачів цих преривань.

5. Спочатку необхідно визначити джерело преривання, для цього необхідно заборинити всі преривання (у регістрі INTCON 7-й біт GIE=0) та зробивши збереження значень необхідних регістрів у відповідні заздалегідь визначені комірки пам’яті, робимо перевірку відповідних бітів у регістрі INTCON, а саме: якщо 1-й біт INTF=1 то преривання на виводі RB0/INT і далі переходімо на підпрограму обробки цього преривання; якщо 0-й біт RBIF=1 то преривання на виводах RB7-RB4 і далі переходімо на підпрограму обробки цього преривання; якщо преривання від іншого джерела, то робимо дозвіл усіх преривань (у регістрі INTCON 7-й біт GIE=1) та вихід з преривання за допомогою команди “retfie”, після того як зробили повернення значень у регістри які було збережено у визначених для цього комірках пам’яті. При виході з преривання адреса наступної команди береться зі “стеку” тому наступною командою буде команда, яка була після команди під час виконання якої трапилося преривання.

6. Опишемо тепер алгоритми роботи підпрограм оброблювачів цих преривань.

 

а) алгоритм роботи підпрограми оброблювача преривання на виводі RB0/INT:

1. Цей оброблювач має виконувати - інкремент 16-розрядного лічильника в пам'яті даних, тому для цього лічильника у пам'яті даних беремо дві комірки (8-розрядні) одна з яких буде молочшою, а інша старшою частиною 16-розрядного лічильника. Кожного разу коли це преривання буде траплятися буде виконуватися інкремент молочшої частини 16-розрядного лічильника та якщо трапиться її переповнення буде виконуватися інкремент старшої частини 16-розрядного лічильника.

2. У кінці кожного оброблювача преривання необхідно зробити скидання біту цього преривання у регістрі INTCON, бо це не робиться апаратно, тому в кінці цієї підпрограми оброблювача преривання на виводі RB0/INT ми маємо зробити скидання біту INTF, а далі робимо повернення з цієї підпрограми оброблювача преривання.

 

б) алгоритм роботи підпрограми оброблювача преривання на виводі RB4.

1. Цей оброблювач має виконувати - формування позитивного імпульсу тривалістю ti =7tц на виводі RA1, але спочатку треба у оброблювачі зробити перервірку, чи дійсно преривання трапилося за зміною рівня сигналу на виводі RB4, а не на іншому з виводів: RB5, RB6 або RB7. Для цоьго робимо порівняння значення порту В до та після преривання, а саме перевіряємо чи змінилося значення на виводі RB4, якщо ні, то переходимо на кінець підпрограми та далі робимо повернення з цієї підпрограми оброблювача цього преривання; якщо так, то робимо формування позитивного імпульсу тривалістю ti на виводі RA1: для цього встановлюємо RA1 у “1” та далі робимо необхідну затримку за допомогою порожніх команд, кожна з яких нічого не робить, закрема затримки у один такт мікроконтролера. Після виконання необхідної затримки робимо скидання RA1 та перехід на кінець підпрограми де ми зберігаємо значення порту В у відповідній комірці пам’яті та скидання біту RBIF у регістрі INTCON і виконуємо повернення з цієї підпрограми оброблювача цього преривання.

 

Розобивши алгоритм виконання завдання, напишемо текст програми, яка буде працювати за цим алгоритмом:

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

list p=16f84a;определение типа мк

#include p16f84.inc;подключение файла p16f84a.inc

counter_l EQU 0x0c;молодша частина 16-розрядного лічильника

oldportb EQU 0x0d;попереднє значення порту В

T_W EQU 0x0e;комірка для збереження старого значення регістру W

T_STATUS EQU 0x0f;комірка для збереження старого значення регістру STATUS

counter_h EQU 0x10;старша частина 16-розрядного лічильника

test EQU 0x11;допоміжня комірка

 

bcf INTCON, GIE;запрет прерываний

goto start;перейт на початок програми

 

int_point

org 0x04;начало вектора прерываний

bcf INTCON, GIE;запрет прерываний

movwf T_W;сохраняем значение W

swapf STATUS,W;сохранение регистра

movwf T_STATUS;STATUS

btfsc INTCON,INTF;ожидание появления сигнала на ножке INT

call obrob_INT;вызов подпрограммы

btfsc INTCON,RBIF;ожидание смены сигнала на RB7-RB4

call obrob_RB4;вызов подпрограммы

swapf T_STATUS,W;востановление STATUS

movwf STATUS

movf T_W,0;востановление W

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

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

 

 

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

movlw b'10011000';запрет ненужных и разрешение

movwf INTCON;нужных прерываний

movf PORTB,0;чтение состаяния порта В

movwf oldportb;сохранение для следубщего сравнения

loop

nop;пустая команда

nop;пустая команда

nop;пустая команда

nop;пустая команда

goto loop;зацикливаем программу

 

 

init movlw b'01000000';внешнее прерывание на RB0/INT

OPTION;осуществляется по переднему фронту

movlw b'11111111';все разряды PORTB

TRIS PORTB;на ввод

movlw b'11111101';все разряды PORTA кроме первого (RA1)

TRIS PORTA;на ввод

Return;вихід з підпрограми ініціалізації

 

obrob_INT;обраболювач прерывания INT

incfsz counter_l;инкремент младшего байта счетчика

goto m1;переход если нет переполнения

incf counter_h;инкремент старшего байта счетчика

m1 movf counter_l,0

bcf INTCON,INTF;сброс флага прерывания INT

return;вихід з підпрограми обраболювача прерывания

 

obrob_RB4;обработчик прерывания от RB4

movf PORTB,0;чтение состаяния порта В

xorwf oldportb,0;сравнение с предыдущем значением порта В

movwf test;сохраняем результат сравнения

btfss test, 5;проверяем изминилось ли состояние RB4

goto notRB4;если нет переход на конец обработчика

;если изминилось то формируем импульс на выводе RA1 (ti=7*tц)

bcf PORTA,1;сброс RA1

bsf PORTA,1;установка RA1

nop;пустая команда

nop;пустая команда

nop;пустая команда

nop;пустая команда

nop;пустая команда

nop;пустая команда

nop;пустая команда

bcf PORTA,1;сброс RA1

 

notRB4 movf PORTB,0;чтение состаяния порта В

movwf oldportb;сохранение для следубщего сравнения

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

 

return;вихід з підпрограми обраболювача прерывания

 

END;кінець програми

 

Рис.1. Фрагмент тестування програми.

 

 

Висновок: Під час виконання лабораторної роботи вивчили систему переривань мікроконтролера PIC16F84, способи формування переривань, використання оброблювачів декількох переривань.

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

“Програмування масивів та запис даних в файл під Win32 API”

Мета заняття:

– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;

– надути практичних навичків складання, налагодження і виконання програм з використанням масивів, написаних мовою асемблеру для програмування розгалужених процесів МП платформи х86 із застосуванням АРІ-функцій під Win32 та введенням-виведенням даних на екран.

 




Дата добавления: 2014-12-18; просмотров: 36 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав