КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Написание программного обеспечения. ⇐ ПредыдущаяСтр 6 из 6 Текст программы для решения поставленной задачи будем писать на языке Assembler с помощью программы MPLAB 7.20 и микроконтроллера PIC16F874
Текст программы с пояснениями:
;******************************************** ; ТЕСТОВАЯ ПРОГРАММА ДЛЯ РАБОТЫ С ЖКИ ;******************************************** include <p16f874.inc> ;============================================ ; Переменные задержки ;============================================ SIMVOL EQU H'0020' SIMVOLL EQU H'0021' SIM EQU H'0022' ;==================================================== ; Переменные и команды для управления индикатором ;==================================================== Dev_Freq EQU D'12000000' ; Device Frequency is 12 MHz LCD_INIT_DELAY EQU (HIGH ((( Dev_Freq / 4 ) * D'46' / D'10000' ) / 3 ) ) + 1 ; MSD EQU H'0030' ; Временный регистр, Holds Most Significant Digit of BIN to BCD conversion LSD EQU H'0031' ; Временный регистр, Holds Least Significant Digit of BIN to BCD conversion CHAR EQU H'0032' ; Временный регистр, хранит значение для отправки на ЖКИ; LCD_DATA EQU PORTC LCD_DATA_TRIS EQU TRISC ; LCD_CNTL EQU PORTE ; E EQU 1 ; Разрешение обращений к модулю и строб данных RRW EQU 0 ; Выбор режима чтение/запись RS EQU 2 ; Бит выбора режима данные/команды ; ; LCD Module commands ; DISP_ON EQU 0x00C ; Включен дисплей DISP_ON_C EQU 0x00E ; Включен дисплей, Курсор включен DISP_ON_B EQU 0x00F ; Включен дисплей, Курсор включен, Курсор мигает DISP_OFF EQU 0x008 ; Выключен дисплей CLR_DISP EQU 0x001 ; Очистить дисплей ENTRY_INC EQU 0x006 ; ENTRY_INC_S EQU 0x007 ; ENTRY_DEC EQU 0x004 ; ENTRY_DEC_S EQU 0x005 ; DD_RAM_ADDR EQU 0x080 ; Наименьшие 7-битов для адреса DD_RAM_UL EQU 0x080 ; Верхний левый угол дисплея ;============================================ ; Начало кода ;======================== org 0000h ; RESET vector location nop GOTO START ;=========================================================================== ; Начало исполняемого кода с адреса 100h ;=========================================================================== org 0100h START CLRF STATUS ; Очистить регистр STATUS (выбрать банк 0) CLRF INTCON ; Запретить все прерывания CLRF PIR1 BSF STATUS,RP0 ; выбор банка 1 MOVLW 0x00 MOVWF OPTION_REG CLRF PIE1 MOVLW 0xFF MOVWF ADCON1 BCF STATUS,RP0 ;=========================================================================== ; Настроить порты мк для работы с индикатором ;=========================================================================== CLRF PORTC ; очисти значения портов CLRF PORTE ; очисти значения портов CLRF PORTD ; очисти значения портов CLRF PORTB ; очисти значения портов ; BSF STATUS, RP0 ; выбор банка 1 для инициализации портов CLRF TRISC ; установит порт C ЖКИ на выход CLRF TRISE ; установит порт E ЖКИ на выход CLRF TRISD ; установит порт D прожекторов и светодиода на выход TRISB B’00011111’ ; установить последние 5 битов порта B на вход для датчиков BCF STATUS, RP0 ; выбор банка 0 ;=========================================================================== ; Инициализация индикатора ;=========================================================================== CLRF LCD_CNTL ; Обнулить порт управления DISPLAY_INIT MOVLW 0x038 ; Команда - 8-ми битный интерфейс ; MOVWF LCD_DATA ; BSF LCD_CNTL, E ; Передать команду BCF LCD_CNTL, E ; ; LCD_DELAY MOVLW LCD_INIT_DELAY ; Задать значения регистров MSD и LSD MOVWF MSD ; Значение регистра LCD_INIT_DELAY задается в библиотеке CLRF LSD ; "lm032l.h" в зависимости от тактовой частоты мк. LOOP2 DECFSZ LSD, F ; Время для инициализации = MSD * ((3 * 256) + 3) * Tcy GOTO LOOP2 ; вернуться на LOOP2 DECFSZ MSD, F END_LCD_DELAY GOTO LOOP2 CMD_SEQ MOVLW 0X038 MOVWF LCD_DATA ; Команда - 8-ми битный интерфейс BSF LCD_CNTL, E ; Передать команду BCF LCD_CNTL, E ; ;===================================================== ; Начальные установки индикатора ;=====================================================
MOVLW DISP_ON ; CALL SEND_CMD ; MOVLW CLR_DISP ; CALL SEND_CMD ; MOVLW ENTRY_INC ; CALL SEND_CMD ; MOVLW DD_RAM_ADDR ; CALL SEND_CMD ; ;===================================================== ; Начало работы ;===================================================== LOOP_NEW
BTFSC PORTB,0 ; если пришел сигнал с «датчика 1» CALL CLRF_LCD ; Очистить индикатор BTFSC PORTB,0 ; если пришел сигнал с «датчика 1» CALL ST0 ; то выполнить подпрограмму ST0 MOVLW H'00AA' BTFSC PORTB,0 ; если пришел сигнал с «датчика 1» BSF PORTD,0 ; включить прожектор CALL ZAD ; Подождать
BTFSC PORTB,1 ; если пришел сигнал с «датчика 2» CALL CLRF_LCD ; Очистить индикатор BTFSC PORTB,1 ; если пришел сигнал с «датчика 2» CALL ST1 ; то выполнить подпрограмму ST1 MOVLW H'00AA' BTFSC PORTB,1 ; если пришел сигнал с «датчика 2» BSF PORTD,1 ; включить прожектор CALL ZAD ; Подождать
BTFSC PORTB,2 ; если пришел сигнал с «датчика 3» CALL CLRF_LCD ; Очистить индикатор BTFSC PORTB,2 ; если пришел сигнал с «датчика 3» CALL ST2 ; то выполнить подпрограмму ST2 MOVLW H'00AA' BTFSC PORTB,2 ; если пришел сигнал с «датчика 3» BSF PORTD,2 ; включить прожектор BTFSC PORTB,2 ; если пришел сигнал с «датчика 3» BSF PORTD,5 ; включить светодиод в «сторожевом пункте» CALL ZAD ; Подождать
BTFSC PORTB,3 ; если пришел сигнал с «датчика 4» CALL CLRF_LCD ; Очистить индикатор BTFSC PORTB,3 ; если пришел сигнал с «датчика 4» CALL ST3 ; то выполнить подпрограмму ST3 MOVLW H'00AA' BTFSC PORTB,3 ; если пришел сигнал с «датчика 4» BSF PORTD,3 ; включить прожектор BTFSC PORTB,3 ; если пришел сигнал с «датчика 4» BSF PORTD,5 ; включить светодиод в «сторожевом пункте» CALL ZAD ; Подождать
BTFSC PORTB,4 ; если пришел сигнал с «датчика 5» CALL CLRF_LCD ; Очистить индикатор BTFSC PORTB,4 ; если пришел сигнал с «датчика 5» CALL ST4 ; то выполнить подпрограмму ST4 MOVLW H'00AA' BTFSC PORTB,4 ; если пришел сигнал с «датчика 5» BSF PORTD,4 ; включить прожектор BTFSC PORTB,4 ; если пришел сигнал с «датчика 5» BSF PORTD,5 ; включить светодиод в «сторожевом пункте» CALL ZAD ; Подождать
GOTO LOOP_NEW ;===================================================== ; Подпрограмма выводит надпись "SECTOR 1" ;===================================================== ST0 MOVLW 'S’ CALL SEND_CHAR MOVLW 'E' CALL SEND_CHAR MOVLW 'C' CALL SEND_CHAR MOVLW 'T' CALL SEND_CHAR MOVLW 'O' CALL SEND_CHAR CALL SEND_CHAR MOVLW 'R' ; MOVLW B'11000000' CALL SEND_CMD ; MOVLW '1' CALL SEND_CHAR RETURN
;===================================================== ; Подпрограмма выводит надпись "SECTOR 2" ;===================================================== ST1 MOVLW 'S’ CALL SEND_CHAR MOVLW 'E' CALL SEND_CHAR MOVLW 'C' CALL SEND_CHAR MOVLW 'T' CALL SEND_CHAR MOVLW 'O' CALL SEND_CHAR CALL SEND_CHAR MOVLW 'R' ; MOVLW B'11000000' CALL SEND_CMD ; MOVLW '2' CALL SEND_CHAR RETURN
;===================================================== ; Подпрограмма выводит надпись "SECTOR 3" ;===================================================== ST2 MOVLW 'S’ CALL SEND_CHAR MOVLW 'E' CALL SEND_CHAR MOVLW 'C' CALL SEND_CHAR MOVLW 'T' CALL SEND_CHAR MOVLW 'O' CALL SEND_CHAR CALL SEND_CHAR MOVLW 'R' ; MOVLW B'11000000' CALL SEND_CMD ; MOVLW '3' CALL SEND_CHAR RETURN ;===================================================== ; Подпрограмма выводит надпись "SECTOR 4" ;===================================================== ST3 MOVLW 'S’ CALL SEND_CHAR MOVLW 'E' CALL SEND_CHAR MOVLW 'C' CALL SEND_CHAR MOVLW 'T' CALL SEND_CHAR MOVLW 'O' CALL SEND_CHAR CALL SEND_CHAR MOVLW 'R' ; MOVLW B'11000000' CALL SEND_CMD ; MOVLW '4' CALL SEND_CHAR RETURN ;===================================================== ; Подпрограмма выводит надпись "SECTOR 5" ;===================================================== ST4 MOVLW 'S’ CALL SEND_CHAR MOVLW 'E' CALL SEND_CHAR MOVLW 'C' CALL SEND_CHAR MOVLW 'T' CALL SEND_CHAR MOVLW 'O' CALL SEND_CHAR CALL SEND_CHAR MOVLW 'R' ; MOVLW B'11000000' CALL SEND_CMD ; MOVLW '5' CALL SEND_CHAR RETURN
;===================================================== ; Подпрограмма задержки (три вложенных цикла) ;===================================================== ZAD MOVWF SIMVOLL PAU MOVLW H'000F' MOVWF SIMVOL PAUZ MOVLW H'00FF' MOVWF SIM PAUZA DECFSZ SIM,F GOTO PAUZA DECFSZ SIMVOL,F GOTO PAUZ DECFSZ SIMVOLL,F GOTO PAU RETURN ;===================================================== ; Подпрограмма отчистки индикатора ;===================================================== CLRF_LCD MOVLW CLR_DISP ; CALL SEND_CMD ; MOVLW ENTRY_INC ; CALL SEND_CMD ; MOVLW DD_RAM_ADDR ; CALL SEND_CMD ; RETURN ;===================================================== ; Подпрограмма вывода символа на индикатор ;===================================================== SEND_CHAR MOVWF CHAR ; Сохранить символ в регистре CHAR MOVLW H'000F' CALL ZAD ; Подождать MOVF CHAR, w ; MOVWF LCD_DATA ; Послать данные на индикатор BCF LCD_CNTL, RRW ; Перевести индикатор в режим чтения BSF LCD_CNTL, RS ; Установить индикатор в режим данных BSF LCD_CNTL, E ; Начало передачи данных BCF LCD_CNTL, E RETURN ;===================================================== ; Подпрограмма подачи команды на индикатор ;===================================================== SEND_CMD MOVWF CHAR ; Сохранить команду в регистре CHAR MOVLW H'000F' CALL ZAD ; Подождать MOVF CHAR, w ; MOVWF LCD_DATA ; Послать команду на индикатор BCF LCD_CNTL, RRW ; Перевести индикатор в режим чтения BCF LCD_CNTL, RS ; Установить индикатор в режим команд BSF LCD_CNTL, E ; Начало передачи данных BCF LCD_CNTL, E RETURN ;===================================================== end Заключение. В этой курсовой работе мы научились проектировать ACP охраны периметра, составлять электрические и алгоритмические схемы управления, выбирать исполнительные и задающие элементы, а также конкретно ставить задачу автоматизации и выполнять её. В пункте 3.1 Структурная схема системы автоматизации составлена схема для конкретизации задачи, включающую в себя микропроцессорный элемент, задающие (датчики движения) и исполнительные (5 прожекторов, 1 светодиод и ЖКИ) элементы. В пункте 3.2 Формулировка задачи автоматизации и алгоритм конкретно сформулирована задача автоматизации и составлен словесный алгоритм, подробно описывающий эту задачу. В пункте 3.3 Выбор задающих и исполнительных элементов системы приведены электрические характеристики, схемы, внешний вид и фотографии для каждого элемента цепи, а также пояснения к этим элементам. В пункте 3.4 Выбор и обоснование выбора микропроцессорного элемента приводятся все характеристики микроконтроллера, преимущества в сравнении с другими, экономические показатели, особенности программирования, а также подсчитано количество входных и выходных сигналов и определён вид каждого из них, падение напряжения и нагрузочный ток каждого из подключаемых элементов. В пункте 3.5 Расчёт нагрузочных характеристик микроконтроллера рассчитаны внутреннее сопротивление каждого элемента, являющегося нагрузкой на портах микроконтроллера, и нагрузочный ток по выходу для порта: он не превышает значения, указанного в паспорте. В пункте 3.6 Составление электрической схемы и спецификации элементов приведена электрическая схема с подробными пояснениями и составлена спецификация элементов этой схемы. В пункте 3.6 Составление алгоритмической схемы управления составлена блок-схема для написания программного обеспечения (она приведена в Приложении 1) и даны соответствующие комментарии. В пункте 3.6 Написание программного обеспечения полностью приведён текст программы на языке Assembler с пояснениями, составленной в соответствии с блок-схемой. Наша задача полностью выполнена: микроконтроллер PIC16F877 может управлять работой нагревателя воды с помощью программы, написанной на языке Assembler. Трудности вызвало отсутствие реальных элементов цепи, т.е. нельзя наглядно посмотреть работу всего процесса, а также написание самой программы. Список литературы: 1.Копесбаева А.А. Элементы и устройства автоматики. Методические указания к выполнению лабораторных работ (для студентов спец-и 360140 - АИСУ). – Алматы: АИЭС, 2003. – 30 с. 2.Однокристальные микроконтроллеры PIC12C5x, PIC16x5x, PIC14000, M16C/61/62 пер. с англ. Б.Я. Прокопенко; Под ред. Б.Я. Прокопенко.- М.:ДОДЭКА, 2000. – 336с. 3.Однокристальные 8-миразрядные FLASH CMOS микроконтроллеры PIC16F87x компании Microchip Technology Incorporated – М.: ОАО «Микро-Чип», 2002. – 184 с. 4.Однокристальные 8-миразрядные FLASH CMOS микроконтроллеры PIC16F87x компании Microchip Technology Incorporated – М.: ОАО «Микро-Чип», 2002. – 184 с. 5.Однокристальные 8-миразрядные, 8-мивыводные FLASH CMOS микроконтроллеры PIC12с5xx компании Microchip Technology Incorporated – М.: ОАО «Микро-Чип», 2002. – 104 с. 6.www.microchip.ru 7.Руководство по программе mpasm - М.: ОАО «Микро-Чип», 2001. – 62 с.
|