Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦиМПУ, Генератор сигналов специальной формы контрольная номер 1..docx
Скачиваний:
52
Добавлен:
01.04.2014
Размер:
123.02 Кб
Скачать

Разработка управляющей программы

Программа (с подробными комментариями) управления PIC-контроллером, написанная на ассемблере и проверенная в интегрированной среде MPLAB приведена ниже:

;--------------------------------- "ШАПКА" ПРОГРАММЫ ----------------------------------------

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

; Файл текста программы: generic.asm

; Программа разработана для генератора специальных сигналов(1Гц)

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

; Автор: Сергеенко Артём Константинович БГУИР гр.700102(2010)

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

; Используется микроконтроллер PIC16F84A. Частота кварца 4кГц.

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

; Объем программы: 46 слов в памяти программ.

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

;=============================================================================================

; В "шапке" программы используются директивы: LIST, __CONFIG, equ, org.

;=============================================================================================

LIST p=16F84A ; Назначение типа ПИКа: PIC16F84A.

__CONFIG 03FF5H ; Установка битов конфигурации: стандартный XT-генератор,

; WDT включен, бит защиты не установлен, PWRT

; включен (1111 0101).

;=============================================================================================

; Определение адресов регистров специального назначения.

;=============================================================================================

OptionR equ 01h ; Регистр Option - банк1

Status equ 03h ; Регистр Status

PortA equ 05h ; Порт А

TrisA equ 05h ; Регистр Tris A - банк1

PortB equ 06h ; Порт B

TrisB equ 06h ; Регистр Tris B - Банк1

IntCon equ 0Bh ; Регистр IntCon

;=============================================================================================

; Определение названия и адресов регистров общего назначения.

;=============================================================================================

Sec equ 0Ch ; Счетчик времени полупериода.

SecL equ 0Eh ; Байт таймера.

;=============================================================================================

; Присвоение буквенного обозначения операции направления результата выполнения команды в

; регистр, с содержимым которого производится действие (для удобства восприятия текста

; программы).

;=============================================================================================

F equ 1 ; Результат направить в регистр, с содержимым которого

; производится действие.

;=============================================================================================

; Присвоение биту выбора банка регистра STATUS (пятому) его стандартного названия

; для удобства восприятия текста программы).

;=============================================================================================

RP0 equ 5 ; Присвоение 5-му биту регистра STATUS названия RP0.

;=============================================================================================

; Определение точки входа в программу.

;=============================================================================================

org 0 ; Установка нулевого адреса в счетчике команд PC.

goto START ; Безусловный переход на подпрограмму START.

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

;------------------------------- РАБОЧАЯ ЧАСТЬ ПРОГРАММЫ -----------------------------------

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

; Подготовительные операции.

;---------------------------------------------------------------------------------------------

START clrf IntCon ; Сброс в ноль всех битов регистра IntCon.

clrwdt ; Установка начала отсчета сторожевого таймера WDT.

bsf Status,RP0 ; Установка 5-го бита регистра Status в единицу.

movlw .7 ; Запись в регистр W константы .7

movwf TrisA ; Установка 0, 1 и 2-го битов регистра TrisА

; в единицу, а остальных - в ноль.

movlw .0 ; Запись в регистр W константы .0

movwf TrisB ; Установка всех битов регистра TrisB

; в ноль.

movlw .143 ; Запись в регистр W константы .143

movwf OptionR ; Установка 4,5,6-го битов регистра OptionR

; в ноль, а остальных - в единицу.

bcf Status,RP0 ; Установка 5-го бита регистра Status в ноль.

;--------------------------------------------------------------------------------------------

; Проверка наличия включения кнопок.

;--------------------------------------------------------------------------------------------

btfsc PortA,0 ; Если нулевой бит регистра PortA равен 1, то выполняется

goto Five ; следующая команда (goto Five), а если равен 0, то сле-

; дующая команда не выполняется (вместо нее - nop) и

; следующей активной командой будет btfsc PortA,1

btfsc PortA,1 ; Если первый бит регистра PortA равен 1, то выполняется

goto Sex ; следующая команда (goto Sex), а если равен 0, то сле-

; дующая команда не выполняется (вместо нее - nop) и

; следующей активной командой будет btfsc PortA,2

btfsc PortA,2 ; Если второй бит регистра PortA равен 1, то выполняется

goto Seven ; следующая команда (goto Seven), а если равен 0, то сле-

; дующая команда не выполняется (вместо нее - nop) и

; следующей активной командой будет goto START

goto START ; Безусловный переход на подпрограмму START.

;--------------------------------------------------------------------------------------------

; Запись констант времени работы таймера.

;--------------------------------------------------------------------------------------------

Five movlw .6 ; Запись в регистр W константы .6

movwf SecL ; Копирование константы .6 из регистра W в регистр SecL.

goto PRD ; Безусловный переход на подпрограмму PRD.

;--------------------------------------------------------------------------------------------

Sex movlw .7 ; Запись в регистр W константы .7

movwf SecL ; Копирование константы .7 из регистра W в регистр SecL.

goto PRD ; Безусловный переход на подпрограмму PRD.

;--------------------------------------------------------------------------------------------

Seven movlw .8 ; Запись в регистр W константы .8

movwf SecL ; Копирование константы .8 из регистра W в регистр SecL.

goto PRD ; Безусловный переход на подпрограмму PRD.

;--------------------------------------------------------------------------------------------

; Формирование импульса(положительный).

;--------------------------------------------------------------------------------------------

CYCLE bsf PortA,3 ; Установить 0-й бит регистра PortB в 1.

incf PortB,F

nop

movlw .124 ; Запись в регистр W константы .124

movwf Sec ; Копирование константы .124 из регистра W в регистр Sec.

PAUSE_1 clrwdt ; Установка начала отсчета сторожевого таймера WDT.

decfsz Sec,F ; Декремент (-1) содержимого регистра Sec с сохранением

; результата декремента в нем же.

; Если этот результат не=0, то выполняется следующая коман-

; да (goto PAUSE_1), а если =0, то следующая команда не

; выполняется (вместо нее - nop) и следующей активной

; командой будет bsf PortB,0

goto PAUSE_1 ; Безусловный переход на подпрограмму PAUSE_1.

;--------------------------------------------------------------------------------------------

; Формирование импульса(отрицательный).

;--------------------------------------------------------------------------------------------

bcf PortA,3 ; То же самое, что и при формировании

nop ; отрицательного полупериода, только

nop ; 0-й бит регистра PortB

nop ; устанавливается в 0.

movlw .123 ; То же самое, что и при формировании отрицательного полу-

movwf Sec ; периода, только в регистр Sec записывается константа .123

PAUSE_2 clrwdt ; Установка начала отсчета сторожевого таймера WDT.

decfsz Sec,F ; То же самое, что и при формировании отрицательного полу-

goto PAUSE_2 ; периода, только безусловный переход осуществляется

; на подпрограмму PAUSE_2.

;--------------------------------------------------------------------------------------------

; "Очистка" (декремент) таймера.

;--------------------------------------------------------------------------------------------

PRD decfsz SecL,F ; Декремент (-1) содержимого регистра SecL с сохранением

goto CYCLE ; результата в нем же.

; Если этот результат не=0, то выполняется следующая коман-

; да (goto CYCLE), а если =0, то следующая команда не

; выполняется (вместо нее - nop) и следующей активной

; командой будет decfsz SecH,F

bsf PortA,4 ; Установить 3-й бит регистра PortA в 1.

bcf PortA,4 ; Установить 3-й бит регистра PortA в 0.

goto START ; Безусловный переход на подпрограмму START

;============================================================================================

end ; Директива конца текста программы.