Ввод информации с группы взаимосвязанных двоичных датчиков

7.2.1. Ввод байта состояния одного датчика

 

Пусть, например, необходимо ввести байт состояния датчика дискретных сигналов (Di), сравнить его с уставкой, хранящейся в виде константы Ki в памяти данных, и по результатам сравнения осуществить:

1) Ввод следующего байта состояния датчика, если Di = Ki ;

2) Формирование и вывод управляющих сигналов в случае, если

Di > Ki или Di < Ki (сформировать и вывести положительный импульс заданной длительности).

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

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

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

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

4) Проанализировать его (сравнить полученный байт с константой, используя, например, флаг переноса/заема «С» в регистре STATUS);

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

6) Сформировать сигнал заданной длительности при помощи временного интервала, равного времени задержки. Для этого можно использовать:

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

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

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

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

7) Организовать ввод следующего байта.

На основании предыдущих рассуждений можно предложить вариант блок-схемы алгоритма рабочей программы микроконтроллера (рис. 7.5).

На рис. 7.6 приведена БСА подпрограммы сравнения двух восьмиразрядных кодов (СОМР), один из которых представляет собой байт состояния датчика (Di), а другой - константу (Ki), хранящуюся в одном из регистров памяти данных.

На основании блок-схем алгоритмов и распределения памяти данных можно предложить текст программы, который приведен ниже:

 

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

LIST p=16C84, r =HEX

Title ‘Z2’

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

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

TRISA EQU 85H

TRISB EQU 86H

INTCON EQU 0BH

STATUS EQU 03H

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

           
 
   
 
   
Рис. 7.6. Алгоритм процедуры сравнения COMP.
 

 


Рис. 7.5. Общий алгоритм программы.

 

PORTA EQU 05H ; Регистр ввода/вывода порта А

PORTB EQU 06H ; Регистр ввода/вывода порта В

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

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

; задержки (DELAY)

CONST EQU 0EH ; Регистр хранения константы Ki

;

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

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

ORG 0

GOTO INMK

ORG 100H

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

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

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

; INTCON

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

; портом В

MOVLW B’1111 1111’ ; Переслать константу в W

TRIS 6

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

; портом A

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

TRIS 5

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

; порта А

; Опрос состояния датчика и процедура сравнения (COMP)

LESS MOVF PORTB, 1

SUBWF CONST, 1

ADDLW B’11111111’

; Проверка состояния флага

; переноса/заема С

BTFSC STATUS, 0

GOTO LESS

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

BSF PORTA, 0

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

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

MOVWF CTD

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

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

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

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

GOTO M1

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

BCF PORTA,0

GOTO LESS

END

 

 

7.2.2. Ввод байтов состояния двух независимых датчиков

 

Пусть, например, необходимо ввести одновременно через порты ввода/вывода байты состояния 2х независимых датчиков дискретных сигналов, выполнить сравнение введенных байт между собой, и по результатам сравнения осуществить:

1) В случае , если D1 <= D2 управление передаётся фрагменту програмы с адресом А1 и устанавливается в ²1² признак (флаг) F0;

2) В случае, если D1 > D2 признак F0 устанавливается в ²0², в соответствии с вариантом задания формируются управляющие сигналы, а управление передаётся на фрагмент программы с адресом А2 .

1) Выбрать микроконтроллер, имеющий не менее 17-ти линий ввода/вывода дискретных сигналов (например, PIC 16C55);

2) Выбрать линии (разряды) портов А, В и С для ввода сигналов от датчиков и вывода импульсных сигналов (например, RB0 ... RB7 - для ввода сигналов от датчика D1, RC0 ... RC7 - для ввода сигналов от датчика D2 и RA0 - для вывода импульсных сигналов управления заданной длительности);

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

4) Сравнить полученные байты состояния между собой;

5) Организовать процедуру передачи управления на две подпрограм-

мы в зависимости от результатов сравнения;

6) Сформировать сигнал заданной длительности при помощи временного интервала, равного времени задержки. Для этого можно использовать:

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

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

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

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

7) Организовать ввод следующего байта.

На основании предыдущих рассуждений можно предложить вариант блок-схемы алгоритма рабочей программы микроконтроллера. Этот алгоритм приведен на рис. 7.7. На рис. 7.8 приведена БСА подпрограммы сравнения двух байт состояния независимых датчиков D1 и D2 между собой (СОМР1).

 

 
 

 


 

 

           
   
 
   
Рис. 7.8. Алгоритм процедуры сравнения COMP1  
 
 
Рис. 7.7.Общий алгоритм программы

 

 


На основании блок-схем алгоритмов и распределения памяти данных можно предложить текст программы, который приведен ниже:

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

LIST p=16C55, r =HEX

Title ‘Z3’

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

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

TRISA EQU 85H

TRISA EQU 86H

INTCON EQU 0BH

STATUS EQU 03H

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

PORTA EQU 05H

PORTB EQU 06H

PORTC EQU 07H

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

F0 EQU 0DH

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

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

ORG 0

GOTO INP

ORG 100H

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

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

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

; INTCON

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

; портом

MOVLW B’ 1111 1111’ ; Переслать команду в регистр W

TRIS 6

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

; портом А

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

TRIS 5

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

; портом С

MOVLW B’ 1111 1111 ’ ; Переслать команду в регистр W

TRIS 7

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

; порта А

; Опрос состояния датчиков и процедура сравнения (COMP1)

LESS MOVF PORTB, 0

SUBWF PORTC, 1

; Проверка состояния флага

; переноса/заема C

BTFSC STATUS, 0 ; Если С=1 (D1<=D2),то переход

GOTO A1 ; на фрагмент программы с

; адресом A1

; Установка флага F0 в 0

BCF F0, 0

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

BSF PORTA, 0 ; Выставить"1" в порт А

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

NOP

BCF PORTA, 0 ; Выставить "0" в порт А

GOTO A2 ; Переход на фрагмент

; программы с адресом А2

; Установка флага F0 в 1

A1 BSF F0, 0

GOTO LESS

A2 GOTO LESS

END