Кафедра ”Промышленная электроника”
Лабораторная работа №2
По предмету “МПТ”
Разработка и исследование управляющих программ
для микроконтроллеров PIC16F84.
Выполнил студент гр. ПС-42:
Принял преподаватель:
Дата выполнения:________________
Дата защиты:____________________
Гомель 2009
Цель работы: Изучить методику разработки управляющих программ для микроконтроллера PIC16F84 с помощью интегрированной среды MPLAB IDE. Практически исследовать разработанные программы на лабораторном стенде.
Принципиальная схема макета для исследования работы микроконтроллера PIC16F84 приведена на рис. 1.
Рис. 1. Принципиальная схема лабораторного макета
Текст базовой программы, которая будет использоваться в данной лабораторной работе, имеет следующий вид.
list p=16f84 ; директива, определяющая тип МК и систему
; счисления по умолчанию
#include<p16f84.inc> ; директива включения файла имен
; для PIC16F84
; описание используемых констант и переменных
INITA equ b’00011100’ ; константа для настройки порта А
INITB equ b’00000001’ ; константа для настройки порта В
TEMPA equ 0x10 ; регистр хранения состояния порта А
TEMPB equ 0x11 ; регистр хранения состояния порта В
COUNT1 equ 0x12 ; регистр-счетчик циклов
COUNT2 equ 0x13 ; регистр-счетчик циклов
COUNT3 equ 0x14 ; регистр-счетчик циклов
; исполняемая программа
org 0x000 ; начальный адрес при сбросе МК
goto begin ; переход на начало программы
org 0x005 ; начальный адрес размещения программы
begin call init ; вызов подпрограммы инициализации
; портов МК
;**************************************************************
; программа пользователя (основная программа)
;
;**************************************************************
#include “init.asm” ; директива включения готового
; ассемблерного файла
end ; конец текста программы
Подпрограмма инициализации портов PIC16F84:
init
movlw 0xff ; установка линий портов А и В
movwf PORTA ; в единичное состояние
movwf PORTB
bsf STATUS, RP0 ; переход в банк 1
movlw INITA ; настройка линий RA0 и RA1 порта А
movwf TRISA ; на вывод, остальных – на ввод
movlw INITB ; настройка линии RB0 порта В
movwf TRISB ; на ввод, остальных – на вывод
bcf STATUS, RP0 ; возврат в банк 0
return ; возврат из подпрограммы
Задание 1.
Необходимо написать программу, которая считывает состояние кнопки SB1 и выводит его на светодиод VD1 так, что при не нажатой кнопке (высокий уровень сигнала на входе RA4) светодиод горит (на выходе RA0 высокий уровень), и наоборот, при нажатой кнопке (низкий уровень на RA4) светодиод не горит (на выходе RA0 низкий уровень).
loop
call get_RA ; вызов подпрограммы GET_RA
call SB1_VD1 ; вызов подпрограммы SB1_VD1
goto loop ; переход на метку loop для повторения
; процесса
get_RA ; подпрограмма чтения состояния порта А
movf PORTA,W ; пересылка состояния порта А в регистр W
movwf TEMPA ; пересылка содержимого регистра W в TEMPA
return ; возврат из подпрограммы
SB1_VD1 ; подпрограмма вывода на светодиод VD1
; состояния кнопки SB1
BTFSS TEMPA,4 ; пропустить команду, если TEMPA,4 = 1
; (кнопка не нажата)
goto met0 ; перейти на метку met0
BSF PORTA,1 ; зажечь светодиод VD1
met0
BTFSC TEMPA,4 ; пропустить команду, если TEMPA,4 = 0
; (кнопка нажата)
goto met1 ; перейти на метку met1
BCF PORTA,1 ; погасить светодиод VD1
met1
return ; возврат из подпрограммы
Задание 2.
Необходимо разработать программу, выполняющую зажигание светодиода VD1 только при следующем состоянии переключателей и кнопок лабораторного макета: SA1 = 1, SA2 = 1, SB1 = 1 и SB2 = 0.
loop
call get_RA ; вызов подпрограммы get_RA
call get_RB ; вызов подпрограммы get_RB
call zag_1110 ; вызов подпрограммы zag_1110
goto loop ; переход на метку loop для повторения
; процесса
get_RA ; подпрограмма чтения состояния порта А
movf PORTA,W ; Пересылка состояния порта A в регистр W
movwf TEMPA ; Пересылка содержимого W в регистр TEMPA
return
get_RB ; подпрограмма чтения состояния порта В
movf PORTB,W ; пересылка состояния порта В в регистр W
movwf TEMPB ; пересылка содержимого W в регистр TEMPB
return
zag_1110 ; подпрограмма зажигания светодиода VD1 при
; SA1 = SA2 = SB1 = 1 и SB2 = 0
BTFSS TEMPA,2 ; пропустить команду, если TEMPA,2 = 1
goto met0
BTFSS TEMPA,3 ; пропустить команду, если TEMPA,3 = 1
goto met0
BTFSS TEMPA,4 ; пропустить команду, если TEMPA,4 = 1
goto met0
BTFSC TEMPB,4 ; пропустить команду, если TEMPB,0 = 0
goto met0
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.