Расчётно-графическое задание
По дисциплине «Микропроцессорная техника»
Факультет: АВТ
Группа: АТ-73
Студенты: Кабак Е.С.
Вариант №2
Преподаватель: Матушкин Г.Г.
Задание:
Разработать программу, которая обеспечивает отображение на экране работы светофора, установленного на пересечении главной и второстепенной улиц в ночном и дневном режимах. Время переключения определяется пользователем, формат отображения на экране произвольный.
Главная улица |
Боковая улица |
Длительность свечения огней |
Зеленый |
Красный |
10 сек. |
Желтый |
Красный и желтый |
3 сек. |
Красный |
Зеленый |
5 сек. |
Красный и желтый |
Желтый |
3 сек. |
Код программы
;--------------------Макрос, рисует светофор с заданными цветами----------------
SETCOLOR MACRO MG,MY,MR,NG,NY,NR
; Рисуем горизонтальный светофор
MOV AH,02 ; Устанавливаем позицию курсора
MOV BH,00 ; Номер видео страницы
MOV DH,14 ; Строка
MOV DL,24 ; Колонка
INT 10H ; Прерывание 10h ROM-BIOS (видео сервис)
MOV AH,09 ; Пишем символ в текущей позиции курсора
MOV AL,219 ; Код символа
MOV BL,NG ; Цвет символа
MOV CX,2 ; Счетчик (сколько экзем-ов символа записать)
INT 10H ; Прерывание 10h ROM-BIOS (видео сервис)
MOV AH,02 ; Устанавливаем позицию курсора
INC DL ; Увеличиваем на 1 номер колонки
INC DL ; Увеличиваем на 1 номер колонки
INT 10H ; Прерывание 10h ROM-BIOS (видео сервис)
MOV AH,09 ; Пишем символ в текущей позиции курсора
MOV BL,NY ; Цвет символа
INT 10H ; Прерывание 10h ROM-BIOS (видео сервис)
MOV AH,02 ; Устанавливаем позицию курсора
INC DL ; Увеличиваем на 1 номер колонки
INC DL ; Увеличиваем на 1 номер колонки
INT 10H ; Прерывание 10h ROM-BIOS (видео сервис)
MOV AH,09 ; Пишем символ в текущей позиции курсора
MOV BL,NR ; Цвет символа
INT 10H ; Прерывание 10h ROM-BIOS (видео сервис)
; Рисуем вертикальный светофор
MOV AH,02
MOV DH,17
MOV DL,44
INT 10H
MOV AH,09
MOV BL,MR
INT 10H
MOV AH,02
INC DH
INT 10H
MOV AH,09
MOV BL,MY
INT 10H
MOV AH,02
INC DH
INT 10H
MOV AH,09
MOV BL,MG
INT 10H
ENDM
;---------------------Присваиваем переменным значения цветов--------------------
RED EQU 00000100B
GREEN EQU 00000010B
YELLOY EQU 00001110B
WHITE EQU 00000111B
;----------------------------------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
DW 256 DUP(?)
STACKSG ENDS
;----------------------------------------------------------------------------
INTTAB SEGMENT AT 0H ; Таблица векторов прерываний
ORG 1CH*4
TIMEADR LABEL DWORD ; Пользовательское прерывание от таймера
INTTAB ENDS
;----------------------------------------------------------------------------
DATASG SEGMENT PARA 'Data'
TIME DB 0 ; Время в тиках
STAT DB 1 ; Состояние светофора
; 1 - 4 соотвествущие строки в таблице
; 5 - 6 ночной режим
TIMESAV DD ? ; Адрес старого обработчика
DATASG ENDS
;----------------------------------------------------------------------------
CODESG SEGMENT PARA 'Code'
;--------------------------Начинаем выполнение задачи---------------------------
BEGIN PROC FAR
ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:INTTAB
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
MOV AX,INTTAB
MOV ES,AX
CALL INIT ; Рисуем улицу
NEXT1: CMP STAT,1 ; Проверяем состояние свет-ра (не первое ли?)
JNE NEXT2 ; Если нет, то переходим на проверку второго
CMP TIME,182 ; Смотрим, не прошло ли 10 сек.
JB X1 ; Если не прошло 10 сек. перейти на метку X1
MOV TIME,0 ; Обнуляем таймер
MOV STAT,2 ; Переводим состояние светофора во второе
SETCOLOR WHITE,YELLOY,WHITE,WHITE,YELLOY,RED
X1: JMP KB ; В любом случае переходим на метку KB
NEXT2: CMP STAT,2 ; Проверяем состояние свет-ра (не второе ли?)
JNE NEXT3 ; Если нет, то переходим на проверку третьего
CMP TIME,55 ; Смотрим, не прошло ли 3 сек.
JB X2 ; Если не прошло 3 сек. перейти
MOV TIME,0 ; Обнуляем таймер
MOV STAT,3 ; Переводим состояние светофора в третье
SETCOLOR WHITE,WHITE,RED, GREEN,WHITE,WHITE
X2: JMP KB ; В любом случае переходим на метку KB
NEXT3: CMP STAT,3 ; Проверяем состояние свет-ра (не третие ли?)
JNE NEXT4 ; Если нет, то переходим на проверку четвертого
CMP TIME,91 ; Смотрим, не прошло ли 5 сек.
JB X3 ; Если не прошло 5 сек. перейти
MOV TIME,0 ; Обнуляем таймер
MOV STAT,4 ; Переводим состояние светофора в четвертое
SETCOLOR WHITE,YELLOY,RED,WHITE,YELLOY,WHITE
X3: JMP KB ; В любом случае переходим на метку KB
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.