STK500+ATmega8515 программа с таймером - AVR
Формулировка задачи:
Здравствуйте.
Прошу вашей помощи в написании программы для ATmega8515 на IAR ассемблере, я в этом деле новичек (студент).
Необходимо написать программу переключения светодиодов с разными частотами. Нажатие на кнопку SB0 должно приводить к переключению индикатора LED0 с периодом 0.5 секунд, нажатие на кнопку SB1 - к переключению LED1 с периодом 2 секунды, нажатие на кнопку SB2 - к переключению индикатора LED2 с периодом 8 секунд. Для формирования прямоугольных импульсов с требуемым периодом повторения необходимо использовать 16-ти разрядный таймер/счетчик Т1 в режиме таймера.
Решение задачи: «STK500+ATmega8515 программа с таймером»
textual
Листинг программы
Flag1 BIT 24h.0 Flag2 BIT 24h.1 Flag11 BIT 24h.2 Flag22 BIT 24h.3 ORG 0 LJMP start ORG 003h SETB Flag11 LJMP interupt ORG 013h SETB Flag22 LJMP interupt ORG 0Bh LJMP TICK0 ORG 1Bh LJMP TICK1 ORG 100h start: MOV A, #00000111B CLR C MOV p1, #00000000B MOV TMOD,#00010001B MOV IE,#10001010B MOV TL1,#11110000B MOV TH1,#11111111B SETB EX0 SETB EX1 SETB TR0 JMP $ interupt: SETB TR1 RETI TICK1: CLR TR1 MOV TL1,#11110000B MOV TH1,#11111111B JNB Flag11, Mark11 XRL 24h, #00000001B CLR Flag11 RETI Mark11: XRL 24h, #00000010B CLR Flag22 RETI TICK0: DEC A JZ INVERT RETI INVERT: MOV A, #00000111B JNB Flag1, Mark1 XRL p1,#00000001B Mark1: JNB Flag2, Mark2 XRL p1,#00000010B Mark2: RETI END
Объяснение кода листинга программы
- Объяснение: В данном коде используется язык ассемблера для программирования микроконтроллеров AVR.
- Код начинается с определения трех битовых флагов: Flag1, Flag2 и Flag11.
- Затем определяются три точки входа: start, interupt и TICK0.
- Функция start() инициализирует регистры микроконтроллера для работы с таймером.
- Функция interupt() обслуживает прерывания от таймера.
- Функция TICK0() обслуживает счетчик с меньшим таймером.
- Функция TICK1() обслуживает счетчик с большим таймером.
- Функция main() является бесконечным циклом, который запускается после инициализации.
- В функции TICK1() происходит проверка бита Flag11. Если он установлен, то происходит инвертирование битов Flag1 и Flag2.
- В функции TICK0() происходит уменьшение значения регистра A на единицу. Если оно достигнет нуля, то происходит инвертирование битов Flag1 и Flag2.
- Если бит Flag1 установлен, то происходит переход в функцию Mark1(). Если бит Flag2 установлен, то происходит переход в функцию Mark2().
- В функции Mark1() происходит проверка бита Flag2. Если он установлен, то происходит инвертирование бита Flag2.
- В функции Mark2() происходит инвертирование бита Flag1.
- В конце кода возвращается управление в функцию main().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д