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

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

У вікні MPLAB ICD мають бути обрані такі пункти: COM1, 19200, Minimum, 2MHz-10MHz.

  1. Ввести на асемблері текст програми.

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

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

; Лабораторна робота № 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

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

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

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

  4. Виконайте програму, натиснувши клавішу F9 або кнопку зеленого світлофора. На індикаторі мають відображуватись числа, що залежать від номера вашої бригади. Запишіть їх.

  5. Змініть програму, щоб швидкість їх виведення збільшилась удвічі.

ЗМІСТ ЗВІТУ

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

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

        1. Які недоліки має симулятор MPLAB?

        2. Які основні можливості налагоджувача ?

        3. Які переваги і недоліки підключення семисегментних індикаторів до мікроконтролерів за допомогою регістрів зсуву ?

        4. Які основні етапи перетворення двійкового числа на семисегментний код відповідних десяткових цифр ?

        5. Що потрібно змінити у дослідженій програмі, щоб числа на індикаторі з'являлись вдвічі швидче, щоб числа змінювались з вдвічі більшим кроком ?

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

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