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

Приложение 3. Текст программы

Обзор литературы, методов, схемных решений | Выбор и обоснование | Описание принципа действия устройства | Выбор микросхемы ОВМ х51 | Выбор микросхем дешифраторов и схем индикации | Расчет и выбор элементов звуковой сигнализации | Описание полной принципиальной схемы | Оценка потребляемой мощности | Алгоритм работы главного цикла | Алгоритм работы таймера 1 |


Читайте также:
  1. amp;&&Приложение 17
  2. Copy (рекламный текст) objective and strategy
  3. GNU Фонд свободного программного обеспечения (оригинальный текст)
  4. I. ОСОБЕННОСТИ ТЕКСТОВ СОЦИАЛЬНОЙ РЕКЛАМЫ
  5. I. Характер прочтения поэтического текста.
  6. II. ОСОБЕННОСТИ ТЕКСТОВ ПОЛИТИЧЕСКОЙ РЕКЛАМЫ
  7. III. ПРИЛОЖЕНИЯ (тексты методик)

.list on

; ******** именуем константы и внешние выводы

Tik equ 5000; длительность импульса в мкс

RazmerIndicachii equ 5; количество индикаторов

KnopkaPlus reg P3.3; кнопки

KnopkaMinus reg P3.2

Igra reg P3.0

Ustanovka reg P3.1

Pik reg P3.7; сигнал

; *****************

; ***************** это макрос установки длительности

LoadTimer0 macro DlitTi

Clr TF0

Clr TR0

Mov TH0, #>(-DlitTi)

Mov TL0, #<(-DlitTi)

SetB TR0

.endm

; *****************

 

; ***************** макрос для таймера1

LoadTimer1 macro DlitT

Clr TF1

Clr TR1

Mov TH1, #>(-DlitT)

Mov TL1, #<(-DlitT)

SetB TR1

.endm

; *****************

 

.ABSOLUTE

.DATA; распределяем ячеки ОЗУ

.ORG 20h

Flags ds 1; 1 байт под битовые переменные

First reg Flags.0; первый игрок

Second reg Flags.1; второй игрок

StartTime reg Flags.2; начало счёта

FirstUstan reg Flags.3;первая установка для обнуления,вместо прерывания

Count5ms ds 1; для счета времени по 5 мс

CountZn ds 1; знакоместо. от 0 до 5

t11 ds 1

t12 ds 1

t13 ds 1

t21 ds 1;цифры счёта

t22 ds 1

t23 ds 1

Digites ds 6; цифры индикации

EndVarBeginStack ds 1; последняя ячейка, дальше стек.

 

 

.RELATIVE

.CODE

.ORG 0

;************** векторы прерываний

Jmp Start

.ORG 3; внешнее прерывание 0

Jmp ProcInt0

.ORG 0bh; прерывание по таймеру 0

Jmp IntT0

.ORG 13h; внешнее прерывание 1

Jmp ProcInt1

.ORG 1bh; прерывание по таймеру 1

Jmp IntT1

.ORG 23h; прерывание по посл. порту

RetI

;**************

 

.ORG 40h

;************** начало программы

Start:

Mov SP, #(EndVarBeginStack); начальный указатель стека

Mov Count5ms, #0

Mov CountZn, #0

Mov Digites, #0

Mov t11, #0

Mov t12, #0

Mov t13, #0

Mov t21, #0

Mov t22, #0

Mov t23, #0

Clr First

Clr Second

Clr StartTime

Clr Pik

SetB Ustanovka; чтобы было определено заранее

SetB FirstUstan

Mov TMod, #00010001b;оба таймера на 16 бит.

LoadTimer0 Tik

LoadTimer1 TikForPik; заносим в таймер1 значение соот-щее 500Гц

SEtB IT0; разрешение прерывания по перепаду

SetB ET0; разрешить прерывание от таймера0

SetB EA; разрешить работу контроллера прерываний

 

;************** основной цикл программы

mainloop:

; всё важное происходит здесь

JNB Ustanovka,mainloop; не считаем при установке

JNB StartTime,mainloop; не запущены часы

Mov A, Count5ms

CJNE A, #200, metka; прошла одна секунда

Mov Count5ms, #0

JB First,Perviy

JB Second,Vtoroy

Jmp metka

Perviy:

CALL FirstSchet

Jmp Vnesenie

Vtoroy:

CALL SecondSchet

Jmp Vnesenie

Vnesenie:

;внесение значений в индикацию

Mov A,t13

Mov Digites,A

Mov A,t12

Mov (Digites+1),A

Mov A,t11

Mov (Digites+2),A

Mov A,t23

Mov (Digites+3),A

Mov A,t22

Mov (Digites+4),A

Mov A,t21

Mov (Digites+5),A

metka:

Jmp mainloop

;**************

 

;************** счёт на пнрвом индикаторе

FirstSchet:

Mov A,t11

CJNE A,#0,Umensh11

Mov A,t12;Mov A,#9 Mov t11,A

CJNE A,#0,Umensh12

Mov A,t13

CJNE A,#0,Umensh13

CALL Signalisation; звуки

Jmp ExitFS

Umensh13:

Dec t13

Mov A,#9

Mov t12,A

Mov A,#9

Mov t11,A

Jmp ExitFS

Umensh12:

Dec t12

Mov A,#9

Mov t11,A

Jmp ExitFS

Umensh11:

Dec t11

ExitFS:

Ret

;**************

 

;************** счёт на втором индикаторе

SecondSchet:

Mov A,t21

CJNE A,#0,Umensh21

Mov A,t22;Mov A,#9 Mov t21,A

CJNE A,#0,Umensh22

Mov A,t23

CJNE A,#0,Umensh23

CALL Signalisation; звуки

Jmp ExitSS

Umensh23:

Dec t23

Mov A,#9

Mov t22,A

Mov A,#9

Mov t21,A

Jmp ExitSS

Umensh22:

Dec t22

Mov A,#9

Mov t21,A

Jmp ExitSS

Umensh21:

Dec t21

 

ExitSS:

Ret

;**************

 

;************** сигнал динамика

Signalisation:

Mov R1,#5

SetB ET1; разрешаем прерывание по таймеру1

Ups:

Mov A, Count5ms

CJNE A, #200, metka; прошла 1 секунда

Mov Count5ms, #0

Dec R1

CJNE R1,#0,Ups

Clr ET1; запрещаем прерывание по таймеру1

Clr Pik; для отсутствия сигнала.

Clr StartTime; остановка, и отсутствие дальнейших вычислений

Clr First

Clr Second

 

Ret

;**************

 

;************** процедура прерывания по переполнению таймера 0

IntT0:

Push PSW

Push Acc

LoadTimer0 Tik

Inc Count5ms; счет времени

JNB FirstUstan,Dalee

JB Ustanovka,Dalee; режим установки и при первом запуске

Call Prerivanie

Dalee:

Call DinamicIndication

Pop Acc

Pop PSW

RetI

;**************

 

;************** процедура прерывания по переполнению таймера 1

IntT1:

Push PSW

Push Acc

LoadTimer1 TikForPik

Cpl Pik; подаём сигналы

Pop Acc

Pop PSW

RetI

;**************

 

;************** процедура внешнего прерывания 0 (кнопка минус/первый ходил)

ProcInt0:

Push PSW

Push Acc

 

JNB Ustanovka,Minusik

JNB Igra,Perehod

 

Minusik:

Mov A,t12

SUBB A,#6

JNC Zaem; если в разряде цифра меньше 6

Mov t12,A

JMP ExitPr0

Zaem:; в разряде цифра меньше 6

Mov A,t12

Add A,#4; вычитание цифры 6

Mov t12,A

Mov A,t13

CJNE A,#0,Sbros; меньше нельзя

Dec A

Mov t13,A

JMP ExitPr0

Sbros:

Mov A,t12

Mov A,#6

Mov t12,A

JMP ExitPr0

Perehod:

SetB StartTime

SetB Second

SetB FirstUstan; что бы при изменении пошел обнуление

Clr First

JMP ExitPrInd0

ExitPr0:

Mov A,t12; на двуx индикатораx вместе

Mov t22,A

Mov A,t13

Mov t23,A

ExitPrInd0:

Pop Acc

Pop PSW

REtI

;**************

 

 

;************** процедура внешнего прерывания 1 (кнопка плюс/второй ходил)

ProcInt1:

Push PSW

Push Acc

 

JNB Ustanovka,Plusik

JNB Igra,Perehod1

 

Plusik:

Mov A,t12

Add A,#6

SUBB A,#9;проверка принадлежности 0-9

JNC Tot;не больше 9

Dec A

Mov t12,A

Mov A,t13; так как вычитаем 9

Add A,#1

 

CJNE A,#10,Norm;следит за непереполнением cтаршего разряда индикации

Mov t13,#9

Mov t12,#6

JMP ExitPr1

Norm:

Mov t13,A

JMP ExitPr1

Tot:;не больше 9

Mov A,t12

Add A,#6

Mov t12,A

JMP ExitPr1

Perehod1:

SetB StartTime

SetB First

SetB FirstUstan

Clr Second

JMP ExitPrInd1

 

ExitPr1:

Mov A,t12

Mov t22,A

Mov A,t13

Mov t23,A

 

ExitPrInd1:

Pop Acc

Pop PSW

REtI

;**************

 

;************** динамическая индикация

DinamicIndication:

Mov A, CountZn

Add A,#Digites

Mov R0, A

Mov A, @R0

 

Swap A

ORL A, CountZn

Swap A

 

Mov P1, A

Inc CountZn

Mov A,CountZn

CJNE A,#RazmerIndicachii, ExitInd

Mov CountZn,#0

ExitInd:

Ret

;**************

 

;*******************псевдо прерывание обнуления

Prerivanie:

Mov t11, #0

Mov t12, #0

Mov t13, #0

Mov t21, #0

Mov t22, #0

Mov t23, #0

Clr StartTime

Clr First

Clr Second

Clr FirstUstan

Ret

;*******************

 

 

END

 


Дата добавления: 2015-07-16; просмотров: 36 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Алгоритм работы подпрограммы изменения состояния индикаторов| Страны Балтии.

mybiblioteka.su - 2015-2024 год. (0.021 сек.)