Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Разработка программного обеспечения ССОО




Требуется разработать программу для опроса кнопок "СБРОС", "ТРЕВОГА" и "ТЕСТ" в соответствии с п3.1.

При нажатии кнопки "СБРОС" записать номер выбранного сообщения 0 (нет передачи) в регистр R0, при этом надо остановить отсчет временного тридцатисекундного интервала (таймер 0), обнулить флаг запроса прерывания таймера 0 и флага временного интервала 30с FLAG.

При нажатии кнопки "ТРЕВОГА" записать номер выбранного сообщения 2 (ALARM) в регистр R0.

При нажатии кнопки "ТЕСТ" записать номер выбранного сообщения 1 (TEST) в регистр R0.

Программа размещается в общем тексте программного модуля, начиная с метки Key до команды выхода из подпрограммы RET.

В сообщениях test и alarm сделать замену выделенного поля на свою фамилию, используя только заглавные латинские буквы. Размер поля изменять нельзя.

Выполнить отладку модуля, используя программу browse.exe [4]. Для проверки передачи данных в транспондер, соединить два компьютера, на одном запустить программу в debug.exe, сконфигурировать контроллер, настроить связь через COM порт, на другом компьютере запустить программу Сontroller debug program ярлыком СomDial с рабочего стола компьютера (рис. 8).

 

Рис.8 Окно программы СomDial

 

На панели «Состояние СОМ-порта» выбрать номер порта «1», скорость передачи данных «4800» и клавишей «Open» открыть порт. Выбрать из закладок вкладку «Терминал». Включить на стенде переключатель «Тревога». Передаваемые данные будут отображаться в окне «Терминал». Через 1 мин выключить переключатель «Тревога», включить переключатель «Test», проконтролироать выдачу данных в окне «Терминал». На рис. 9 приведен пример отображения передаваемых данных в окне «Терминал» программы СomDial.

Рис.9 Пример отображения передаваемых данных в окне «Терминал» программы СomDial.

Визуально проверить правильность приема данных.

Записать программу в контроллер, соединить с транспондером, реализовать передачу.

 

Содержание отчета.

Отчет по выполненной работе должен содержать:

· задание в соответствии с вариантом;

· электрическую принципиальную схему ССОО;

· спецификацию;

· тексты передаваемых сообщений с заданным MMSI станции и своей фамилией;

· текст программы;

· скриншоты Сontroller debug program с принятыми сообщениями "ТРЕВОГА" и "ТЕСТ";

 

 

Библиографический список

1. Судовая автоматизированная идентификационная система /А.Н. Маринич [и др.]; под ред. Ю.М.Устинова. – СПб.: Судостроение, 2004.-179 с.

2. Шишкин, А.В. Глобальная морская система связи при бедствии и для обеспечения безопасности мореплавания: уч. пособие /А.В. Шишкин -М.: ТрасЛит, 2007. -544 с.

3. Грошева, Л.С.Архитектура микроконтроллеров MCS-51: учеб. пособие для студентов очного обучения: по специальностям 162107 «Техническая эксплуатация транспортного радиооборудования» и 180407.65 «Эксплуатация судового электрооборудования и средств автоматики»/ Л.С. Грошева, В.И. Плющаев. – Н.Новгород: Изд-во ФБОУ ВПО «ВГАВТ»,2014.–68с.

4. Грошева, Л.С.Архитектура микроконтроллеров MCS-51: метод. пособие для студентов очного обучения: по специальности 162107 «Техническая эксплуатация транспортного радиооборудования»/ Л.С. Грошева.– Н.Новгород: Изд-во ФБОУ ВПО «ВГАВТ»,2015.–32 с.

 

Оглавление

 

  Системы судового охранного оповещения  
1.1 Общие сведения  
1.2 ССОО на базе судовых земных станций ИНМАРСАТ  
1.3 ССОО на базе спутниковой системы КОСПАС-САРСАТ  
1.4. Береговой сегмент системы охранного оповещения  
  Использование АИС для создания ССОО  
2.1 Автоматическая идентификационная система  
2.2. Инициализация передачи сообщения №12  
2.3 Структура ССОО  
2.4 Структура программного обеспечения контроллера ССОО  
  Проектирование ССОО на базе АИС  
3.1 Разработка принципиальной схемы  
3.2 Разработка программного обеспечения ССОО  
3.3 Содержание отчета  
  Библиографический список  
  Приложение 1  
  Приложение 2  

 

 

Приложение1

1. Микроконтроллер MCS51

 

2. Блок кнопок

 

3. Последовательный порт RS-232

 

4. Транспондер

 

 

5. Блок питания

Приложение2

;=================================

; Программа контроллера СССО

;=================================

.PUBLIC INIT

RegKan: Equ 30h;Состояние передачи

NomBuf: Equ 31h;Номер передаваемого буфера

FLAG: Reg 20h.0;Флаг временного интервала 30с

 

.ORG 0;Размещение команды по адресу 0000h

LJMP INIT;Обход векторов прерывания при включении МК

 

.ORG 000Bh;Размещение команды по адресу 000Вh

LJMP Timer;Вектор прерывания таймера/счетчика 0

 

.ORG 23H;Размещение команды по адресу 0023h

LJMP Serial;Вектор прерывания последовательного канала

 

.org 30h;Размещение команд с адреса 0030h

;Инициализация необходимых ресурсов микроконтроллера

INIT: mov SP,#50h;организовать стек в верхних адресах ОЗУ

mov RegKan,#0;Нет передачи

;Программирование и запуск таймера 1

MOV TMOD,#00100001B;Таймер 1 в режиме 2, таймер 0 в режиме 1

MOV TH1,#0faH;Установить скорость передачи данных

MOV TL1,#0faH; 4800 бит/сек

;Программирование последовательного канала

mov SCON,#01000000b; 8-битовый асинхронный передатчик

 

SETB IE.4;Разрешить прерывания последовательного канала

SETB IE.1;Разрешить прерывания таймера 0

SETB IE.7; Общее разрешение прерываний

SETB TR1;Запустить таймер 1

CLR TR0;Таймер 0 остановлен

CLR FLAG;Сброс флага завершения временного интервала 30с

 

MOV R0,#0;Обнуление регистров общего назначения

MOV R1,#0

MOV R2,#0

MOV R3,#0

MOV R4,#0

MOV R5,#0

MOV R6,#0

MOV R7,#0

 

;Основной модуль передачи буфера на траспондер

Upr_Mod:

lcall Key;Вызов подпрограммы анализа клавиш

mov NomBuf,R0;Сохранение номера передаваемого буфера

AnBuf: CJNE R0,#1,M0;Выбор буфера для передачи

MOV dptr,#test;Выбран буфер передачи тестового сообщения

MOV R1,#46;Длина передавемого буфера 46 символов

LJMP M1;Переход на передачу буфера

M0: CJNE R0,#2,Upr_Mod;Выбор буфера для передачи

MOV dptr,#alarm;Выбран буфер передачи тревожного сообщения

MOV R1,#46;Длина передавемого буфера 46 символов

 

M1: JB FLAG,Upr_Mod;Проверка флага временного интервала 30с

SETB FLAG;Установка флага временного интервала 30с

MOV B,R1;Запись числа передаваемых символов

DEC R1;Вычисление числа символов для

DEC R1;расчета контрольной суммы R1-2

LCALL ConSum;Обращение к программе расчета контр. суммы

 

MOV R0,#0;Индекс первого передаваемого символа

MOV R1,B;Запись числа передаваемых символов

Upr_Mod1:;Передача байтов из буфера

MOV A,RegKan; проверить занят ли канал

JNZ Upr_Mod1; перейти, если занят (нельзя передавать)

MOV RegKan,#1;Разрешить передачу

MOV A,R0

MOVC A,@A+dptr;Взятьочередной символ из буфера

MOV SBUF,A;Выдать байт из аккумулятора в

;последовательный канал

INC R0;Увеличить индекс передаваемого символа

DJNZ R1,Upr_Mod1;Повторять передачу всех символов буфера

 

Upr_Mod2:;Передача первого байта контрольной суммы

MOV A,RegKan; проверить занят ли канал

JNZ Upr_Mod2; перейти, если занят (нельзя передавать)

MOV RegKan,#1;Разрешить передачу

MOV SBUF,R3;Выдать байт из R3 в

;последовательный канал

Upr_Mod3:;Передача второго байта контрольной суммы

MOV A,RegKan;проверить занят ли канал

JNZ Upr_Mod3;перейти, если занят (нельзя передавать)

MOV RegKan,#1;Разрешить передачу

MOV SBUF,R4;Выдать байт из R4 в последовательный канал

Upr_Mod4:;Передача символа <CR>

MOV A,RegKan; проверить занят ли канал

JNZ Upr_Mod4; перейти, если занят (нельзя передавать)

MOV RegKan,#1;Разрешить передачу

MOV SBUF,#0Dh;Выдать байт в последовательный канал

Upr_Mod5:;Передача символа <LF>

MOV A,RegKan; проверить занят ли канал

JNZ Upr_Mod5; перейти, если занят (нельзя передавать)

MOV RegKan,#1;Разрешить передачу

MOV SBUF,#0Ah;Выдать байт в последовательный канал

;Программирование таймера для отсчета интервала 30 с

MOV TH0,#43h;начальная константа для отсчета

MOV TL0,#5Dh;интервала 0.05сек

MOV R5,#0;Обнуление регистра отсчета 1 сек

MOV R7,#0;Обнуление регистра отсчета 30 сек

SETB TR0;Запуск таймера на счет

Mov R0,NomBuf;Восстановление номера передаваемого буфера

ljmp Upr_Mod;Переход к анализу состояния клавиш

 

 

;Программа обработки прерывания последовательного канала

Serial:

PUSH A;запись содержимого аккумулятора в стек

MOV a,RegKan;Проверка состояния передачи

CJNE A,#1,EXIT;если не 1, то вход не по запросу прерывания

JBC TI,Pered;Перейти, если флаг завершения передачи байта=1

CLR RI;Сбросить флаг приема

LJMP EXIT

Pered:;Передача байта закончена

mov RegKan,#0;Разрешение передачи следующего байта

LJMP EXIT

EXIT: POP A;Восстановить содержимое аккумулятора из стека

RETI;Выход из программы обработки прерывания

 

;Программа обработки прерывания последовательного канала

Timer: CLR TR0;Остановить таймер

MOV TH0,#43h;начальная константа для отсчета

MOV TL0,#5Dh;интервала 0.05сек

INC R5;увеличить счетчик интервалов для 1секунды

CJNE R5,#20,EX;проверка завершения 1 секунды

MOV R5,#0;обнульть счетчик интервалов для 1секунды

INC R7;увеличить счетчик секунд

CJNE R7,#30,EX;проверка завершения 30 секунд

MOV R7,#0;обнульть счетчик интервалов для 30секунд

CLR FLAG;Сброс флага временного интервала 30с

LJMP EXX

EX: SETB TR0;запустить таймер и продолжить отсчет 30с

EXX: RETI;Выход из программы обработки прерывания

 

;Программа расчета контрольной суммы

ConSum: MOV R0,#1;Индекс очередного символа

MOV R2,#0;Начальное значение контрольной суммы

ConM: MOV A,R0

MOVC A,@A+dtpr;Взятьочередной символ из буфера

XRL A,R2;вычисилить текущее значение контрольной суммы

MOV R2,A;сохранить текущее значение контрольной суммы

INC R0;Увеличить индекс очередного символа на 1

DJNZ R1,ConM;Уменьшить счетчик символов на 1

; если не 0, то повторить вычисление

MOV A,R2;Взять итоговое значение контрольной суммы

ANL A,#F0h;Выделить старшую половину

RR A; и сдвинуть ее на 4 позиции вправо

RR A

RR A

RR A

LCALL ASCI;обратиться к программе преобразования в ASCII

MOV R3,A;записать первый байт контрольной суммы в ASCII

MOV A,R2;Взять итоговое значение контрольной суммы

ANL A,#0Fh;Выделить младшую половину

LCALL ASCI;обратиться к программе преобразования в ASCII

MOV R4,A;записать второй байт контрольной суммы в ASCII

RET;Выход из программы

 

;Программа преобразования в ASCII код

ASCI: CJNE A,#AH,SL;Если код больше 9

SL: JNC PR;то перейти на символы

ADD A,#30h;Преобразовать код 0-9 в ASCII код

RET;Выход из программы

PR: CLR C

SUBB A,#AH;Преобразовать код A-F в ASCII код

ADD A,#41h

RET;Выход из программы

 

;Программа анализа состояния клавиш

Key:;проверка кнопки "СБРОС"

JB P0.7,Kn;если кнопка "СБРОС" не нажата, то проверять другие

MOV R0,#0;Номер выбиранного буфера 0 (нет)

CLR TR0;Прекратить расчет временного интервала

CLR TF0;Сбросить флаг запроса прерывания таймера 0

CLR FLAG;Сброс флага временного интервала 30с

RET;Выход из программы

 

Kn:;проверка кнопок "ТРЕВОГА"

JNB P0.0, Met1;переход на метку, если нажата

JNB P0.1, Met1;хоть одна из тревожных кнопок

JNB P0.2, Met1

;проверка кнопки "ТЕСТ"

JNB P0.4, Met2;переход на метку, если нажата

RET;Выход из программы

Met1: MOV R0,#2;Выбран буфер "ТРЕВОГА"

RET;Выход из программы

Met2: MOV R0,#1;Выбран буфер "ТЕСТ"

RET;Выход из программы

 

; Сообщения

 

test:.DB "!AIABM,1,1,1,799000001,3,12,TEST01234567890,0*"

alarm:.DB "!AIABM,1,1,1,799000001,3,12,ALARM1234567890,0*"

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...