;****************************************
; конец программы
;****************************************
Приложение 4
Программа для работы микроконтроллера, управляющего воспроизведением сообщений
;****************************************
; описание используемых обозначений
;****************************************
porta equ H'05'
portb equ H'06'
status equ H'03'
intcon equ H'0b'
TMRO equ H'01'
TRISA equ H'85'
TRISB equ H'86'
pr0 equ 5
ra0 equ 0
ra1 equ 1
ra2 equ 2
ra3 equ 3
ra4 equ 4
rb0 equ 0
rb1 equ 1
rb2 equ 2
rb3 equ 3
rb4 equ 4
rb5 equ 5
rb6 equ 6
rb7 equ 7
;****************************************
; инициализация портов и таймера
;****************************************
clrf porta ; инициализация порта А
bsf status, pr0
movlw B'00010'
tris porta
clrf portb ; инициализация порта В
movlw B'00111000'
tris portb
bcf status, pr0
PORTS bsf portb, rb7 ; сброс счетчика
bcf portb, rb5 ; установка сигнала выборки ЦАП
bcf portb, rb1 ; установка сигнала запуска ЦАП
bcf portb, rb2 ; установка сигнала управления другим контроллером
bcf porta, ra3 ; установка сигнала управления шиной данных памяти
bcf porta, ra0 ; установка сигнала коммутации аппарата с телефонной сетью
bcf portb, rb7
bcf portb, rb6 ; установка сигнала управления счетчиком
bcf status, pr0 ; таймер отключен
clrf TMRO
bsf status, pr0
clrwdt
movlw B'11111000'
movwf H'81'
bcf status, pr0
;****************************************
; главная программа
;****************************************
BEGIN btfsc portb, rb4 ; выбор режима работы:
goto VOS ; - воспроизведение записей
btfsc portb, rb3
goto ZV ; - запуск автоответчика по звонку
goto BEGIN
ZV btfsc portb, rb5 ; подпрограмма запуска автоответчика при звонке
goto BEGIN
bsf portb, rb7
call TIME
bcf portb, rb7
bsf porta, ra0
nop
nop
WAIT nop
btfss portb, rb5 ; проверка окончания воспроизведения приветствия
goto NEXT ; переход к подпрограмме инициализации другого
clrf TMRO ; контроллера
SUM btfsc TMRO, 6 ; установка частоты дискретизации
goto DA
goto SUM
DA call VOICE ; вызов подпрограммы воспроизведения записей
goto WAIT
NEXT movlw B'01101110'
movwf 0c
call TREC
VF1: decfsz 0c,1 ; проверка окончания времени записи
goto VF2
goto PORTS
VF2: bcf intcon, 2
clrf TMRO
PER: btfsc intcon, 2
goto VF1
btfss porta, ra1 ; проверка наличия связи со звонящим
goto PORTS
bsf portb, rb2 ; установка сигнала управления для другого контроллера
btfsc portb, rb0 ; проверка переполнения памяти
goto PORTS
goto PER
VOS bsf portb, rb7 ; подпрограмма воспроизведения поступивших сообщений
call TIME
bcf portb, rb7
WAIT_V btfsc portb, rb5 ; проверка окончания воспроизведения
goto PORTS
btfss portb, rb4 ; проверка окончания воспроизведения
goto PORTS
clrf TMRO
SUM_V btfsc TMRO, 6 ; установка частоты дискретизации
goto DA_V
goto SUM_V
DA_V call VOICE ; вызов подпрограммы воспроизведения записей
goto WAIT_V
;****************************************
; подпрограммы
;****************************************
TREC: bcf status, pr0 ; установка делителя и запуск таймера длительности записи
clrf TMRO
bsf status, pr0
clrwdt
movlw B'11011111'
movwf H'81'
bcf status, pr0
return
VOICE bsf portb, rb6 ; установка следующего адреса памяти
bsf porta, ra4 ; инициализация микросхемы памяти
bsf porta, ra3 ; установка на выходе памяти данных
bsf portb, rb0 ; запуск ЦАП
bsf portb, rb1 ; запись в буфер ЦАП данных
clrf TMRO
nop ; задержка для окончания работы ЦАП
nop
nop
nop
bcf portb, rb6 ; оключение ЦАП и памяти от шины данных
bcf portb, rb0
bcf portb, rb1
bcf porta, ra4
bcf porta, ra3
return
TIME bcf status, pr0 ; подпрограмма инициализации таймера
clrf TMRO
bsf status, pr0
clrwdt
movlw B'11011000'
movwf H'81'
bcf status, pr0
return
;
end
;****************************************
; конец программы
;****************************************
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.