- •Література
- •Інформаційні ресурси
- •Використання mplab для складання та налагодження програм мікроконтролера
- •Теоретичні відомості
- •Порядок виконання лабораторної роботи
- •Лабораторна робота № 21 Дії з портами мікроконтролера, логічні операції та обробка окремих бітів
- •Теоретичні відомості
- •21.1. Аналіз роботи програми
- •Лабораторна робота № 22 Створення програмної затримки часу за допомогою циклів
- •Теоретичні відомості
- •22.1. Результати аналізу програми
- •Лабораторна робота № 23 Створення затримки часу за допомогою переривань від таймера
- •23.2. Варіанти задання коефіцієнтів ділення переддільника
- •23.2. Алгоритм управління світлодіодами з затримкою від таймера tmr0
- •23.3. Результати аналізу програми
- •Використання енергонезалежної пам'яті даних
- •У регістрі eecon1 розміщені такі біти керування:
- •24.1. Блок-схема алгоритму обміну з eeprom
- •Використання клавіатури з мікроконтролером
- •Теоретичні відомості
- •25.1. Таблиця результатів тестування
- •Виведення цифрової інформації на семисегментні індикатори
- •Основи використання mplab-icd пояснено далі в ході роботи.
- •Закрити вікно icd Options ().
- •Дослідження мікроконтролерного модуля аналого-цифрового перетворювача
- •Закрити вікно icd Options().
- •27.1. Результати вимірів і обчислень
- •Мікроконтролерне дослідження дренькоту контактів
- •Результати вимірів кількості замикань контактів
Закрити вікно icd Options ().
У вікні MPLAB ICD мають бути обрані такі пункти: COM1, 19200, Minimum, 2MHz-10MHz.
Ввести на асемблері текст програми.
Текст програми:
;*********************************************************
; Лабораторна робота № 26
;Індикація цифр на семисегментних індикаторах демоплати
;*********************************************************
list p=16f877 ; директива задає тип процесора
#include <p16f877.inc> ;включення файла стандартних імен
Br equ БР ;тут замість БР вставити номер своєї бригади
CBLOCK 20H ;директива задає блок регістрів
T_C ; буфер даних для відображення
_N ; Змінна для установки затримок
LOOP3 ; Змінні
LOOP2 ; для
LOOP1 ; підпрограм
LOOP0 ; затримок
LSD ; Молодша цифра числа
MSD ; Старша цифра числа
L7 ;7-сегментний код молодшої цифри
M7 ;7-сегментний код старшої цифри
ENDC
;******************************************************
; Основна програма
;******************************************************
ORG 000H
nop
goto main
org 4
goto int
main:
clrf PORTA ; Обнулити порт А
bsf PORTA,2 ;відмінити скидання регістрів зсуву
clrf PORTC
bsf STATUS,RP0 ; банк пам'яті 1
movlw b'11111011'; Встановити порт А на введення,
movwf TRISA ; лише біт 2 на вивод
movlw b'11010101' ; Встановити RC5, RC3, RC1 на
movwf TRISC ;виведення, інші- на введення
bcf STATUS,RP0 ; Вертання на сторінку 0 пам'яті
main_0: movlw d'100'
MOVWF T_C
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
main_1: ;тут складіть фрагмент, що від вмісту комірки Т_С
;віднімає номер вашої бригади. Результат в Т_С
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
btfss STATUS,C ;якщо > 0, пропустити
goto main_0 ;інакше, - знову почати з більшого числа
call BINBCD ; перетворення BIN=(Т_С) у BCD=(MSD, LSD)
call BCD_7 ;перетв. BCD-коду у код індикаторів
disp: CALL DISPLAY ; Результат - на індикацію
;-----------------------------------------------
movlw 4 ;затримка на 1 с
movwf LOOP3 ;
call DELAY ; затримка 250 мс
decfsz LOOP3,f ;
goto main_1 ;повторити для наступного числа
;-----------------------------------------------
;п/п зсуву регістрів M7, L7 молодшими розрядами
;в 2 регістри зсуву
DISPLAY:
movlw d'16' ;лічильник в _N
movwf _N
NastBit: rrf M7,f ;зсув вправо пари регістрів M7, L7
rrf L7,f
bcf PORTC,5 ;
btfsc STATUS,C ;якщо висунутий біт=0, RC5=0,
bsf PORTC,5 ; інакше - RC5=1
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;тут складіть фрагмент, що формує
;тактовий імпульс у біті 3 порта С
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
decfsz _N,f ;лічильник - 1, і пропустити, якщо 0
goto NastBit ;зсув повторюється 16 разів
return
;---------------------------------------
DELAY:
MOVLW .250 ; Затримка 250 мс
MOVWF LOOP1
DELAY_N_MS:
OUTTER:
MOVLW .102 ; Затримка 1 мс
MOVWF LOOP2
INNER:
movlw d'15'
movwf LOOP0
ININNER:
DECFSZ LOOP0,F
goto ININNER
DECFSZ LOOP2, F
GOTO INNER
DECFSZ LOOP1, F
GOTO OUTTER
RETURN
;********************************************
; Стандартні процедури роботи з дисплеєм
;********************************************
; коментар до цієї підпрограми написати самостійно
BINBCD:
CLRF MSD
MOVF T_C,w
MOVWF LSD
GTENTH:
movlw d'10'
subwf LSD,W
btfss STATUS,C
retlw 0
movwf LSD
incf MSD,F
goto GTENTH
;------------------------------------
;п/п перетворення BCD (MSD, LSD)
;в 7-сегментні коди двох цифр (M7, L7)
BCD_7: movf MSD,W
call tab7s ;п/п перетв. цифри (W) в 7-сегментний код
movwf M7 ;7-сегм. код старшої цифри – в M7
movf LSD,W
call tab7s
movwf L7 ;7-сегм. код молодшої цифри – в L7
return
;------------------------------------
tab7s: addwf PCL,f ;п/п перетвор. цифри (W)=0..9
; у 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
;*************************************************
int: retfie
END
Виконати компіляцію програми (Project – Make Project або кнопка у вигляді зеленої лійки). Після цього на екрані з'являється вікно результатів компіляції (Build Results).
Якщо з'явилось повідомлення про помилки (error), слід, ознайомившись з поясненням змісту помилки, натиснути мишкою на цей рядок вікна Build Results. MPLAB зробить активним той рядок у тексті програми, де, ймовірно, зроблено помилку. Слід виправити її і далі так само й інші помилки. Потім повернутись до п. 8, 9, поки не буде видано повідомлення "Build completed successfully" (компіляцію завершено успішно). При цьому створюється файл з тим же ім'ям і розширенням .hex. Може також з'явитись віконце нагадування про те, що після змін у програмі потрібно виконати програмування мікроконтролера за допомогою налагоджувача.
Закрийте це вікно і вікно Build Results. Виконайте програмування мікроконтролера, натиснувши у вікні MPLAB ICD кнопку Program.
Виконайте програму, натиснувши клавішу F9 або кнопку зеленого світлофора. На індикаторі мають відображуватись числа, що залежать від номера вашої бригади. Запишіть їх.
Змініть програму, щоб швидкість їх виведення збільшилась удвічі.
ЗМІСТ ЗВІТУ
Звіт має містити: назву та мету лабораторної роботи, скорочений порядок виконання лабораторної роботи, функціональну схему виведення інформації на індикатори, програму з коментарем, числові значення, відображувані на індикаторах.
КОНТРОЛЬНІ ЗАПИТАННЯ
Які недоліки має симулятор MPLAB?
Які основні можливості налагоджувача ?
Які переваги і недоліки підключення семисегментних індикаторів до мікроконтролерів за допомогою регістрів зсуву ?
Які основні етапи перетворення двійкового числа на семисегментний код відповідних десяткових цифр ?
Що потрібно змінити у дослідженій програмі, щоб числа на індикаторі з'являлись вдвічі швидче, щоб числа змінювались з вдвічі більшим кроком ?
Лабораторна робота № 27