Il
АВТОМАТИКА
і
единицу, на РВ1 должен быть включен подтягивающий резистор, так как внешнего резистора на схеме нет. Для
одновременного управления всеми выходными линиями удобно использовать маски:
;Ports definition:
equ
LEDl
= exp2(РВ0)
;IR LED port 1
equ
PBTN
= exp2(PB1)
;push button port
equ
LED2
= exp2(PB2)
;IR LED port 2
equ
LED3
exp2(PB3)
;IR LED port 3
equ
LED4
= exp2(PB4)
;IR LED port 4
equ
LED
= LEDl 1 LED2 1 LED3 -1 LED4
equ
DIRB
=
LED
;port В direction
equ
PUPB'
= PBTN 1 LED
;port В pull--ups/initial
equ
LED_ON_MASK = PBTN & -LED
;mask to switsh LED on
equ
LED_OFF_MASK = PBTN 1 LED
;mask to switsh LED off
Для реализации временных интервалов потребуется функция задержки. Поскольку программа намечается
маленькой по объему, можно себе позволить вместо вызова подпрограмм использовать макросы. Каждый раз
при использовании макроса его тело будет вставлено в программу, что увеличивает размер кода, зато не тра-
тится время на вызов подпрограммы и на возврат в основную программу. Базовая процедура задержки, напи-
санная в виде макроса, обеспечивает точность задания задержки в один цикл процессора. Величина задержки
в циклах задаётся в виде параметра. Разумеется, есть ограничение снизу: если задано количество циклов
меньше 3, задержка выполнится некорректно. Но нам не нужны столь малые задержки.
;Масго: generate delay @0 [Cycles]:
.macro Delay
.if (00 % 3) > 1
nop
.endif
.if (00 % 3) > 0
. endif
loop:
nop
ldi
Cnt,int
(00
/ 3)
;
1
dec
Cnt
;
1
brne
loop
; 2 ( 1 )
. endm
Передаваемая посылка состоит из модулированных импульсов и пауз между ними. Сначала напишем мак-
рос формирования импульса заданной длительности с модуляцией заданной частотой. Длительность импульса
в микросекундах передается в виде параметра. Нужные значения задержек в циклах процессора будут вычис-
лены на этапе трансляции с использованием описанных в начале программы констант. Это позволяет перехо-
дить на другую тактовую частоту процессора или другую частоту модуляции просто изменив значение соответ-
ствующей константы:
;Масго: generate modulated with FMOD [Hz] IR pulse @0 [uS]:
.equ
MCYC = FCLK / FMOD
,-modulation period [cycles]
.equ
MCYC1 = MCYC / 2
;
LED on duration [cycles]
.equ
MCYÇ0 = MCYC - MCYC1
;
LED off duration [cycles]
.macro Pulse.
ldi
tempL/bytel((00 * FMOD / 100000 - 5] / 10)
ldi
tempH,byte2((00 * FMOD /100000 ^ 5) / 10)
Радиолюбитель - 0 4 /2 0 0 7 У
21
предыдущая страница 21 Радиолюбитель 2007-04 читать онлайн следующая страница 23 Радиолюбитель 2007-04 читать онлайн Домой Выключить/включить текст