Примеры применения микроконтроллеров PICmicro

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

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

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

 

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

; WALKLEDS.ASM  
  LIST P=16C84    
;        
PORTB EQU      
TRISB EQU 86h    
OPTREG EQU 81h    
STATUS EQU      
CARRY EQU      
RP0 EQU      
MSB EQU   ; номер бита для крайнего слева  
светодиода  
      ;  
  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  
STATUS EQU 0x03
C EQU  
RP0 EQU  
OPTION EQU 0x81
RBPU EQU  
PCL EQU 0x02
PCLATH EQU 0x0A
;    
;    
  ORG  
  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   ; Сохранение результата в
      таблице
  MOVLW   ; Выбор следующего канала
  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  

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: