Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
разное / Проектирование ЦИУ (Михайлов, Родионов).doc
Скачиваний:
266
Добавлен:
15.06.2014
Размер:
5.81 Mб
Скачать

10.2. Примеры применения микроконтроллеров piCmicro

10.2.1. Устройство управления четырьмя светодиодами

На рис. 10.2 приведена схема устройства для управления четырьмя светодиодами.

Рис. 10.2. Принципиальная схема устройства управления светодиодами

Ниже приводится текст программы "бегущий огонь" для данной схемы.

; WALKLEDS.ASM

LIST

P=16C84

;

PORTB

EQU

6

TRISB

EQU

86h

OPTREG

EQU

81h

STATUS

EQU

3

CARRY

EQU

0

RP0

EQU

5

MSB

EQU

3

; номер бита для крайнего слева

светодиода

;

CLRF

PORTB

; погасить все светодиоды

BSF

STATUS, RP0

; выбрать регистровый банк 1

CLRF

TRISB^80h

; установить все разряды PORTB

на вывод информации

MOVWF

0Ah

MOVLW

OPTREG^80h

; настроить предварительный

делитель в WDT на (1:4)

BCF

STATUS, RP0

; выбрать регистровый банк 0

INCF

PORTB, F

; включить крайний справа

светодиод

BCF

STATUS, CARRY

; очистить флаг CARRY

LEFT

SLEEP

; подождать тайм-аута WDT

RLF

PORTB, F

; сдвинуть содержимое индикатора

влево

BTFSS

PORTB, MSB

; достигли крайней левой позиции?

GOTO

LEFT

; если нет – цикл

RIGHT

SLEEP

; подождать тайм-аута WDT

RRF

PORTB, F

; сдвинуть содержимое индикатора

вправо

BTFSS

PORTB, 0

; достигли крайней левой позиции?

GOTO

RIGHT

; если нет – цикл

GOTO

LEFT

; начать новый цикл

END

Программа "бегущий огонь" предназначена для использования четырех светодиодов, но можно изменять значение MSB для использования большего количества светодиодов: для количества светодиодов 5, 6, 7 и 8 значения MSB должны быть 4, 5, 6 и 7 соответственно.

10.2.2. Управление жки с помощью последовательного адаптера

Несмотря на широкое применение символьных жидкокристаллических дисплеев (ЖКД), использование ЖКИ по-прежнему остается одним из распространенных способов реализации цифровых отсчетных устройств в измерительной аппаратуре с малым энергопотреблением. Это обусловлено прежде всего тем, что ЖКИ, в отличие от ЖКД, имеют более широкий диапазон рабочих температур и напряжений, а также широкий диапазон габаритов символов.

Управление ЖКИ с помощью микроконтроллеров PIC16C92x, имеющих LCD модуль, не всегда представляется целесообразным.

Для управления ЖКИ можно использовать как последовательные, так и параллельные адаптеры. Управление параллельным адаптером реализуется очень просто, применением команды MOVWF PORTx для записи подготовленных данных в регистр адаптера. Однако использование параллельных адаптеров не всегда является оптимальным (например, если все порты ввода/вывода используются по нескольким назначениям и (или) количество этих портов небольшое).

Применение последовательного адаптера требует наличия у микроконтроллера всего трех свободных (или относительно свободных) линий ввода/вывода.

Фирма Microchip Technology Incorporated производит очень удобный и недорогой последовательный адаптер символьного 32-сегментного ЖКИ AY0438.

На рис. 10.3 приводится функциональная схема управления ЖКИ через адаптер AY0438 микроконтроллерами среднего семейства.

Ниже приводится текст программы, написанной для MPASM, реализующей управление ЖКИ.

; AY0438.ASM

LIST p=16C71, f=inhx8m

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

; Соединение выводов PORTB с адаптером AY0438:

; PORTB.0 CLK (тактовый сигнал для сдвига данных в регистре AY0438)

; PORTB.1 DATA IN (входные данные для регистра сдвига AY0438)

; PORTB.2 LOAD (сигнал окончания загрузки данных в регистр сдвига AY0438)

;

; ЖКИ соединяется с AY0438 следующим образом:

; Старший разряд сегменты с 1-го по 7-й

; Третий разряд сегменты с 9-го по 15-й

; Второй разряд сегменты с 17-го по 23-й

; Младший разряд сегменты с 25-го по 31-й

; Выводы децимальных точек индикатора не присоединены, но могут подключаться

; к выводам адаптера: SEG8, SEG16, SEG24, SEG32.

; Для каждого разряда сегменты подключаются так:

; SEG A SEG(8n + 1)

; SEG B SEG(8n + 2)

; SEG C SEG(8n + 3)

; SEG D SEG(8n + 4)

; SEG E SEG(8n + 5)

; SEG F SEG(8n + 6)

; SEG G SEG(8n + 7)

; где n = 0, 1, 2, 3 для старшего, 3-го, 2-го, младшего разрядов ЖКИ соответственно.

; В программе приняты обозначения регистров:

; MSD, THRDSD, SCNDSD и LSD для определения цифр, выводимых на AY0438.

; В данном примере кнопка, соединенная с PORTB.7, периодически проверяется,

; и, если она нажата, данные, расположенные в регистрах от MSD до LSD,

; выводятся на соответствующие разряды ЖКИ.

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

Рис. 10.3. Функциональная схема управления ЖКИ через адаптер AY0438

#include p16с71.inc

_CONFIG 03FF3 ; RC генератор

;

MSD

EQU

0x20

THRDSD

EQU

0x21

SCNDSD

EQU

0x22

LSD

EQU

0x23

COUNT

EQU

0x24

TEMP

EQU

0x25

PORTB

EQU

0x06

#DEFINE

CLK

PORTB, 0

#DEFINE

DATAIN

PORTB, 1

#DEFINE

LOAD

PORTB, 2

#DEFINE

UPDATELCD

PORTB, 7

W

EQU

0

STATUS

EQU

0x03

C

EQU

0

RP0

EQU

5

OPTION

EQU

0x81

RBPU

EQU

7

PCL

EQU

0x02

PCLATH

EQU

0x0A

;

;

ORG

0

GOTO

START

;

ORG

0x10

;

; Эта таблица кодировки цифр должна быть всегда расположена на стра­нице 0

; для работы данной программы

;

DECODEVALUE

ADDWF

PCL

RETLW

B'00111111'

; код цифры "0"

RETLW

B'00000110'

; код цифры "1"

RETLW

B'01011011'

; код цифры "2"

RETLW

; код цифры "3"

RETLW

; код цифры "4"

RETLW

; код цифры "5"

RETLW

; код цифры "6"

RETLW

; код цифры "7"

RETLW

; код цифры "8"

RETLW

; код цифры "9"

;

START

CLRF

PORTB

BSF

STATUS, RP0

; настроить линии 0, 1, 2

PORTB как выходы

MOVLW

B'11111000'

; сигналы управления адап-

тером установить в "0"

MOVWF

PORTB

BCF

OPTION, RBPU

; разрешить включение

кнопки

BCF

STATUS, RP0

WAIT

BTFSC

UPDATELCD

; кнопка нажата (низкий

уровень)?

GOTO

WAIT

; если нет, то перейти на

метку WAIT

BCF

LOAD

; если да, то установить сиг-

нал LOAD = 0

MOVF

LSD, W

; получить значение цифры

младшего разряда

CLRF

PCLATH

; PCH = 0

CALL

DECODEVALUE

; кодировать данное значение

CALL

SEND8

; последовательный вывод

значений сегментов

MOVF

SCNDSD, W

; получить значение цифры

2-го разряда

CALL

DECODEVALUE

; кодировать данное значение

CALL

SEND8

; последовательный вывод

значений сегментов

MOVF

THRDSD, W

; получить значение цифры

3-го разряда

CALL

DECODEVALUE

; кодировать данное значение

CALL

SEND8

MOVF

MSD, W

; получить значение цифры

старшего разряда

CALL

DECODEVALUE

; кодировать данное значение

CALL

SEND8

; последовательный вывод

значений сегментов

BSF

LOAD

; установить сигнал LOAD = 1

BCF

LOAD

; установить сигнал LOAD = 0

KEYRELEASED

BTFSS

UPDATELCD

; ждать нажатия кнопки

GOTO

KEYRELEASED

GOTO

WAIT

; повторить цикл.

;

; SEND8 посылает 8 битов данных, расположенных в регистре W, на адаптер

;

SEND8

MOVWF

TEMP

; переслать текущее содержимое

регистра W в TEMP

MOVLW

.8

; установка на 8

MOVWF

COUNT

; счетчика битов

SENDLOOP

BCF

DATAIN

; установить DATA IN = 0

RRF

TEMP

; циклический сдвиг значения

вправо через перенос

BTFSC

STATUS, C

; пропустить, если бит равен "0"

BSF

DATAIN

; иначе установить DATA IN = 1

BSF

CLK

; установить CLK = 1

BCF

CLK

; установить CLK = 0

DECFSZ

COUNT

; декрементировать COUNT и

проверить на "0"

GOTO

SENDLOOP

; вывести следующий бит, если

COUNT 0

RETURN

; возврат из процедуры, если

COUNT = 0

;

END

10.2.3. Аналого-цифровое преобразование

Функциональная схема 4-канального 8-разрядного преобразователя напряжение – код (АЦП) приведена на рис. 10.4. Здесь в качестве опорного напряжения используется VDD. Входные напряжения поданы на входы RA0 – RA3. Микроконтроллер PIC16C71 использует внутренний RC генератор.

Рис. 10.4. Функциональная схема 4-канального АЦП

Ниже приводится макет текста программы, написанный для MPASM, реализующий работу 4-канального 8-разрядного АЦП.

; Инициализация АЦП.

; Выбор СН0:СНЗ, внутренний RC генератор.

; Запись результата в 4 регистра, начиная с адреса ADTABLE (10h)

;

; Инициализация

BSF

STATUS, PR0

; Выбор банка 1

MOVLW

B'00000000'

; Выбор RA3:RA0 как

MOVWF

ADCON1

; аналоговых входов

BCF

STATUS, PR0

; Выбор банка 0

MOVLW

B'11000001'

; Выбор канала 0, внутреннего

RC

MOVWF

ADCON0

; генератора, включение АЦП

MOVLW

ADTABLE

; Установка начала таблицы...

MOVWF

FSR

; записи результата

;

NEW_AD

CALL

SAMPLE-DELAY

; Временная пауза

BSF

ADCON0, 2

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

LOOP

BTFSC

ADCON0, 2

; Преобразование завершено?

GOTO

LOOP

; Если нет – цикл

;

MOVF

ADRES, W

; Чтение результата преобра­-

зования

MOVWF

0

; Сохранение результата в

таблице

MOVLW

4

; Выбор следующего канала

ADDWF

ADCON0

;

BCF

ADCON0, CHS2

; Защита от переполнения

; Вычисление позиции записи результата в таблицу

CLRF

TEMP

; Очистка регистра temp

BTFSC

ADCON0, CHS0

; Проверка установки бита CHS0

BSF

TEMP, 0

; Если текущий канал СН1, СНЗ

BTFSC

ADCON0, CHS1

; Проверка установки бита CHS0

BSF

TEMP, 1

; Если текущий канал СНО, СН2

MOVLW

ADTABLE

; Запись нового значения

ADDWF

TEMP, W

; позиции таблицы в регистр

MOVWF

FSR

; указатель косвенной адресации

GOTO

NEW_AD