Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Написание программного обеспечения.




Текст программы для решения поставленной задачи будем писать на языке 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 с.

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 53; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты