Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
1

Бегущий огонь (работа с прерываниями в Atmel Studio 6.1)

07.08.2015, 16:45. Показов 5205. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, изучаю потихоньку программирование микроконтроллеров AVR в частности Atmega32. Изучаю по книжке Белов А.В. "Разработка устройств на микроконтроллерах AVR". Все понятно и просто, но вот незадача, автор пишет код в CodeVisionAVR я же интерпретирую все в Atmel Studio 6.1. Поэтому возникают некоторые несовпадения в синтаксисе. Результаты работ я проверяю в Proteus. И вот дошел я до "Бегущего LED", написал с помощью delay.h потом дошел до аппаратной задержки таймером, тоже удачно. И вот автор предложил сделать тоже только с помощью прерываний. В книге есть пример рабочего кода. Попытался переработать для Atmel Studio не пошло по разному объявляются прерывания. Почитал библиотечки - нашел. Но тщетно, компилятор не ругается, но и ничего не делает. Подскажите пожалуйста, где я могу ошибаться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#define F_CPU 4000000L
#include <asf.h>
#include <avr/iom32.h>
#include <avr/interrupt.h>
 
unsigned char reg;
ISR(TIMER1_COMPA_vect) 
{
    if (PINA == 0x01)                       //опрос кнопки если отжата то сдвигаем регистр вправо.
    {
        reg = reg >> 1;
        if (reg == 0) reg = 0b10000000; 
    }
    else                                    // если надата сдвигаем влево
    {
        reg = reg << 1;
        if (reg == 0) reg = 0b00000001;
    }
    PORTB = ~reg;                           // записываем в порт Б
}
int main(void)
{
    DDRA = 0x00;
    PORTA = 0x01;               // кнопка вкл/выкл
    DDRD = 0xFF;                // выводы LED
    PORTD = 0xFF;
    TCCR1A = 0x00;
    TCCR1B = 0x0D;             //CK/1024
    TCNT1H = 0x00;
    TCNT1L = 0x00;
    ICR1H = 0x00;
    ICR1L = 0x00; 
    OCR1AH = 0x03;              // 780 в регистре сравнения
    OCR1AL = 0x0C;              
    TIMSK = 0x10;
    
    reg = 0b00010000;           // установка начального значения регистра
    sei();
    while (1){}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2015, 16:45
Ответы с готовыми решениями:

Лабораторная работа . Бегущий огонь
Задание на лабораторную работу Система команд микроконтроллеров Microchip PIC16F84....

Бегущий огонь на ATMega8535
задача на Микроконтроллере mega8535. (фото прикрепил) Фоновая программа реализует бегущий огонь...

Бегущий огонь на ОМК-51
Составить программу «Бегущая огонь» на линиях порта 3 ОМК-51. * Выходные данные: частота «бегущей...

Бегущий светодиодный огонь
Здравствуйте! Раньше занимался AVR-ками но решил попробовать себя и в ARM. Пытаюсь сделать простой...

Бегущий огонь в оба направления
Для решения задачи возврата бегущего огня по тому же пути пришлось задействовать вторую переменную...

4
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 6
15.08.2015, 06:41 2
Непонятно. Управляете Вы портом B, а светодиоды подключаете к порту D.
Ваша программа прекрасно работает в Протеусе, но изменяются состояния порта B, как и предписано в программе.
Или Вы не пробовали симуляцию?
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
15.08.2015, 12:17 3
...схемы видимо тоже нет.
0
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
15.08.2015, 19:59  [ТС] 4
Спасибо, я уже разобрался, промоделировав в протеусе, глупая ошибка)))
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,462
Записей в блоге: 8
16.08.2015, 18:06 5
Вдогонку - при написании кода для avr-gcc я пользовался справкой с http://www.nongnu.org/avr-libc/.
0
16.08.2015, 18:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2015, 18:06
Помогаю со студенческими работами здесь

Бегущий огонь по таймеру переполнения stm32
Добрый вечерок)) Можете подсказать как сделать а-ля бегущий огонёк по таймеру переполнения....

(КР580) Бегущий огонь во 2 строке справа на лево, если нажата первая кнопка
(КР580) Здравствуйте, помогите разработать программу: Бегущий огонь во 2 строке справа налево, если...

Программа "бегущий огонь" на ATMEGA
Написать программу для отображения передвижения двух светодиодов подключенных к порту МК....

Программа "Бегущий огонь" на PIC16f84a
написать программу бегущий огонь на PIC контролере по алгоритму кнопками нажата огонь бежит слева...

Работа с битами в Atmel Studio
Добрый день! Возникла у меня необходимость переделать код IARа под Atmel Studyo 7. Но в IARе...

Работа с EEPROM (ATMel Studio)
Подскажите пожалуйста как это можно сделать. Нужно просто цифру 6 значную записать, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru