Алгоритм работы микроконтроллера, управляющего воспроизведением сообщений, страница 7

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

; конец программы

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

Приложение 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

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

; конец программы

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