Гирлянда на микроконтроллере PIC16F877A
Описание работы гирлянды на микроконтроллере PIC16F877A. Принципиальная схема контроллера интерфейса периферии. Разработка программы в среде MPLAB IDE v8.84 на языке ассемблера MPASM v5.44 для прошивки микроконтроллера. Изучение режимов работы гирлянды.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.01.2015 |
Размер файла | 450,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования Российской Федерации
Филиал “СЕВМАШВТУЗ” государственного образовательного учреждения высшего профессионального образования “Санкт-Петербургский государственный морской технический университет”
Курсовая работа
Гирлянда на микроконтроллере PIC16F877A
Студент Сидорин П.А.
Преподаватель Платоненков С.В.
Северодвинск 2012
Введение
PIC -- микроконтроллеры Гарвардской архитектуры, производимые американской компанией Microchip Technology Inc. Название PIC является сокращением от Peripheral Interface Controller, что означает «периферийный интерфейсный контроллер».
В номенклатуре Microchip Technology Inc. представлен широкий спектр 8-и, 16-и и 32-битных микроконтроллеров и цифровых сигнальных контроллеров под маркой PIC. Отличительной особенностью PIC-контроллеров является хорошая преемственность различных семейств. Это и программная совместимость (единая бесплатная среда разработки MPLAB IDE), и совместимость по выводам, по периферии, по напряжениям питания, по средствам разработки, по библиотекам и стекам наиболее популярных коммуникационных протоколов. Номенклатура насчитывает более 500 различных контроллеров со всевозможными вариациями периферии, памяти, количеством выводов, производительностью, диапазонами питания и температуры и т. д.
В данной курсовой работе будет использоваться 8-и разрядный микроконтроллер PIC16F877A
1. Принципиальная схема устройства
2. Блок схема
3. Описание работы устройства
гирлянда микроконтроллер интерфейс ассемблер
При включении устройства начинает работать Режим 0. Кнопка RB4 предназначена для переключения режима мигания, кнопка RB5 для изменения скорости мигания.
1) Для переключения режима надо нажать кнопку RB4(4 режима).
2) Для изменения скорости мигания надо нажать кнопку RB5(4 скорости).
3) Для перевода устройства в спящий режим нажмите и удерживайте кнопку RB5 не менее 5 секунд.
4) Для выхода из спящего режима нажмите любую из кнопок
Режим 0
Режим 1
Режим 2
Режим 3
4. Исходный код программы
list p=pic16f877A
#include <P16F877a.inc>
ERRORLEVEL 2 ; вывод только ошибок
;------------ Настройка слова конфигурации микроконтроллера
; _CP_OFF защита программного кода выключена
; _DEBUG_OFF режим отладки выключен
; _WRT_OFF защита записи FLASH выключена
; _CPD_OFF защита памяти EEPROM выключена
; _LVP_OFF режим низковольтового программирования выключен
; _BODEN_ON сброс по снижению питания включен
; _PWRTE_ON таймер задержки по включению питания включен
; _HS_OSC использование кварцевого резонатора на 16МГц
__CONFIG _CP_OFF&_DEBUG_OFF&_WDT_OFF&_CPD_OFF&_LVP_OFF&_BODEN_ON&_PWRTE_ON&_LP_OSC&_WRT_OFF
;------------ Задание переменных ---------------------------
; #include <defs.inc> ; описание переменных, констант
; #include <macro.inc> ; макросы и процедуры
W_SAVE EQU 0x70 ; для регистра W в прерываниях
STATUS_SAVE EQU 0x71 ; для регистра STATUS в прерываниях
FSR_SAVE EQU 0x72 ; для регистра FSR в прерываниях
PCLATH_SAVE EQU 0x73 ; для регистра PCLATH в прерываниях
DX EQU 0X20 ;СЧЁТЧИК В ТАБЛИЦАХ РЕЖИМАХ
DX_N EQU 0X23 ;СЧЁТЧИК В ТАБЛИУЕ ВРЕМЕНИ
DXTMR EQU 0X22 ;ЗНАЧЕНИЕ ВРЕМЕНИ
DX2 EQU 0X21 ;ИНДИКАТОР РЕЖИМА
;------------ Начало программы ---------------------------
ORG 0x00 ; вектор сброса процессора
PAGESEL MAIN ; 0-я страница памяти
GOTO MAIN ; переход на начало программы
ORG 0x04 ; вектор прерываний
MOVWF W_SAVE ; сохраняем W, STATUS, PCLATH, FSR
MOVF STATUS,W ; регистр STATUS загрузить в аккумулятор
CLRF STATUS ; установка банка 0
MOVWF STATUS_SAVE ; регистр STATUS сохранить в STATUS_SAVE
MOVF PCLATH,W ; загрузить PCLATH в аккумулятор
MOVWF PCLATH_SAVE ; регистр PCLATH сохранить в PCLATH_SAVE
MOVF FSR,W ; загрузить FSR в аккумулятор
MOVWF FSR_SAVE ; регистр FSR сохранить в FSR_SAVE
;
;;------------ Определение источника прерываний -------------
BANKSEL INTCON ; 0 банк
INTTYPE0 ; ОБРАБОТКА ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMR0
BTFSS INTCON,T0IF ; если флаг прерывания установлен, то пропускаем строку
GOTO INTTYPE1 ; иначе переход на следующий обработчик
GOTO PROV
INTTYPE1 ; ОБРАБОТКА ПРЕРЫВАНИЯ ОТ RB7:RB4
BTFSC INTCON,RBIF ; если флаг прерывания установлен, то пропускаем строку
GOTO PROVERKA ; иначе переход на следующий обработчик
GOTO EXITINT
PROVERKA ;ПРОВЕРКА НАЖАТИЯ КНОПОК RB4-RB5
MOVF PORTB,4
BTFSC PORTB,4
GOTO TAIMER_VKL
BTFSC PORTB,5
CALL TMR_VREMA
GOTO EXITINT
PROV ;ПРОВЕРКА НАЖАТИЯ КНОПКИ RB4
BTFSC PORTB,4
GOTO VKL
BANKSEL OPTION_REG
MOVLW B'01111111'
MOVWF OPTION_REG
GOTO EXITINT
VKL ;СПЯЩИЙ РЕЖИМ
CLRF PORTC
SLEEP
BTFSS PORTB,4
SLEEP
BANKSEL OPTION_REG
MOVLW B'01111111'
MOVWF OPTION_REG
GOTO EXITINT3
TMR_VREMA ;ИЗМЕНЕНИЕ СКОРОСТИ МИГАНИЯ
CALL TABL
MOVWF DXTMR
RETURN
TABL ;ТАБЛИЦА ВРЕМЕНИ
MOVF DX_N,W
INCF DX_N
ADDWF PCL
RETLW B'00110101'
RETLW B'00100101'
RETLW B'00010101'
CLRF DX_N
RETLW B'00001110'
PRERVAT_PRERV
MOVLW B'10101000' ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ
MOVWF INTCON
RETURN
;; ВЫХОД ИЗ ОБРАБОТЧИКА ПРЕРЫВАНИЙ
EXITINT
CLRF STATUS ; установка банка 0
CALL PRERVAT_PRERV
MOVFW FSR_SAVE ; загрузить FSR_SAVE в аккумулятор
MOVWF FSR ; восстановить значение регистра FSR
MOVFW PCLATH_SAVE ; загрузить PCLATH_SAVE в аккумулятор
MOVWF PCLATH ; восстановить значение регистра PCLATH
MOVFW STATUS_SAVE ; загрузить STATUS_SAVE в аккумулятор
MOVWF STATUS ; восстановить значение регистра STATUS
SWAPF W_SAVE, F ; восстановить значение аккумулятора
SWAPF W_SAVE, W ; не изменяя значения регистра STATUS
RETFIE ; выход из прерывания
MAIN
;-------------------- Инициализация ------------------------
; настройка порта А
; BANKSEL ADCON1 ; выбрать банк 1 + отключение АЦП
; MOVLW B'00000111' ; все выводы порта A (E) - цифровые входы/выходы
; MOVWF ADCON1
; MOVLW B'00000000' ; все выводы порта А - выходы
; MOVWF TRISA
; BANKSEL PORTA ; выбрать банк 0
; MOVLW B'00110000' ; выставление пассивной "1" на 4 и 5 ножке порта А
; MOVF PORTA ; запись значения в порт А
; настройка порта B
BANKSEL TRISB ; выбрать банк 1
CLRF TRISB
MOVLW B'11111111' ; все выводы порта B - выходы, RB0- вход
MOVWF TRISB
BANKSEL PORTB ; выбрать банк 0
CLRF PORTB ; обнуление порта В
; настройка порта C
BANKSEL TRISC ; выбрать банк 1
CLRF TRISC ; настроить все выводы PORTC как выходы
BANKSEL PORTC ; выбрать банк 0
CLRF PORTC ; очистить PORTC
; настройка порта D
; MOVLW B'00000000' ; настроить все вывода порта D как выходы
; BANKSEL TRISD ; выбрать банк 1
; MOVWF TRISD ; порт D - вход
; BANKSEL PORTD ; выбрать банк 0
; CLRF PORTD ; обнуление порта D
;; настройка порта E
; BANKSEL TRISE ; выбрать банк 1
; MOVLW 0x00 ; TRISE => uuu0x000
; ANDWF TRISE, f ; (IBF:OBF:IBOV:PSPMODE:-:TRISE2:TRISE1:TRISE0)
; BANKSEL PORTE ; выбрать банк 0
; MOVLW B'00000111' ; установка значений на выводах порта Е
; MOVWF PORTE ;
;-------------установка начальных значений------------------
;---------------------- Прерывания -------------------------
; глобальное разрешение прерываний INTCON:GIE=1
; запрещение немаскированных прерываний от периферийных модулей INTCON:PEIE=0
; разрешение прерываний по переполнению от TMR0 INTCON:T0IE=1
; разрешение прерывания от RB0 INTCON:INTE=1
; запрещение прерываний от RB7:RB4 INTCON:RBIE=0
NACHALO_1
BANKSEL INTCON ; выбор банка 0
MOVF PORTB,4
MOVF PORTB,5
MOVLW B'10101000' ; настройка INTCON (GIE:PEIE:T0IE:INTE:RBIE:T0IF:INTF:RBIF)
MOVWF INTCON
CLRF DX_N
MOVLW B'00001110'
MOVWF DXTMR
CLRF DX2
GOTO NACHALO
;
;--------------- Основной цикл программы -------------------
EXITINT3 ;ВЫХОД ИЗ ПРЕРЫВАНИЯ C ВОЗВРАТОМ НА ОСНОВНОЙ ЦИКЛ
CLRF STATUS ; установка банка 0
MOVFW FSR_SAVE ; загрузить FSR_SAVE в аккумулятор
MOVWF FSR ; восстановить значение регистра FSR
MOVFW PCLATH_SAVE ; загрузить PCLATH_SAVE в аккумулятор
MOVWF PCLATH ; восстановить значение регистра PCLATH
MOVFW STATUS_SAVE ; загрузить STATUS_SAVE в аккумулятор
MOVWF STATUS ; восстановить значение регистра STATUS
SWAPF W_SAVE, F ; восстановить значение аккумулятора
SWAPF W_SAVE, W ; не изменяя значения регистра STATUS
GOTO NACHALO_1
EXITINT2 ;ВЫХОД ИЗ ПРЕРЫВАНИЯ C ВОЗВРАТОМ НА ОСНОВНОЙ ЦИКЛ
CLRF STATUS ; установка банка 0
CALL PRERVAT_PRERV
MOVFW FSR_SAVE ; загрузить FSR_SAVE в аккумулятор
MOVWF FSR ; восстановить значение регистра FSR
MOVFW PCLATH_SAVE ; загрузить PCLATH_SAVE в аккумулятор
MOVWF PCLATH ; восстановить значение регистра PCLATH
MOVFW STATUS_SAVE ; загрузить STATUS_SAVE в аккумулятор
MOVWF STATUS ; восстановить значение регистра STATUS
SWAPF W_SAVE, F ; восстановить значение аккумулятора
SWAPF W_SAVE, W ; не изменяя значения регистра STATUS
GOTO NACHALO
NACHALO ;Таблица режимов
MOVF DX2,W
INCF DX2
ADDWF PCL
GOTO REJIM_0
GOTO REJIM_1
GOTO REJIM_2
CLRF DX2
GOTO REJIM_3
REJIM_0 ;РЕЖИМ 0
CLRF DX
CIKL_0
CALL CHISLO_TABL_0 ; 3 ИЗМЕНЕНИЙ МИГАНИЯ ГИРЛЯНДЫ
MOVWF PORTC
CALL TAIMER
GOTO CIKL_0
CHISLO_TABL_0 ;ТАБЛИЦА РЕЖИМА 0
MOVF DX,W
INCF DX
ADDWF PCL
RETLW B'11111111'
RETLW B'10101010'
RETLW B'01010101'
GOTO REJIM_0
REJIM_1 ;РЕЖИМ 1
CLRF DX
CIKL_1
CALL CHISLO_TABL_1 ; 26 ИЗМЕНЕНИЙ МИГАНИЯ ГИРЛЯНДЫ
MOVWF PORTC
CALL TAIMER
GOTO CIKL_1
CHISLO_TABL_1 ;ТАБЛИЦА РЕЖИМА 1
MOVF DX,W
INCF DX
ADDWF PCL
RETLW B'10000000'
RETLW B'01000000'
RETLW B'00100000'
RETLW B'10010000'
RETLW B'01001000'
RETLW B'00100100'
RETLW B'10010010'
RETLW B'01001001'
RETLW B'00100100'
RETLW B'00010010'
RETLW B'00001001'
RETLW B'00000100'
RETLW B'00000010'
RETLW B'00000001'
RETLW B'00000010'
RETLW B'00000100'
RETLW B'00001001'
RETLW B'00010010'
RETLW B'00100100'
RETLW B'01001001'
RETLW B'10010010'
RETLW B'00100100'
RETLW B'01001000'
RETLW B'10010000'
RETLW B'00100000'
RETLW B'01000000'
GOTO REJIM_1
REJIM_2 ;РЕЖИМ 2
CLRF DX
CIKL_2
CALL CHISLO_TABL_2 ; 7 ИЗМЕНЕНИЙ МИГАНИЯ ГИРЛЯНДЫ
MOVWF PORTC
CALL TAIMER
GOTO CIKL_2
CHISLO_TABL_2 ;ТАБЛИЦА РЕЖИМА 2
MOVF DX,W
INCF DX
ADDWF PCL
RETLW B'10000001'
RETLW B'11000011'
RETLW B'11100111'
RETLW B'01111110'
RETLW B'00111100'
RETLW B'00011000'
RETLW B'00000000'
GOTO REJIM_2
REJIM_3 ;РЕЖИМ 3
CLRF DX
CIKL_3
CALL CHISLO_TABL_3 ; 13 ИЗМЕНЕНИЙ МИГАНИЯ ГИРЛЯНДЫ
MOVWF PORTC
CALL TAIMER
GOTO CIKL_3
CHISLO_TABL_3 ;ТАБЛИЦА РЕЖИМА 3
MOVF DX,W
INCF DX
ADDWF PCL
RETLW B'11111111'
RETLW B'01111111'
RETLW B'00111111'
RETLW B'00011111'
RETLW B'00001111'
RETLW B'00000111'
RETLW B'00000011'
RETLW B'00000001'
RETLW B'00000000'
RETLW B'00000001'
RETLW B'00000011'
RETLW B'00000111'
RETLW B'00001111'
RETLW B'00011111'
RETLW B'00111111'
RETLW B'01111111'
GOTO REJIM_3
TAIMER ;ТАЙМЕР ЗАДЕРЖКИ
banksel T2CON
MOVF DXTMR,W
MOVWF T2CON
CLRF TMR2
BCF PIR1,TMR2IF
BTFSS PIR1,TMR2IF
GOTO $-1
RETURN
TAIMER_VKL ;ТАЙМЕР ВЫКЛЮЧЕНИЯ
banksel OPTION_REG
MOVLW B'00000110'
MOVWF OPTION_REG
banksel TMR0 CLRF TMR0
BCF INTCON,T0IF
GOTO EXITINT2
END
Вывод
Написана программа в среде MPLAB IDE v8.84 на языке ассемблера MPASM v5.44 для устройства собранного на микроконтроллере.
Эту программу используют для прошивки микроконтроллера.
В данной программе можно легко изменить режимы работы, заменив или дописав небольшие куски исходного кода.
Также данная программа может быть доработана для повышения функциональности устройства.
Данная программа не портируется на другие микроконтроллеры.
Размещено на Allbest.ru
Подобные документы
Характеристика элементов архитектуры и технических параметров микроконтроллера ATiny2313. Описание принципа работы светодиодной гирлянды и расчет её электрической цепи. Расчет и разработка электрической принципиальной схемы светодиодной гирлянды.
контрольная работа [492,3 K], добавлен 25.05.2014Описание алгоритма работы игры и применяемых в ней функций. Составление программы работы системы управления с использованием языка С. Основные характеристики микроконтроллера, его функциональные группы. Принципиальная схема микропроцессорного модуля.
курсовая работа [756,1 K], добавлен 14.01.2013Разработка автомобильной сигнализации на однокристальном микроконтроллере. Алгоритм её работы и блок-схема рабочей программы. Текст программы на языке assembler. Тестирование и отладка в интегрированной среде ProView фирмы Franklin Software Inc.
курсовая работа [293,8 K], добавлен 14.07.2009Описание работы электронных часов и микроконтроллера АТTiny2313 фирмы Atmel. Выходные буферы порта. Принципиальная схема электронных часов. Разработка печатной платы и практическое её применение. Принципы программирования и прошивки микроконтроллера.
курсовая работа [749,0 K], добавлен 29.05.2009Разработка микроконтроллера для контроля ритма дыхания больного в реанимационной палате. Структурная и принципиальная схемы микропроцессорного контроллера. Модули процессора, памяти, ввода и вывода, режимы индикации. Описание работы, принципиальная схема.
курсовая работа [197,6 K], добавлен 06.12.2013Разработка принципиальной схемы и описание работы контроллера клавиатуры/дисплея КР580ВД79. Схема сопряжения микроконтроллера с фотоимпульсным датчиком. Расчет потребляемого тока от источника питания. Блок-схема программы вывода информации на индикацию.
курсовая работа [736,9 K], добавлен 18.02.2011Изучение цифрового термометра DS18B20: диапазон измерений, уникальный код, блок-схема, особенности функционирования. Устройство и назначение микроконтроллера PIC16F84, его технические характеристики. Описание алгоритма работы термометра-термостата.
контрольная работа [2,5 M], добавлен 20.12.2012Функциональная спецификация и структурная схема электронных автомобильных часов-термометра-вольтметра. Разработка алгоритма работы и принципиальной электрической схемы. Получение прошивки программы для памяти микроконтроллера в результате ассеблирования.
курсовая работа [2,0 M], добавлен 26.12.2009Понятие, принцип работы и функции микроконтроллерного таймера. Изучение технических характеристик микроконтроллера MSP430F2013; преобразование двоичных кодов и способ отображения цифр на дисплее. Разработка программного обеспечения и алгоритма программы.
научная работа [1,1 M], добавлен 16.05.2014Функциональная спецификация и преимущества термометрического датчика. Структурная схема микроконтроллера РIС16F84A. Алгоритм работы программы, описание функциональных узлов, выбор элементной базы и принципиальная схема терморегулятора для аквариума.
курсовая работа [4,7 M], добавлен 27.12.2009