Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2016, 22:28   #1
serejagogogo
Новичок
Джуниор
 
Регистрация: 15.12.2016
Сообщений: 1
По умолчанию Программирование микроконтроллера

Нужно запрограммировать микроконтроллер, чтобы происходило заполнение слева направо и очищение в обратном порядке светодиодов на его портах. Написал такой код:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRD = 0xFF;
PORTD = 0x00;
while (1) {
for (int i = 0; i<8; i++)
{
PORTD |= (1 << i);
_delay_ms(250);
}
for (int i = 1; i<8; i++)
{
PORTD |= (1 << i);
}
for (int i = 2; i<8; i++)
{
PORTD |= (1 << i);
}
for (int i = 3; i<8; i++)
{
PORTD |= (1 << i);
}
for (int i = 4; i<8; i++)
{
PORTD |= (1 << i);
}
for (int i = 5; i<8; i++)
{
PORTD |= (1 << i);
}
for (int i = 6; i<8; i++)
{
PORTD |= (1 << i);
}
for (int i = 7; i<8; i++)
{
PORTD |= (1 << i);
}

for (int i = 7; i<8; i++)
{
PORTD &= ~(1 << i);
_delay_ms(250);
}
for (int i = 6; i<8; i++)
{
PORTD &= ~(1 << i);
}
for (int i = 5; i<8; i++)
{
PORTD &= ~(1 << i);
}
for (int i = 4; i<8; i++)
{
PORTD &= ~(1 << i);
}
for (int i = 3; i<8; i++)
{
PORTD &= ~(1 << i);
}
for (int i = 2; i<8; i++)
{
PORTD &= ~(1 << i);
}
for (int i = 1; i<8; i++)
{
PORTD &= ~(1 << i);
}
for (int i = 0; i<8; i++)
{
PORTD &= ~(1 << i);
}

}
}
И если при заполнении всё работает отлично, то при очищении всё выключается мгновенно. Если прописать задержки после каждой команды, то они начинают складываться, и последний светодиод гаснет только через несколько секунд. Подскажите, пожалуйста, в чём проблема, и как её решить.
serejagogogo вне форума Ответить с цитированием
Старый 16.12.2016, 13:51   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Че это вы намудрили то?? зачем столько кода??


Код:
PORTD = 0x00;

// заполнение при условии что все линии на одном порту
  for (i= 0; i< 8; i++) {
        _delay_ms(250);
        PORTD |=  (1 << i);
    }
// очистка
    for (i= 0; i< 8; i++) {
        _delay_ms(250);
        PORTD &= ~(1 << i);
    }
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование микроконтроллера Irin_a C/C++ Сетевое программирование 10 20.04.2013 14:10
Программирование микроконтроллера ros.pro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 15 26.05.2012 23:45
программирование микроконтроллера мк51 Nulled_ Фриланс 1 16.10.2009 21:02
программирование микроконтроллера МК51 Nulled_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.10.2009 13:25
Программирование микроконтроллера 80С196КС на ассемблере KOCT9IH Фриланс 3 07.11.2008 13:03