;------------------------------------------------------------------;Перезагрузка счетчика 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.