АВТОМАТИКА
Л истинг программы
<<2313def - іпс»
Программа «ИК барьер»
Написана для AT90S2313
.org 000
.org 00l
.org 006
r jinp reset
r jmp ext_int0
r jmp tim_ovf0
;Вектор сброса
;Вектор прерываний от вывода INTO
.•Вектор прерываний от таймера/счетчика 0
Подпрограмма обработки прерываний от вывода INTO.
Idi гЗІ,25
rcall pause
■ Вызываем подпрограмму задержки
;Выход из подпрограммы обработки
.прерывания
Подпрограмма обработки прерываний от таймера/счетчика 0.
out tcnt0,rl8
inc rl9
sbrc r!9,0
cbi portd,4
вЬгв rl9,0
sbi portd,4
.-Загружаем таймер длительностью полу
.-периода частоты модуляции
.-Увеличиваем значение регистра
/на единицу
.--Проверяем на четность младший бит г19
.-Устанавливаем на выводе РБ4
.-логический 0
;Проверяем на четность младший бит г19
/Устанавливаем на выводе РБ4
/логическую 1
/Выход из подпрограммы обработки /преры-
С этого места собственно и начинается основная программа.
Idi г16,0Ь01010010
out ddrd,rl6
Idi г16,0Ь01101100
out portd,r!6
Idi rl6,0b0000l000
out ddrb,rl6
Idi rl6,0Ы1110111
out portb,rl6
Idi rl6,$80
out spl,ГІ6
Idi rl6,ObOOOllOOO
out ucr.rlG
; Устанавливаем направление работы
;порта D
г Включаем подтягивающие резисторы
;
Устанавливаем направление работы
;порта В
/Устанавливаем соответствующее уровни
гна выходах порта В
Idi rl6,$ff
out ubrr,rl6
Idi rl6,$l
out tccr0,rl6
Idi rl6,$l
out tccrlb,rl6
Idi rl6,$30
out mcucr ,rl6
Idx rl8,$cb
sei
clr rl
start:
sbis pind,2
rjmp sleep
clr r2
inc rl
rcall uart
sbis usr,rxc
r jmp signal
sbic usr,$e
rjnqp signal
in r2,udr
cpBe rl,r2
rjnp signal_l
Idi r31,l
rcall pause
rjtnp start
signal:
in r2,udr
signal_l:ldi r25,3
/Инициализируем стек
/Разрешаем работу приемника
/и передатчика БАЕТ
/Задаем скорость работы ПАКТ
/‘Синхронизируем работу таймера/счетчиха 0
/на прямую от тактового генератора
; Синхронизируем работу таймера/счетчиха 1
/Разрешаем энергосберегательный режим
/работы микроконтроллера
Задаем полу период частоты модуляции
/ Разрешаем прерывания
/Очищаем регистр
/Проверяем не нажата ли кнопка
/Вели нажата, то переходим на метку з1еер
/Очищаем регистр
/Увеличиваем значение регистра
/на единицу
/Вызываем подпрограмму модуляции сигнала
/Проверяем, принял ли приемник БАЕТ
/переданный байт
/Если нет, то включаем сигнализацию
/Проверяем, не было ли ошибки кадра
/Если была ошибка кадра, то включаем
/ сигнализацию
/Переписываем значение из приемника ЧАЕТ
/в регистр
/Сравниваем переданный и принятый байт
/Если не равно, то включаем сигнализацию
/Возвращаемся в качало цикла
/Переписываем значение из приемника UAET
/Задаем количество сигналов сигнализации
signal_2: Idi гіб, 0Ы1000001
out tccrla,rl6
/Разрешаем работу ШИМ
cbi portd,6
Idi rl6,170
/Гасим светодиод
out ocrlal,rl6
/Задаем частоту ШИМ
Idi гЗІ.Ю
/Задаем время задержки
rcall pause
clr ГІ6
/Вызываем подпрограмму Задержки
out tccrla,rl6
/Запрещаем работу ШИМ
sbi portd,6
/Включаем светодиод
Idi r31,5
/Задаем время задержки
rcall pause
/Вызываем подпрограмму Задержки
dec r25
/Отнимаем единицу от Значения регистра
breq start
/Если нулевое значение, то идем на метку
/start
r jmp signal 2
/Если нет, то повторяем цикл
Sleep:
cbi portd, 6
Idi r31,25
/Гасим светодиод
rcall pause
Idi rl6,$40
/Вызываем подпрограмму задержки
out gimsk,rl6
/Разрешаем прерывания от вывода INTO
sleep
/Переходим а энерхчэсберегателъный режим
sbi portd,6
/Включаем светодиод
Idi rl6,$0
out gimsk,rl6
/Запрещаем прерывания от вывода INTO
rjmp start
/Возвращаемся на start
Подпрограмма модуляции и передачи байта UAET.
uart:
out udr,rl
/Загружаем байт
в
регистр передатчика ПАКТ
up:
out tcnt0,rl8
/Загружаем таймер длительностью полу
/периода частоты модуляции
Idi rl6,$2
out timsk,rl6
/Разрешаем прерывания по переполнению
/таймера/счетчика 0
up 1:
sbis pind,l
/Проверяем логический уровень
/на выводе РБ1
r jrap up__l
Idi rl6,$0
out timsk,rl6
/Запрещаем прерывания по переполнению
/таймера/счетчика 0
cbi portd,4
; Устанавливаем логический 0 на выводе РБ4
down:
sbis pind.l
/Проверяем логический уровень
/на выводе РБ1
rjnp up
sbic usr.txc
/Проверят, не установлен ли флаг
/окончания передачи
r jrnp exit
rjnp down
exit:
sbi usr,txc
/Сбрасываем флаг окончания передачи
ret
/Выходим из подпрограммы
Подпрограмма задержки.
pause:
d 3:
clr гЗО
/Очищаем регистр
d 2:
clr r29
/Очищаем регистр
d 1:
dec r29
/Отнимаем единицу от Значения регистра
b m e d 1
/Проверяем на «ноль»
dec гЗО
/Отнимаем единицу от значения регистра
b m e d 2
/Проверяем на «ноль»
dec r31
/Отнимаем единицу от значения регистра
brne d_3
/Проверяет« на «коль»
ret
/Выходим из подпрогргоесы
0400000010С005С067
10000C0003C0F9E159D0189522BF339530FD94986F
10001C0030FF949A189502E501BB0CE602BB08E090
10002С0007ВВ0 7EF0 8BB00E80DBF08E1OAB9OFEFEB
10003C0009B901E003BF01E00EBD00E305BF2BECF.S
10004С0078941124829B1EC02224139425D05FSB8C
10005C0008C05C9906C02CB0121004C0F1E02CD082
100 0 6СО 0F1CF2 СВ0 9 ЗЕ001EC0FBD96 9 80AEA0ABDD3
10007COOFAE022D000270FBD969AF5E01DD09A9594
10008C0009F3FlCF9698F9E117D000E40BBF8895EE
1OOO9COO969A0OEOOBBFD6CF1CB822BFO2EOO9BF76
1000AC00819BFECF00E009BF9498819BF6CF5E99AF
1000BC0001C0FBCF5E9A0895EE27DD27DA95F1F7A4
OAOOCCOOEA95D 9F7FA95C1F70895F7
00000001FF
Радиолюбитель - 03/2005 |
предыдущая страница 10 Радиолюбитель 2005-03 читать онлайн следующая страница 12 Радиолюбитель 2005-03 читать онлайн Домой Выключить/включить текст