Статических сигналов

Рассмотрим пример, в котором необходимо ввести от 2-х независимых датчиков аналоговые сигналы постоянного тока (U1 и U2), выполнить сравнение их между собой и по результатам сравнения осуществить:

1) в случае, если U1<=U2 управление передается фрагменту программы с адресом А1 и устанавливается в "1" признак (флаг) FO;

2) в случае, если U1>U2 управление передается на фрагмент программы с адресом А2, признак FO устанавливается в "0", формируются дискретные управляющие сигналы изменяющиеся от "0" до "1".

Для решения данной задачи, если нет каких-либо ограничений, более целесообразно использовать МК PIC16C71, так как этот микроконтроллер имеет встроенный 4-х канальный АЦП. Для ввода двух сравниваемых напряжений используются два аналоговых канала (линии AIN0 и AIN1 порта А). Переключение каналов производится с помощью изменения битов CHS0 и CHS1 в регистре ADCON0, который предназначен для управления АЦП.

Структура регистра ADCON (Адрес 08h в памяти данных) следующая:

7 0

ADCS1 ADCS0   CHS1 CHS0 GO/DONE ADIF ADON

 

ADON - Включение АЦП:

· ADON = 0: АЦП не работает и не потребляет тока;

· ADON = 1: АЦП работает и занял линии ввода

/вывода.

ADIF - Флаг прерывания по окончанию преобразования:

· устанавливается аппаратно, когда преобразование закончено;

· сбрасывается программно.

GO:/DONE -Запуск АЦП (начало преобразования):

· устанавливается программно;

· сбрасывается аппаратно, когда преобразование закончено.

CHS1,CHS0 - Выбор аналогового канала:

· CHS1,CHS0 = 00: канал 0 (AIN0);

· 01: канал 1 (AIN1);

· 10: канал 2 (AIN2);

· 11: канал 3 (AIN3).

ADCS1,ADCS0 - Выбор частоты преобразования:.

· ADCS0,ADCS0 = 00: fosc/2;

· 01: fosc/8;

· 10: fosc/32;

· 11: fRC (частота от собственного

RC генератора).

Сформированный сигнал управления выдается через вывод RB1 порта В. Для сравнения двух восьмиразрядных кодов, представляющих собой результаты преобразования сигналов U1 и U2 можно воспользоваться стандартной процедурой СОМР, рассмотренной ранее.

С целью повышения точности и стабильности работы АЦП в данном случае более целесообразно использовать кварцевый ХТ генератор.

На основании исходного задания и предыдущих рассуждений можно предложить функциональную схему и алгоритм рабочей программы МКУ (см. рис. 8.1 и рис. 8.2 соответственно).

 

 
 

 


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

 

Текст программы в соответствии с данным алгоритмом приведен ниже:

 

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

LIST p=16c71, r=HEX

TITLE "Z8"

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

; Описание регистров, битов и переменных

STATUS EQU 03H ; Регистр STATUS

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

ADCON0 EQU 08H ; Регистр управления АЦП

ADRES EQU 09H ; Регистр результата АЦП

; преобразования

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

; ниями

OPTREG EQU 81H ; Регистр OPTION

TRISB EQU 86H ; Регистр конфигурации порта В

ADCON1 EQU 88H ; Регистр конфигурации АЦП

RP0 EQU 5H ; Бит переключения страниц в

; регистре STATUS

C EQU 2H ; Флаг переноса/заема в регистре

; STATUS

 
 

 


 

 

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

 

F0 EQU 0CH ; Просто флаг

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

ORG 0 ; Начальный адрес после сброса

GOTO BEG ; Переход на начало программы

ORG 100 ; Начальный адрес программы

; (следующая команда будет

; расположена по адресу 100H)

BEG

; Инициализация микроконтроллера

BSF STATUS,RP0 ; Включить первую страницу ПД

BCF OPTREG,7 ; Отключить активную нагрузку

; от выводов порта В

BCF TRISB,0 ; Установить бит 0 порта В на

; вывод

CLRF ADCON1 ; Установить входы порта А как

; аналоговые, опорное

; напряжение для АЦП равно Vdd

BCF STATUS,RP0 ; Включить нулевую страницу ПД

MOVLW B '11000000' ; Разрешить прерывания только

MOVWF INTCON ; от АЦП (все остальные прерыва-

; ния запрещены !)

MOVLW 0C1H ; Синхронизация АЦП от

; собственного генератора.

MOVWF ADCON0 ; Разрешить работу АЦП

;

; Ввод и преобразование сигналов U1 и U2

BCF ADCON0,3 ; Установить входной канал AIN0

BSF ADCON0,2 ; Начать процесс преобразования

; сигнала U1

LOOP2 BTFSS ADCON0,2 ; Ждать окончания преобразова-

; ния сигнала U1

GOTO LOOP2

MOVF ADRES,0 ; Результат преобразования

; сигнала U1 записать в W

BCF ADCON0,1 ; Сбросить флаг окончания пре-

; образования ADIFв регистре

; ADCON0

BSF ADCON0,3 ; Установить входной канал AIN1

BSF ADCON0,2 ; Начать процесс преобразования

; сигнала U2

LOOP3 BTFSC ADCON0,2 ; Ждать окончания

; преобразования сигнала U2

GOTO LOOP3

BCF ADCON0,1 ; Сбросить флаг окончания пре-

; образования ADIF в регистре

; ADCON0

; Процедура сравнения U1 и U2

SUBWF ADRES,0 ; U2-U1

BTFSS STATUS, C ; Проверка состояния флага пере-

GOTO A1 ; носа/заема С.Если C=1

; (U1<=U2),то переход на фраг-

; мент программы с адресом А1

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

BCF F0, 0

; Вывод управляющих сигналов

BSF PORTB,0 ; Установить бит 0 порта В

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

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

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

A1 BSF F0, 0

GOTO BEG

A2 GOTO BEG

END