Импульсов заданной длительности.

 

Пусть, например, необходимо с помощью микроконтроллера PIC16F84 осуществить опрос двоичного датчика и, в зависимости от его состояния, либо организовать процедуру «ожидания события», либо сформировать и выдать управляющий сигнал в виде положительного импульса заданной длительности.

Для решения данной задачи необходимо:

1) Выбрать линии (разряды) портов А и В для ввода сигналов от датчика и вывода импульсных сигналов (например, RB0 - на ввод, а RA0 - на вывод);

2) Запретить все прерывания;

3) Осуществить опрос состояния датчика;

4) Проанализировать его (например, проверив бит, сигнализирующий о состоянии датчика, то есть определить произошло в текущем цикле опроса событие в объекте управления или нет – был ли зафиксирован очередной переход из "0" в "1");

5) Организовать процедуру передачи управления на две подпрограммы в зависимости от уровня сигнала, полученного от датчика;

6) Сформировать положительный импульсный сигнал (IMPULS) заданной длительности в случае если, например, состояние датчика равно "1" (D=1). Для организации зфдержки (DELAY) можно использовать:

· одну или несколько холостых команд NOP;

· программный счетчик, работающий, например, в декрементном режиме. При этом в счетчик заносится константа, счетчик декрементируется. Обнуление счетчика является сигналом окончания временного интервала;

· внутренний таймер-счетчик (TMRO);

· внешний (дополнительный) таймер-счетчик в случае, если TMRO по какой-либо причине использовать невозможно;

7) Организовать процедуру «ожидания события», которая заключается в непрерывном опросе датчика и анализе его состояния.

На основании предыдущих рассуждений можно предложить вариант функциональной схемы и блок схемы алгоритма (БСА) рабочей программы микроконтроллерного устройства (МКУ). Функциональная схема и БСА рабочей программы МКУ приведены соответственно на рис. 7.1 и рис. 7.2. На рис 7.3 и рис. 7.4 приведены БСА подпрограмм, входящих в общий алгоритм рабочей программы. Данные подпрограммы вполне могут считаться стандартными, так как они используются достаточно часто при реализации различных функций управления и обработки данных в МКУ.

 

 


Рис. 7.1. Функциональная схема устройства

       
   
 
 

 

 


Рис. 7.3. Алгоритм подпрограммы

IMPLUS

 

 
 

 

 


Рис. 7.2. Общий алгоритм

программы

 

Рис. 7.4. Алгоритм подпрограммы

DELAY (Вариант 2)

Прежде чем приступить к написанию исходного текста рабочей програмы необходимо окончательно определить все ресурсы микроконтроллера и переменные, которые понадобятся для решения поставленной задачи, а также осуществить распределение памяти данных (ПД). То есть, закрепить за указанными ресурсами и переменными определенные адреса в адресном пространстве ПД. Это распределение ПД отражается в секции заголовка рабочей программы микроконтроллера.

На основании блок-схем алгоритмов и распределения памяти данных можно приступить к написанию исходного текста рабочей программы. Вариант текста программы, которая позволяет реализовать все функции, заложенные в исходном техническом задании, приведен ниже:

 

; Текст программы

LIST p=16C84, r =HEX

Title ‘Z1’

; Секция заголовка

; Описание специальных регистров

TRISA EQU 85H ; Регистр управления портом А

TRISB EQU 86H ; Регистр управления портом B

INTCON EQU 0BH ; Регистр управления прерыва-

; ниями

; Описание регистров ввода/вывода

PORTA EQU 05H

PORTB EQU 06H

; Описание ячеек ОЗУ

CTD EQU 0DH ; Счетчик цикла в подпрограмме

; DELAY

; Рабочая секция

; Точка входа в программу после RESET

ORG 0

GOTO INMK

ORG 100H

; Процедура инициализации МК

; Запрет прерываний

INMK BCF INTCON, 7 ; Сброс 7-го бита в регистре

; INTCON.

; Загрузка регистра управления

; портом В

MOVLW B’1111 1111’ ; Переслать константу в регистр TRIS 6 ; W и назначить все линии порта

; В на ввод.

; Загрузка регистра управления

; портом A

MOVLW B’0000 0000’ ; Переслать константу в регистр

TRIS 5 ; W и назначить все линии порта

; А на вывод

BCF PORTA, 0 ; Сброс 0-го бита в регистре

; порта А

; Опрос состояния датчика и процедура "ожидания события"

M1 BTFSS PORTB, 0 ; Анализ 0-го бита в регистре

; порта В. Если датчик равен ²1²,

; то пропустить следующую

; команду, иначе-ждать

GOTO М1

; Выдача импульса заданной длительности (IMPULS)

BSF PORTA, 0

; Задержка (DELAY)

MOVLW B’0000 1111’ ; Загрузка счетчика задержки

MOVWF CTD

; Цикл задержки

M2 DECFSZ CTD ; Декремент CTD, пропустить

; команду, если 0 (если регистр

; CTD обнулился)

GOTO M2

; Прекратить выдачу сигнала

BCF PORTA, 0

GOTO M1