Программа вывода звуковых сигналов на МК КР1816ВЕ51. Константы и переменные. Сигнал ошибки, страница 2

;------------------------------------------------------------------;Перезагрузка счетчика CntT1 данными из DSeg

;------------------------------------------------------------------ReloadCntT1:    .MACRO

MOV   CntT1,DataCntT1

.ENDM

;------------------------------------------------------------------;Перезагрузка счетчика CntT2 данными из DSeg

;------------------------------------------------------------------ReloadCntT2:    .MACRO

MOV   CntT2,DataCntT2

.ENDM

;-------------------------------------------------------------------;Перезагрузка счетчиков CntT, CntT1, CntT2, CntCycl данными из DSeg

;-------------------------------------------------------------------ReloadCnt:     .MACRO

MOV   CntT,DataCntT

MOV   CntT1,DataCntT1

MOV   CntT2,DataCntT2

MOV   CntCycl,DataCntCycl

.ENDM

;------------------------------------------------------------------; Формирование посылки (пачки импульсов)

;------------------------------------------------------------------InvertSoundOn: .MACRO

CPL   SoundOn

.ENDM

;------------------------------------------------------------------; Формирование импульса

;------------------------------------------------------------------InvertSoundPort: .MACRO

CPL   SoundPort

.ENDM

;------------------------------------------------------------------; Разрешение генерации звука

;------------------------------------------------------------------SetSoundOn:  .MACRO

SETB   SoundOn

.ENDM

;------------------------------------------------------------------; Запрет генерации звука

;------------------------------------------------------------------ResetSoundOn:  .MACRO

CLR   SoundOn

.ENDM

;------------------------------------------------------------------; Сброс бита ошибки

;------------------------------------------------------------------ResetSoundError:  .MACRO

CLR   SoundError

.ENDM

;------------------------------------------------------------------; Сброс бита нажатой клавиши

;------------------------------------------------------------------ResetSoundPrKey:  .MACRO

CLR   SoundPrKey

.ENDM

;------------------------------------------------------------------; Сброс звукового порта

;------------------------------------------------------------------ResetSoundPort: .MACRO

CLR   SoundPort

.ENDM

;------------------------------------------------------------------;Формирование одной посылки (инициализация )

;------------------------------------------------------------------LoadDataPrKey:   .MACRO

MOV   DataCntT,#CntTDat1

MOV   DataCntT1,#CntT1Dat1

MOV   DataCntT2,#CntT2Dat1

MOV   DataCntCycl,#CntCyclDat1

MOV   TH1,#TimerT1Dat1

ReloadCnt

SETB  SoundOn

SETB  SoundStart

.ENDM

;------------------------------------------------------------------;Формирование N посылок (инициализация )

;------------------------------------------------------------------LoadDataError:   .MACRO

MOV   DataCntT,#CntTDatN

MOV   DataCntT1,#CntT1DatN

MOV   DataCntT2,#CntT2DatN

MOV   DataCntCycl,#CntCyclDatN

MOV   TH1,#TimerT1DatN

ReloadCnt

SETB  SoundOn

SETB  SoundStart

.ENDM

;------------------------------------------------------------------; Инициализация таймера T1 в режим 2. Управление звуком - бит SoundOn

;------------------------------------------------------------------InitTimerSound:.MACRO

ANL   TMOD,#Mask0Fh

ORL   TMOD,#ModeTimerT1

SETB  TR1

MOV   TH1,#TimerT1Dat1

.ENDM

;------------------------------------------------------------------; Инициализация прерывания таймера T1. Управление звуком - бит SoundOn

;------------------------------------------------------------------InitIntSound:  .MACRO

SETB  ET1

SETB  PT1

SETB  EA

.ENDM

;------------------------------------------------------------------; Инициализация регистров

;------------------------------------------------------------------InitRegSound:  .MACRO

MOV   SP,#AddrSP

DEC   SP

MOV   DataCntT,#CntTDat1

MOV   DataCntT1,#CntT1Dat1

MOV   DataCntT2,#CntT2Dat1

MOV   DataCntCycl,#CntCyclDat1

ReloadCnt

MOV   SoundPSW,#Bank2

.ENDM

;------------------------------------------------------------------***************************   ПРОГРАММА   ***************************

;------------------------------------------------------------------VectIntSeg:    .SECTION

.ORG  0000H

LJMP  InitSound

.ORG  001BH       ;прерывание таймера T1

LJMP  MakeSound

InitSeg:       .SECTION

InitSound:     InitTimerSound

InitIntSound

InitRegSound

I0:            SJMP   IO      ;бесконечный цикл - имитация

;    основной программы

.CODE

RunSound:      JNB   SoundError,M2

LoadDataError

SJMP  M1

M2:            JMB   SoundPrKey,EndRunSound

LoadDataPrKey

M1:            RestoreSoundPSW

DJNZ  CntT1,RS1

ReloadCntT1

DJNZ  CntT2,RS1

ReloadCntT2

InvertSoundOn

DJNZ  CntCycl,RS1

ResetSoundOn

ResetSoundPort

ResetSoundError

ResetSoundPrKey

RS1:           SaveSoundPSW

EndRunSound:   RETI

MakeSound:     JNB   SoundOn,EndSound

RestoreSoundPSW

DJNZ  CntT,S1

ReloadCntT

InvertSoundPort

S1:            SaveSoundPSW

EndSound:      RETI

.END