CHECK (различные ДЗ)
Описание файла
Файл "CHECK" внутри архива находится в папке "различные ДЗ". Документ из архива "различные ДЗ", который расположен в категории "". Всё это находится в предмете "микропроцессорные устройства" из 8 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "микропроцессорные устройства управления" в общих файлах.
Онлайн просмотр документа "CHECK"
Текст из документа "CHECK"
.Program CHECK
C ---------------------------------------------------
C Программа управления роботом РМ-01 для игры в шашки
C ---------------------------------------------------
C Выполняемые фрагменты:
C 1 GO.HOME - выйти в исходное положение
C 2 SET.SPEED - установить скорость движения робота
C 3 TAKE - взять шашку и убрать в коробку
C 4 REPLACE - переставить шашку
C 5 GIVE - взять и передать шашку другому роботу
C 6 PUT - взять шашку у другого робота и поставить
C 7 Exit - выход из программы
C
C Инициализация
CALL INIT
C
GO READY
GO #READY0
GO #SPACE
GO #HOME
OPEN
C
PRINT 'Robot is ready'
C <NULL.> ==> ЭВМ
SET MARKER. = NULL.
CALL TRANSC.
C Ошибка
RETURN
C ------
10 PRINT '$'
C <==> ЭВМ - ожидание команды
CALL SWITCH.
JUMP 101
JUMP 10
C 1 фрагмент
CALL GO.HOME
JUMP 101
JUMP 10
C 2 фрагмент
CALL SET.SPEED
JUMP 101
JUMP 10
C 3 фрагмент
CALL TAKE
JUMP 101
JUMP 10
C 4 фрагмент
CALL REPLACE
JUMP 101
JUMP 10
C 5 фрагмент
CALL GIVE
JUMP 101
JUMP 10
C 6 фрагмент
CALL PUT
JUMP 101
JUMP 10
C 7 фрагмент - выход из программы
GO #SPACE
GO #READY0
GO READY
RETURN
C ------
C
101 CALL ERROR.
JUMP 10
.End
C
C==============================================================
C Рабочие фрагменты C==============================================================
C
.Program GO.HOME
C --------------------------
C 1 Выйти в исходное положение
C --------------------------
C Параметров нет
C
PRINT 'Go home position'
ENABLE INCALLS
OPEN
GO #SPACE
GO #HOME
DISABLE INCALLS
C <NULL.> ==> ЭВМ
SET MARKER. = NULL.
CALL TRANSC.
JUMP 101
C
RETURN 1
C Ошибка
101 RETURN
.End
C
.Program SET.SPEED
C ---------------------------------------
C 2 Установить скорость движения робота (%)
C ---------------------------------------
C Параметр:
C PAR1. - относительная скорость робота (1%-300%)
C
PRINT 'Set speed % ',PAR1.
IF PAR1. < 1 THEN JUMP 102
IF PAR1. > 300 THEN JUMP 102
SET SPEED = PAR1.
SPEED% SPEED
C <NULL.> ==> ЭВМ
SET MARKER. = NULL.
CALL TRANSC.
JUMP 101
C
RETURN 1
C Ошибка в параметре
102 SET ERRORW. = ER1
C <ERRORW.> ==> ЭВМ
SET MARKER. = ERRORW.
CALL TRANSC.
JUMP 101
C Ошибка
101 RETURN
.End
C
.Program TAKE
C ------------------------------
C 3 Взять шашку и убрать в коробку
C ------------------------------
C Параметры:
C PAR1. - номер позиции X на доске (1-8)
C PAR2. - номер позиции Y на доске (1-8)
C
PRINT 'Take off checker'
PRINT PAR1.
PRINT PAR2.
C
SET PAR1 = PAR1.
SET PAR2 = PAR2.
C Вычислить координаты шашки
CALL POS.XY
JUMP 102
C Взять шашку
ENABLE INCALLS
GO #WAIT
OPEN
C Ожидание освобождения рабочей зоны
WAIT IN I.WORK.N
C Занять рабочую зону
OUT O.WORK.Y
C
GO #WORK
GONEAR POS,30
SPEED% 100
SPEED NEXT 50
GOS POS
CLOSE
SPEED% SPEED
GOSNEAR POS,30
GO #WORK
GO #SPACE
C Освободить рабочую зону
OUT O.WORK.N
C
GO #PUT
GONEAR #BOX,100
SPEED% 100
SPEED NEXT 100
GOS #BOX
DELAY 0.5
OPEN
SPEED% SPEED
GOSNEAR #BOX,100
GO #PUT
GO #SPACE
GO #HOME
DISABLE INCALLS
C <NULL.> ==> ЭВМ
100 SET MARKER. = NULL.
CALL TRANSC.
JUMP 101
C
RETURN 1
C <ERRORW.> ==> ЭВМ
102 SET MARKER. = ERRORW.
CALL TRANSC.
JUMP 101
C Ошибка
101 RETURN
.End
C
.Program REPLACE
C -----------------
C 4 Переставить шашку
C -----------------
C Параметры:
C PAR1. - номер исходной позиции X на доске (1-8)
C PAR2. - номер исходной позиции Y на доске (1-8)
C PAR3. - номер конечной позиции X на доске (1-8)
C PAR4. - номер конечной позиции Y на доске (1-8)
C
PRINT 'Replace chacker'
PRINT PAR1.
PRINT PAR2.
PRINT PAR3.
PRINT PAR4.
C Начальные координаты шашки
SET PAR1 = PAR1.
SET PAR2 = PAR2.
C Вычислить координаты шашки
CALL POS.XY
JUMP 102
C
LOCATE POS1 = POS
C Конечные координаты шашки
SET PAR1 = PAR3.
SET PAR2 = PAR4.
C Вычислить координаты шашки
CALL POS.XY
JUMP 102
C Взять шашку
ENABLE INCALLS
GO #WAIT
OPEN
C Ожидание освобождения рабочей зоны
WAIT IN I.WORK.N
C Занять рабочую зону
OUT O.WORK.Y
C
GO #WORK
GONEAR POS1,30
SPEED% 100
SPEED NEXT 50
GOS POS1
CLOSE
SPEED% SPEED
GOSNEAR POS1,30
C
GONEAR POS,30
SPEED% 100
SPEED NEXT 50
GOS POS
GOSNEAR ,-1
DELAY 0.5
OPEN
SPEED% SPEED
GOSNEAR POS,30
GO #WORK
GO #SPACE
C Освободить рабочую зону
OUT O.WORK.N
C
GO #HOME
DISABLE INCALLS
C <NULL.> ==> ЭВМ
100 SET MARKER. = NULL.
CALL TRANSC.
JUMP 101
C
RETURN 1
C <ERRORW.> ==> ЭВМ
102 SET MARKER. = ERRORW.
CALL TRANSC.
JUMP 101
C Ошибка
101 RETURN
.End
C
.Program GIVE
C -------------------------------------
C 5 Взять и передать шашку другому роботу
C -------------------------------------
C Параметры:
C PAR1. - номер позиции X на доске (1-8)
C PAR2. - номер позиции Y на доске (1-8)
C
PRINT 'Give checker'
PRINT PAR1.
PRINT PAR2.
C
SET PAR1 = PAR1.
SET PAR2 = PAR2.
C Вычислить координаты шашки
CALL POS.XY
JUMP 102
C Взять шашку
ENABLE INCALLS
GO #WAIT
OPEN
C Ожидание освобождения рабочей зоны
WAIT IN I.WORK.N
C Занять рабочую зону
OUT O.WORK.Y
C
GO #WORK
GONEAR POS,30
SPEED% 100
SPEED NEXT 50
GOS POS
CLOSE
SPEED% SPEED
GOSNEAR POS,30
GO #WORK
GO #SPACE
C Освободить рабочую зону
OUT O.WORK.N
C
GO #GIVE
GONEAR #MEET,150
C Ожидание другого робота
WAIT IN I.MEET.Y
C
SPEED% 100
SPEED NEXT 100
GOS #MEET
C Выход в зону встречи
OUT O.MEET.Y
SPEED% SPEED
C Ожидание другого робота
WAIT IN I.MEET.N
C
DELAY 0.5
OPEN
GOSNEAR #MEET,150
C Выход из зоны встречи
OUT O.MEET.N
C
GO #GIVE
GO #SPACE
GO #HOME
DISABLE INCALLS
C <NULL.> ==> ЭВМ
100 SET MARKER. = NULL.
CALL TRANSC.
JUMP 101
C
RETURN 1
C <ERRORW.> ==> ЭВМ
102 SET MARKER. = ERRORW.
CALL TRANSC.
JUMP 101
C Ошибка
101 RETURN
.End
C
.Program PUT
C ----------------------------------------
C 6 Взять шашку у другого робота и поставить
C ----------------------------------------
C Параметры:
C PAR1. - номер позиции X на доске (1-8)
C PAR2. - номер позиции Y на доске (1-8)
C
PRINT 'Take and put checker'
PRINT PAR1.
PRINT PAR2.
C
SET PAR1 = PAR1.
SET PAR2 = PAR2.
C Вычислить координаты шашки
CALL POS.XY
JUMP 102
C
ENABLE INCALLS
GO #SPACE
GO #GIVE
GONEAR #MEET,150
C Выход в зону встречи
OUT O.MEET.Y
OPEN
C Ожидание другого робота
WAIT IN I.MEET.Y
C
SPEED% 100
SPEED NEXT 100
GOS #MEET
CLOSE
SPEED% SPEED
C Схватил шашку
OUT O.MEET.N
C Ожидание другого робота
WAIT IN I.MEET.N
C
GOSNEAR #MEET,150
GO #GIVE
GO #SPACE
C Положить шашку
GO #WAIT
C Ожидание освобождения рабочей зоны
WAIT IN I.WORK.N
C Занять рабочую зону
OUT O.WORK.Y
C
GO #WORK
GONEAR POS,30
SPEED% 100
SPEED NEXT 50
GOS POS
GOSNEAR ,-1
DELAY 0.5
OPEN
SPEED% SPEED
GOSNEAR POS,30
GO #WORK
GO #SPACE
C Освободить рабочую зону
OUT O.WORK.N
C
GO #HOME
DISABLE INCALLS
C <NULL.> ==> ЭВМ
100 SET MARKER. = NULL.
CALL TRANSC.
JUMP 101
C
RETURN 1
C <ERRORW.> ==> ЭВМ
102 SET MARKER. = ERRORW.
CALL TRANSC.
JUMP 101
C Ошибка
101 RETURN
.End
C C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C Подпрограммы C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C============================================================== .Program POS.XY
C --------------------------
C Вычислить координаты шашки
C --------------------------
C Параметры:
C PAR1 - номер позиции X на доске (1-8)
C PAR2 - номер позиции Y на доске (1-8)
C
IF PAR1 < 1 THEN JUMP 102
IF PAR1 > 8 THEN JUMP 102
C
IF PAR2 < 1 THEN JUMP 102
IF PAR2 > 8 THEN JUMP 102
C
LOCATE CIJ = C00
C
10 IF PAR1 <= 1 THEN JUMP 20
SHIFT CIJ = 34.5
SET PAR1 = PAR1 - 1
JUMP 10
C
20 IF PAR2 <= 1 THEN JUMP 30
SHIFT CIJ = ,34.5
SET PAR2 = PAR2 - 1
JUMP 20
C
30 LOCATE POS = CHECK(CIJ)
RETURN 1
C
102 SET ERRORW. = ER1
C Ошибка в параметрах
101 RETURN
.End
C C############################################################## .Program ALARM
C ----------------------------
C Прерывание по датчику аварии
C ----------------------------
C
PRINT 'ALARM'
C
WAIT IN I.ALARM.N
C
STOP 'Continue ?'
C
ENABLE INCALLS
RETURN
.End C############################################################## C C============================================================== .Program INIT
C ------------------------------------
C Инициализация программы игры в шашки
C ------------------------------------
C
C Инициализация последовательного порта
CALL INID2.
C
C************ Технологические входы / выходы **************** C
OUTGROUP 1 = 0
OUTGROUP 2 = 0
C
C--------------------------- Входы ---------------------------- C Авария
C да
SET I.ALARM.Y = 15
C нет
SET I.ALARM.N = -15
C Рабочая зона
C занята
SET I.WORK.Y = 14
C свободна
SET I.WORK.N = -14
C Ожидание другого робота
C 1
SET I.MEET.Y = 13
C 0
SET I.MEET.N = -13
C
C--------------------------- Выходы --------------------------- C Рабочая зона
C занять
SET O.WORK.Y = 14
C освободить
SET O.WORK.N = -14
C Сигналы другому роботу
C 1
SET O.MEET.Y = 13
C 0
SET O.MEET.N = -13
C C************************************************************** C
SPEED 166
ODELAY 1
CDELAY 1
TOOL
FRAME CHECK = O,X,Y
C
C*************************** Ошибки ************************* C Неверный параметр (A)
SET ER1 = 65
C
C************************* Переменные *********************** C
C Временные: PAR1, PAR2,
C Число фрагментов
SET MAX.FR. = 7
C Текущая относительная скорость робота
SET SPEED = 200
SPEED% SPEED
C
INCALL I.ALARM.Y, ALARM
RETURN
C ------
C
C************************* Положения ************************ C Обучаемые:
C #READY0 - начальное положение после READY
C #SPACE - переходное положение
C #HOME - исходное положение
C #BOX - коробка для шашек
C O - начало системы координат доски
C X - ось X доски
C Y - ось Y доски
C #PUT - положение над стержнями
C #WAIT - положение у рабочей зоны
C #WORK - положение над доской
C #MEET - положение для передачи шашки
C #GIVE - исходное положение для передачи шашки
C C00 - первая шашка в системе координат доски
C Вычисляемые:
C CHECK, CIJ, POS, POS1
.End