\
АВТОМ АТИКА
\
Листинг программы на Ассемблере
INCLUDE " 1 2 0 0 d e f. ІПС"
Программа "Четыре ШИМ на одном микроконтроллере"
Написана для AT9US120U.
3
;
Вектор сброса
rjmp reset
Здесь мы оказываемся при возникновении прерываний от таймера.
p w i_ l:
out tc n tO .rli
in с г 16
a nd :
rl€,,$n
ері г 16,0
orne pw: і
out p o rtb ,rib
cp r!6 ,r2 1
brne pwi_2
cbi p o rtb ,4
; Вектор прерывания по переполнению таймера
;'->с1Гр7Ж<аеМ тайме.р
/Додаем единицу к регистру п б
.•Обнуляем шесть старших битов
.•Сравниваем регистр г константой
.-Переходим на ры1_1 если не равно
/Выводим регистр в порт В {устанавливаем
;лог. 1 на выходах всех ШИМ)
/Сравниваем содержимое регистров
/Пропускаем если не равно
/Если же равно, то устанавливаем лог. О
/на выходе 1-го ШИМ
ер г 16, г 22
brne pwi_3
CDі p o rtb ,5
cp rl6 ,r2 3
brne pwi_4
cbi p o rtb ,6
cp rl6 ,r2 4
brne e x it
cbi
portb
, 1
• re t і
і; -л’or*., места
зег
r 31
out
ddrb, r'-ii
Н і
r3 i,$ f
out
portb,r31
c l г
r31
out
ddrd, r31
зег
r 31
out
portd,r31
Id i
r3 1,2
out
timsk, r 31
Id i
r31, 1
out
teem ,r31
Id i
r 18,$ f1
Id i
r l " , $28
Id i
r25, 0
Id i
r26,
id i
r21, 4
id i
і 2 2. 4
Id i
r23,
4
id :
r24, 4
, i .
t I 9, і
/Сравниваем содержимое регистров
/Пропускаем если не равно
/Если же равно то устанавливаем лог. О
/на выходе 2-го ШИМа
/Сравниваем содержимое регистров
/Пропускаем если не равно
/Если же равно то устанавливаем лог. О
/на выходе 3-го ШИМа
/Сравниваем содержимое регистров
/Пропускаем если не равно
/Если же равно то устанавливаем лог. О
/на выходе 4-го ШИМа
/Выходим с обработчика прерываний
собственно п начинается основная программа.
/Устанавливаем направление работы порта В
/Устанавливаем соответствующие уровни
/Устанавливаем направление работы порта В
/Включаем подтягивающие резисторы
/Разрешаем прерывания по переполнению
; таймера/счетчика
/Синхронизируем работу таймера напрямую
; от тактового генератора
/Начальное значение скважности 1-го ШИМ
/Начальное значение скважности 2-го ШИМ
/Начальное значение скважности 3-го ШИМ
/Начальное значение скважности 4-го ШИМ
sbic p in d ,4
г imp scan ;
sei
teal 1 pans
SbiS pitld,
rjmp up
.-І.'ІЗ D11 id,
limp down
sbis pind,
rjmp le ft
sbis pind,
rjmp rig h t
sbis pind,
rjmp o ff
rjmp scan
sbic pinb,
rjmp up_l
sbic pinb,
rjmp up_2
sbic pinb,
rjmp up_3
sb :r pinb,
rjmp up 4
Щ
. 1
:
cpse
21, r2
/Проверяем не нажата ли кнопка "On/Off"
/Разрешаем прерывания
/Вызываем подпрограмму паузы
/Проверяем не нажата ли кнопка "Up"
/Проверяем не нажат« ли кнопка "Down"
/Проверяем не нажата ли кнопка "L e ft"
/Проверяем не нажата ли кнопка "R ight"
/Проверяем не нажата ли кнопка "On/Off"
; Возвращаемся назад на сканирование клавиатуры
/Проверяем не горит ли 1-ый светодиод
/Проверяем не горит ли 2-ый светодиод
/Проверяем не горит ли 3-ый светодиод
/Проверяем не горит ли 4-ый светодиод
/Проверяем не максимальное ли значение 1-го ШИМ
inc г21
r c a ll pause
rjmp scan
up_2
:
cpse r22,r26
inc r22
re a li pause
rjmp scan
up_3:
cpse r2 3, r2 6
in c r23
rc a ll pause
rjmp scan
up_4 :
cpse r24,r26
inc r24
rc a ll pause
rjmp scan
down:
sbic p in b ,0
rjmp down_l
sbic p in b ,1
rjmp down_2
sbic p in b ,2
rjmp down_3
sbic pinb,3
rjmp down_4
down_l:
cpse r21,r25
dec r21
r c a ll pause
rjmp scan
down_2:
cpse r22,r25
dec r22
r c a ll pause
rjmp scan
down_3:
cpse r23,r25
dec r23
rc a ll pause
rjmp scan
down_4:
cpse r24,r25
dec r24
rc a ll pause
rjmp scan
l e f t :
sbre r l 9,3
rjmp le ft_ l
c lc
s i rl9
Id i rl8,$fO
or r l8 ,r l9
le f t _ l:
r c a ll pause
rjmp scan
rig h t:
sbre rl9 ,0
rjmp rig h t_ l
c lc
Is r r l 9
Id i rl8 ,$ f0
or r l8 , r l9
r ig h t_ l:
rc a ll pause
rjmp scan
o f f :
c li
Id i r3 1,$ f
out portb, r31
re a l! pause
rjmp scan_on
/Если нет то увеличиваем значение 1-го ШИМ
; Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
/Проверяем не максимальное ли значение 2-го ШИМ
/Если нет то увеличиваем значение 2-го ШИМ
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
/Проверяем не максимальное ли значение 3-го ШИМ
/Если нет то увеличиваем значение з-го ШИМ
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование: кпавиатуры
/Проверяем не максимальное пи значение 4-го ШИМ
/Если нет го увеличиваем значение 4-го ШИМ
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
/Проверяем не горит ли 1-ый светодиод
/Проверяем не горит ли 2-ый светодиод
/Проверяем не горит ли 3-ый светодиод
/Проверяем не горит ли 4-ый светодиод
/Проверяем не минимальное ли значение 1-го ШИМа
/Если нет то уменьшаем значение 1-го ШИМа
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
/Проверяем не минимальное ли значение 2-го ШИМа
/Если нет то уменьшаем значение 2-го ШИМа
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
/Проверяем не минимальное ли значение 3-го ШИМа
/Если нет то уменьшаем значение 3-го ШИМа
; Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
/Проверяем не минимальное ли значение 4-го ШИМа
/Если нет то уменьшаем значение 4-го ШИМа
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
; Проверяем не горит ли конечный левый светодиод
/Очищаем флаг переноса
/Смещаем содержимое регистра влево
/Формируем в старшем полубайте все лог. 1,
/а в младшем код светодиода, который будет
; гореть
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование клавиатуры
/Проверяем, не горит ли конечный правый
; светодиод
/Очищаем флаг переноса
/Смещаем содержимое регистра вправо
/Формируем в старшем полубайте все лог. 1,
/а в младшем код светодиода, который будет
; гореть
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование кпавнат-.ры
/Запрещаем прерывания
/Устанавливаем лог. и на выходах ШИМов
/Вызываем подпрограмму задержки
/Возвращаемся назад на сканирование кнопки
; " О п ^ ^ '
Подпрограмма задержки.
Основная её задача защита от дребезга контактов кнопок.
pause:
Id i
r31, 12
D_3:
c lr
r30
/Обнуляем регистр
D_2:
c lr
r29
/Обнуляем регистр
D 1:
dec
r29
/Отнимаем единицу от значения данного регистра
brne
D
/Проверяем условие перехода
dec
гЗО
/Отнимаем единицу от значения данного регистра
brne
D 2
/Проверяем условие перехода
dec
R31
/Отнимаем единицу от значения данного регистра
brne
D_3
/Проверяем условие перехода
re t
; Выходим из подпрограммы
EXIT
»
I
1 Радиолюбитель - 0 //2004
предыдущая страница 7 Радиолюбитель 2004-07 читать онлайн следующая страница 9 Радиолюбитель 2004-07 читать онлайн Домой Выключить/включить текст