Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1. ЦЕЛЬ
Приобрести навык составления функциональной схемы. Выучить способы формирования сигналов управления и индикации, научиться формировать звуковые и световые сигналы на примере микроконтроллера PIC16F84A, рассмотреть использование динамической индикации.
3. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
3.1. На заданном выводе микроконтроллера сформировать сигнал с заданной частотой и скважностью Q = 2 при нажатой кнопке.
3.1.1. Разработать функциональную схему микроконтролерного устройству с выводом сигнала на звуковой излучатель.
3.1.2. Разработать и наладить управляющую программу.
3.2. На заданном выводе микроконтроллера сформировать сигнал с заданной частотой и скважнистю Q = 2 при отжатой кнопке.
3.2.1. Разработать функциональную схему микроконтролерного устройству с выводом сигнала на дискретный свитлодиодний индикатор.
3.2.2. Разработать и наладить управляющую программу.
3.3. На девятиразрядном семисегментном свитлодиодному индикаторе с помощью динамической индикации с заданной частотой возобновления всех разрядов индикатора, отобразить группу и свои инициалы.
3.3.1. Разработать функциональную схему микроконтролерного устройству.
3.3.2. Разработать и наладить управляющую программу.
Для заданий 3.1 и 3.2 позволяется разработать общую функциональную схему и управляющую программу. Выводы микроконтроллера для подключения кнопок выбрать самостоятельно.
Тактування микроконтроллера выполнить от тактового генератора с частотой Fosc = 4 МГц.
4. ВАРИАНТЫ ЗАДАНИЙ
4.1. Варианты задания 3.1.
Вывод | RA0 | RA1 | RA2 | RA3 | RB0 | RB1 | RB2 | RB3 | RB4 | RB5 | RB6 | RB7 | RA0 | RA1 | RA2 |
Частота, Гц |
4.2. Варианты задания 3.2.
Вывод | RB0 | RB1 | RB2 | RB3 | RB4 | RB5 | RB6 | RB7 | RA0 | RA1 | RA2 | RA3 | RB0 | RB1 | RB2 |
Частота, Гц | 0,2 | 0,4 | 0,6 | 0,8 | 1,5 | 2,5 | 0,3 | 0,5 | 0,7 | 0,9 | 1,2 | 1,7 |
4.3. Варианты задания 3.3.
Частота, Гц |
Пример. Формирование символов на семисегментном индикаторе
Соответствие сегментов индикатора разрядам двоичного числа:
H | G | F | E | D | C | B | А | |
Для отображения символа "5" на индикатор необходимо выдать следующий двоичный код:
Пример программы. Управляющая программа прострой, который отображает четыре символа на индикаторе с помощью динамической индикации, подсчет количества нажатий и отпусков кнопки, изменяя при этом частоту возобновления индикатора и частоту звукового сигнала.
; подключение файла с описанием стандартных констант и значений
#include p16f84a.inc
; формирование конфигурационного слова
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; описание ячеек памяти данных
cblock 0x0C; начиная с адреса 0x0C
W_TEMP; сохранение W при вызове прерывания
STATUS_TEMP; сохранение STATUS при прерывании
dig0; буфера на 4 разряда
dig1
dig2
dig3
segment; номер отображаемого разряда
endc
; описание констант
init_porta equ b'00000100'; RA2 на вводе, другие - на вывод
init_portb equ b'00000000'; все разряды на вывод
init_option equ b'00000011'; TMR0 считает CLKOUT/16
init_intcon equ b'10100000'; прерывание от TMR0
; начало программы
org 0; вектор сброса
bcf INTCON, GIE; запрещение всех прерываний
goto main; переход на начало основной программы
; обработчик прерывания
int_start
org 0x04; вектор прерывания
movwf W_TEMP; сохранение W и STATUS
swapf STATUS, W
movwf STATUS_TEMP
btfsc INTCON,T0IF; прерывание от таймера?
goto tmr_int; переход на обработчик прерывания
; при переполнении таймера
movlw b'00100000'; разрешение прерываний только от таймера
movwf INTCON
goto int_end; переход в заключение обработчика
; обработчик прерывания от таймера
tmr_int
bcf INTCON, T0IF; очистка флажка переполнения TMR0
call UpdateDig; возобновление состояния индикатора
swapf dig0, W; инициализация значения таймера
andlw 0xF0
movwf TMR0
movlw b'00001000'; формирование звукового сигнала
xorwf PORTA, F
int_end; окончание обработчика прерывания
swapf STATUS_TEMP, W; восстановление значений
movwf STATUS; регистров W и STATUS
swapf W_TEMP, F
swapf W_TEMP, W
retfie; возвращение из прерывания
; подпрограмма восстановления состояния индикатора
UрdаtеDіg
incf PORTA, W; выбор дежурного разряда
andlw 0x03
movwf segment
movf PORTA, W
andlw 0xFC
iorwf segment, W
movwf PORTA
movlw dig0; подготовка содержания текущего разряда
addwf segment, W
movwf FSR
movf INDF, W
call bcd_table; превращение в 7-сегментный код
movwf PORTB; вывод текущего разряда
return
; подпрограмма превращения двоичного значения в 7-сегментный код
bcd_table
andlw 0x0F
addwf PCL, F
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
retlw b'01110111'; А
retlw b'01111100'; B
retlw b'00111001'; C
retlw b'01011110'; D
retlw b'01111001'; E
retlw b'01110001'; F
; подпрограмма инициализации микроконтроллера
Init
bsf STATUS, RP0; выбор банка 1
movlw init_porta; инициализация регистра TRISA
movwf TRISA^80h
movlw init_portb; инициализация регистра TRISB
movwf TRISB^0x80
movlw init_option; инициализация регистра OPTION
movwf OPTION_REG^80h
clrf STATUS; выбор банка 0
clrf dig0; инициализация отображения символа
movlw.10
movwf dig1
movlw 6
movwf dig2
movlw 9
movwf dig3
movlw init_intcon; инициализация регистра INTCON, movwf INTCON; разрешение прерываний
return
; основная программа
main
call Init; инициализация микроконтроллера
m1 btfsc PORTA, 2; ожидание нажатия на кнопку
goto m1
incf dig0, F; увеличение значения первого разряда
m2 btfss PORTA, 2; ожидание отпуска кнопки
goto m2
incf dig0, F; увеличение значения первого разряда
goto m1
end; конец программы
Дата публикования: 2014-11-03; Прочитано: 337 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!