************************** MCS51 *******************************
*********************************************************************
* К У Р С О В А Я Р А Б О Т А *
* на тему: *
* выполнил : ст гр. *
* ФИО (полностью) *
*********************************************************************
* Программа вывода звуковых сигналов *
* на МК КР1816ВЕ51 *
* Исходные данные: *
* *
*********************************************************************
.FILLCHAR 00h ;Заполнить промежутки между секциями нулями.
;-------------------------------------------------------------------;****************** КОНСТАНТЫ и ПЕРЕМЕННЫЕ ********************
;-------------------------------------------------------------------;Клавиша нажата: частота F1 - 1500 Гц; длительность посылки Т1 = 0.2 с.
;Сигнал ошибки: Np = 5 посылок частотой F2 = 3000 Гц,
; длительностью посылок и пауз T2 = 0.8 с.
;Основная прграмма прерывается через T0 = 2.5 мс.(клавиатура, индикатор)
;
;Период частоты F1 равен 666(6)mkc. Если взять 667mkc то F1 = 1499,25Гц,
;а при 666mkc - 1501,5Гц. Для 667mkc полпериода дробно. Берем 666mkc.
;Полпериода - 333mkc. Для его формирования в таймер CT1 в режиме 2 надо
;записать число 111, а в счетчик CntT - 3
;
;Константы
CntTDat1: .EQU 3H ;число 3 и
TimerT1Dat1: .EQU 6FH ; число 111 (6Fh) для формирования F1
CntTDatN: .EQU 1H ;число 1 и
TimerT1DatN: .EQU 0A7H ; число 167 (A7h) для формирования F2
CntCyclDat1: .EQU 1H ;1 для 1 посылки
CntT1Dat1: .EQU 1H ;число 1 и
CntT2Dat1: .EQU 50H ; число 80 (50H) для формирования T1
CntCyclDatN: .EQU 9H ;9 для 5 посылок (CntCykl = 2*Np-1)
CntT1DatN: .EQU 2H ;число 2 и
CntT2DatN: .EQU 0A0h ; число 160 (A0h) для формирования T2
Bank2: .EQU 10H ;2 регистровый банк (для SoundPSW)
ModeTimerT1: .EQU 20H ;T1: таймер в режиме 2 без внешнего управления
Mask0Fh: .EQU 0Fh ;маска для выделения тетрады
;Неперемещаемые регистры
ACC: .REG 0E0H
PSW: .REG 0D0H
TMOD: .REG 89H
TCON: .REG 88H
IE: .REG A8H
IP: .REG B8H
TL1: .REG 8BH
TH1: .REG 8DH
SP: .REG 81h
P3: .REG B0h
.RSECT
;Перемещаемые регистры
CntT: .DS 1 ; счетчики: формирования частот F1 или F2
CntT1: .DS 1 ; формирования длины
CntT2: .DS 1 ; посылки T1 или T2
CntCycl: .DS 1 ; числа посылок Np: CntCycl = 2*Np - 1
SoundPSW: .DS 1 ;хранение PSW для звука
VarPSW: .DS 1 ;хранение текущего PSW
DataCntT: .DS 1 ;хранение начальных данных
DataCntT1: .DS 1 ; для счетчиков
DataCntT2: .DS 1 ; CntT, CntT1, CntT2 и
DataCntCycl: .DS 1 ; CntCycl
AddrSP: .DS 8 ;область под стек
;Неперемещаемые биты
TR1: .REG TCON.6
EA: .REG IE.7
ET1: .REG IE.3
PT1: .REG IP.3
SoundPort: .REG P3.7 ;звуковой порт
.BSECT
;Перемещаемые биты
SoundOn: .DS 1 ;1/0 - включить/выключить звук
SoundError: .DS 1 ;признак сигнала ошибки
SoundPrKey: .DS 1 ;признак сигнала нажатой клавиши
.DATA
;------------------------------------------------------------------*************************** МАКРОСЫ ***************************
;------------------------------------------------------------------;Используются следующие регистры банка RB2 для хранения текущих значений:
;
;
;------------------------------------------------------------------;Сохранение текущего PSW в регистре VarPSW и восстановление SoundPSW
;------------------------------------------------------------------RestoreSoundPSW: .MACRO
MOV VarPSW,PSW
MOV PSW,SoundPSW
.ENDM
;------------------------------------------------------------------;Сохранение SoundPSW и установка прежнего PSW
;------------------------------------------------------------------SaveSoundPSW: .MACRO
MOV SoundPSW,PSW
MOV PSW,VarPSW
.ENDM
;------------------------------------------------------------------;Перезагрузка счетчика CntT данными из DSeg
;------------------------------------------------------------------ReloadCntT: .MACRO
MOV CntT,DataCntT
.ENDM
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.