Министерство образования Российской Федерации
Российский государственный профессионально-педагогический университет
Инженерно-педагогический институт
Лабораторная работа №4
Изучение программирования таймеров-счетчиков
Выполнили:
Проверил: Садовников М.Е.
Екатеринбург 2008
Цель работы:
Изучение функционирования таймеров/счетчиков микроконтроллеров АТ90S8535, получение практических навыков в их программировании.
Задача:
Запрограммировать таймер/счетчик2 для работы в ШИМ режиме для выдачи импульсов на вывод PD7 (OC2) микроконтроллера, к которому подключен звукоизлучатель HA1. При нажатии на кнопку SB1 частота ШИМ уменьшается, а при одновременном нажатии двух кнопок SB1 и SB2 – увеличивается. Уменьшение и увеличение частоты импульсов оценивается по изменению тона звучания звукоизлучателя.
Решение задачи в общем виде:
Частота и включенность счетчика зависит от состояния 3-х битов CS22,CS21,CS20. Частота ТС2 может изменяться в пределах от CK/1024 до CK. Для ШИМ эти значения всегда в 510 раз меньше. Если частота МК 8МГц, то при состоянии битов CS22=0,CS21=1,CS20=0 частота ШИМ будет 8000000/8/510=1960Гц. Звук на такой частоте, наверно, можно будет услышать. Для изменения частоты звука программист должен изменять эти биты. Уменьшение и увеличение частоты организовано в виде отдельных подпрограмм.
Признаком нажатия кнопки является то, что ее предыдущее состояние было ненажатое (0 на входе), а сейчас нажатое (1 на входе). Эти состояния отслеживаются в бесконечном цикле.
Блок схема:
Листинг программы:
.include "8535def.inc"
.def freq=r16;регистр в котором хранится текущее состояние TCCR2
.def SB1last=r17;предыдущее состояние SB1 1-нажата, 0-не нажата
.def SB2last=r18;предыдущее состояние SB2 1-нажата, 0-не нажата
.cseg
;vektor reset
.org $000
rjmp start
start:;начало основной программы
;НАСТРОЙКА ПОРТОВ
cbi DDRA,1;1-й бит на вход - SB1
cbi DDRA,2;2-й бит на вход - SB2
sbi DDRD,7;7-й бит на выход - PD7(OC7)- HA1
clr SB1last;сначала кнопки не нажаты
clr SB2last;=>обнуляем
ldi freq,$80 ;значение сравнения записываем в регистр
out OCR2,freq;сравнения тайм.сч.2
;ВЫБОР ДЕЛИТЕЛЯ ЧАСТОТЫ, ВКЛЮЧЕНИЕ ШИМ
ldi freq,$74 ;соответствует частоте CK/64/1024
out TCCR2,freq;TCCR2<--freq
m1: ;ОСНОВНОЙ ЦИКЛ РАБОТЫ ПРОГРАММЫ
sbic PINA,1;пропустить следующую команду, если НЕ нажата
rjmp SB1on ;кнопка SB1
ldi SB1last,0;сбросить признак нажатости кнопки
sbic PINA,2;пропустить следующую команду, если бит 2
rjmp SB2on1;в регистре А очищен (НЕ нажата SB2)
ldi SB2last,0;сбросить признак нажатости кнопки
rjmp m1
SB2on1:
ldi SB2last,1;установить признак нажатости кнопки
rjmp m1
SB1on: ;когда нажата кнопка SB1
sbic PINA,2;пропустить следующую команду, если НЕ нажата
rjmp SB2on2 ;кнопка SB2
cpi SB1last,0;сравнить SB1last и 0
brne ne0 ;и если не равно перейти на метку ne0
rcall DecFrq;вызов подпрограммы уменьшения частоты шим
ne0:
rjmp endif2
SB2on2:
cpi SB1last,0;сравнить SB1last и 0
brne ne01 ;и если не равно перейти на метку ne01
rcall IncFrq;вызов подпрограммы увеличения частоты шим
rjmp endif3
ne01:
cpi SB2last,0;сравнить SB2last и 0
brne endif3 ;и если не равно перейти на метку endif3
rcall IncFrq;вызов подпрограммы увеличения частоты шим
endif3:
ldi SB2last,1;загрузить 1 в SB2last
rjmp endif2
endif2:;конец проверки кнопки SB2
ldi SB1last,1;установить признак нажатости кнопки
rjmp m1
;ПОДПРОГРАММА УВЕЛИЧЕНИЯ ЧАСТОТЫ ШИМ
IncFrq:
cpi freq,$71
breq x71
dec freq;freq=freq-1
out TCCR2,freq;TCCR2<--freq
x71:
ret
;ПОДПРОГРАММА УМЕНЬШЕНИЯ ЧАСТОТЫ ШИМ
DecFrq:
cpi freq,$77
breq x77
inc freq;freq=freq+1
out TCCR2,freq;TCCR2<--freq
x77:
ret
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.