Программирование таймера/счетчика для работы в ШИМ режиме для выдачи импульсов на вывод PD7 (OC2) микроконтроллера

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Министерство образования Российской Федерации

Российский государственный профессионально-педагогический университет

Инженерно-педагогический институт

Кафедра микропроцессорной управляющей вычислительной техники

Лабораторная работа №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

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.