Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
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.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).
|
На основании блок-схем алгоритмов и распределения памяти данных можно предложить текст программы, который приведен ниже:
; Текст программы:
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
Дата публикования: 2014-11-03; Прочитано: 435 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!