Разработка и исследование управляющих программ для микроконтроллеров PIC16F84. Принципиальная схема лабораторного макета, страница 3

; Основная программа

call     delay               ; вызов подпрограммы задержки  delay         

delay                                        ; подпрограмма временной задержки

movlw   d’82’          ; загрузка константы  H’L’ в регистр W

movwf   COUNT1     ; пересылка содержимого W в регистр COUNT1

loopd

decfsz    COUNT1,F  ; декремент COUNT1, пропустить команду,

; если (COUNT1) = 0

goto       loopd            ; повторение цикла  H’L’  раз

return

Задание 6.

Для формирования больших задержек времени, лежащих в диапазоне долей и единиц секунд, используются вложенные циклы. Рассмотрим пример формирования временной задержки с двумя вложенными циклами. Определим значение константы  L  для получения длительности задержки  20 мс. Эта задержка буде использоваться в дальнейших программах управления.

Время исполнения внутреннего цикла подпрограммы  delay_2  составляет  3 * 256 + 4  машинных циклов  МК, поэтому общая задержка составит

TD = [5 + (3 * 256 + 4) * L]* Tц.

При тактовой частоте  Fosc = 2 МГц  время цикла равно  Тц = 2 мкс. Тогда

L=(TD – 707 Tц)/4 Tц =(20мс – 707*2мкс)|4*2мкс=2323

Основная программа:

call      delay_2

delay_2

movlw     0x913             ; загрузка константы  h’L’ в регистр  W

movwf     COUNT2   ; пересылка содержимого W в регистр  COUNT2

clrf           COUNT1   ; очистка регистра  COUNT1

loopd

decfsz       COUNT1,F  ; декремент COUNT1

goto          loopd            ; повторение цикла  256  раз

decfsz       COUNT2,F  ; декремент COUNT2

goto          loopd            ; повторение цикла  h’L’ раз

return                             ; возврат из подпрограммы

Задание 7.

Рассмотрим далее несколько программ с использованием подпрограмм формирования задержки времени. Допустим, необходимо разработать программу, которая подает звуковой сигнал на динамик  BA1 при нажатии на кнопку SB1. Динамик будет звучать только в том случае, если на вывод RA0 будет подан периодически изменяющийся сигнал (например, типа «меандр»). Для того, чтобы звук был хорошо слышен, его частота должна находиться вблизи максимума слышимости человеческого уха. Выберем частоту звучания равной  1 КГц, что соответствует периоду следования импульсов сигнала  1 мс.

Основная программа:

loop

call    get_RA         ; вызов подпрограммы  get_RA

call    SB1_BA1     ; вызов подпрограммы  SB1_BA1

goto   loop              ; переход на метку  loop для  повторения процесса

; Подпрограмма чтения состояния порта А

get_RA

movf PORTA,W      ; Пересылка состояния порта A в регистр W

movwf TEMPA  ; Пересылка содержимого W в регистр TEMPA

return

; Подпрограмма подачи звука на динамик  BA1 при нажатии на кнопку SB1

SB1_BA1

BTFSS TEMPA,4                   ; пропустить команду, если

; TEMPA,4 = 1 (кнопка не нажата)

goto       met0

BSF PORTA,0                      ;подача высокого уровня на  RA0

call del05ms                    ; вызов подпрограммы задержки на 0,5 мс

BCF PORTA,1                      ; подача низкого уровня на  RA0

call del05ms                   ; вызов подпрограммы задержки на 0,5 мс

met0

return

#include "del05ms.asm"

Задание 8.

Рассмотрим программу, которая заставляет мигать светодиод VD1 при нажатии на кнопку SB1. Для того, чтобы мигания были хорошо видны, выберем их частоту равной 1 Гц (период 1 с).

Основная программа:

loop

call   get_RA                 ; вызов подпрограммы  get_RA

call   SB1_VD1M          ; вызов подпрограммы  SB1_VD1M

goto  loop                      ; переход на метку  loop  для

; повторения процесса

; Подпрограмма чтения состояния порта А

get_RA

movf PORTA,W      ; Пересылка состояния порта A в регистр W

movwf TEMPA      ; Пересылка содержимого W в регистр TEMPA

return

; Подпрограмма мигания светодиода  VD1 при нажатии на кнопку  SB1