Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Электроника в приборостроении.doc
Скачиваний:
219
Добавлен:
02.05.2014
Размер:
8.49 Mб
Скачать

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

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

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

Рис. 11.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 на вывод информации

MOVLW 0Ah

MOVWF 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 соответственно.

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

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

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

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

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

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

На рис. 11.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,

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

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

Рис. 11.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 B'01001111' ; код цифры "3"

RETLW B'01100110' ; код цифры "4"

RETLW B'01101101' ; код цифры "5"

RETLW B'01111101' ; код цифры "6"

RETLW B'00000111' ; код цифры "7"

RETLW B'01111111' ; код цифры "8"

RETLW B'01101111' ; код цифры "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