Разработка и исследование управляющих программ для микроконтроллеров PIC16F84. Принципиальная схема лабораторного макета

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ

РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ  ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ  УНИВЕРСИТЕТ

имени П.О.Cухого.

Кафедра ”Промышленная электроника”

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

Похожие материалы

Информация о работе