Переключатель гирлянд на Atmega16

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Переключатель гирлянд на Atmega16

Сообщение amirus »

Доброго времени суток. Пытаюсь в первые самостоятельно написать переключатель гирлянд, прошу сильно не пинайте. Светодиодики бегут, вроде нормально. Хочу добавить немного других эффектов, но попал в ступор. Вот сам текст программы, подскажите пожалуйста, как сделать чтобы эта команда повторилась к примеру восемь раз, и после перешла к примеру к другой? Заранее благодарен за помощь.

Код: Выделить всё

{ 
     rab = 0b10000000;  // Сдвиг вправо
     while (rab!=0) 
        { 
        PORTB=rab^0xFF;  // Запись в порт 
        rab = rab >> 1;  // Сдвиг 
        wait1 ();  // Задержка 
        }  
     }  
Реклама
diehard
Встал на лапы
Сообщения: 101
Зарегистрирован: Вт дек 05, 2006 23:17:02
Откуда: Краснодарский край

Re: Программа на atmega16

Сообщение diehard »

Например так:

Код: Выделить всё

 
for(char i=0;i<8;i++)
{
     rab = 0b10000000;  // Сдвиг вправо
     while (rab!=0) 
      { 
              PORTB=rab^0xFF;  // Запись в порт 
              rab = rab >> 1;  // Сдвиг 
              wait1 ();  // Задержка 
       }
}
Реклама
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

или так (ассемблерная вставка)

Код: Выделить всё

i=0;//вводим i и присваиваем 0
m1:{ 
     rab = 0b10000000;  // Сдвиг вправо
     while (rab!=0) 
        { 
        PORTB=rab^0xFF;  // Запись в порт 
        rab = rab >> 1;  // Сдвиг 
        wait1 ();  // Задержка 
        }  
     } 
i=i+1;//увеличиваем на 1
if i<8 goto m1;//для 8 повторов переход на метку m1
else goto m 2;//переход на другой эфект под меткой m2
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Re: Программа на atmega16

Сообщение amirus »

Спасибо огромное. Если пишу как подсказал ув.diehard при компиляции выходят три ошибки. Пытаюсь учиться по книге Белова, и ничего не могу найти по этим командам. Вот что получилось
Пишу на CV

Код: Выделить всё

#include <mega16.h>
#include <delay.h>

void wait1 (void)
{
  TCNT1=0;
  while (TCNT1<200) {};
}
void main(void)
{
unsigned char rab;
        
while (1)
  {
  for (char i=0;i<8;i++)
{
     rab = 0b10000000;  // Сдвиг вправо
     while (rab!=0)
      {
              PORTB=rab^0xFF;  // Запись в порт
              rab = rab >> 1;  // Сдвиг
              wait1 ();  // Задержка
       }
}
   };  
}
Указывает что не верна эта строчка "for (char i=0;i<8;i++)"

А вот по подсказке увК@Т кажись мне очень будет тяжело. Тоже не смог вставить его. Вот эта строчка, на которую ругается компилятор

Код: Выделить всё

else goto m 2;//переход на другой эфект под меткой m2
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Программа на atmega16

Сообщение Аlex »

Указывает что не верна эта строчка "for (char i=0;i<8;i++)"
Попробуйте так

Код: Выделить всё

void main(void)
{
unsigned char i;
...
...

for (i=0;i<8;i++)
...
...
Реклама
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Re: Программа на atmega16

Сообщение amirus »

Вау!!! Спасибо ОГРОМНОЕ!!! Получилось, работает! Теперь надо почитать про это дело. :beer: :beer: :beer:
Реклама
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

amirus писал(а):
А вот по подсказке увК@Т кажись мне очень будет тяжело. Тоже не смог вставить его. Вот эта строчка, на которую ругается компилятор

Код: Выделить всё

else goto m 2;//переход на другой эфект под меткой m2
А Вы пометили меткой m2 другой эфект?Ещё советую i сделать глобальной переменной и во всех
эфектах ей считать последовательно. :)
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Программа на atmega16

Сообщение BCluster »

Господин К@Т написал истинно индусское решение :)) с целыми 2 goto там где они ваще не впились )

И где там ассемблерная вставка?
К@Т писал(а):Ещё советую i сделать глобальной переменной
И ПОБОЛЬШЕ глобальных переменных, а то когда их мало скучно жить.

Идеально когда вообще нет глобальных переменных
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Re: Программа на atmega16

Сообщение amirus »

К@Т писал(а):
amirus писал(а): А Вы пометили меткой m2 другой эфект? Ещё советую i сделать глобальной переменной и во всех
эфектах ей считать последовательно. :)
Ну, наверное до таких решений мне очень далеко. Но, я буду стараться, спасибо огромное за подсказки. Я думаю нормальный программист то что я пишу, напишет в двух строчках, а я двумя эффектами умудряюсь почти забить треть памяти меги :)) Еще ни как не могу решить как сделать эффект бегущей тени и эффект накапливания. И исходников на С не могу найти, все что нашел либо на баскоме, либо на асме.
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

BCluster писал(а):
И где там ассемблерная вставка?
Учите языки,а то так скоро Delfi с С попутаете(подсказка разница не в командах а в их расписывании). :)
BCluster писал(а):


И ПОБОЛЬШЕ глобальных переменных, а то когда их мало скучно жить.

Идеально когда вообще нет глобальных переменных
Одна глобальная переменная займёт
меньше памяти камня чем например 10 локальных(т.е. если 10 эфектов и повторы в них будут считать локальные). :)
amirus писал(а):Я думаю нормальный программист то что я пишу, напишет в двух строчках,
Не надо в исходнике добиватса двух строчек,их надо в хексине добиватса.Например пога написаная на ассемблере имеет исходник в разы больше сишного,а вот хексина наоборот меньше получаетса. :)
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Программа на atmega16

Сообщение Аlex »

К@Т писал(а):Учите языки,а то так скоро Delfi с С попутаете
Я вот тоже не увидел там никакой вставки. Может мы не туда смотрим :shock:
Одна глобальная переменная займёт меньше памяти камня чем например 10 локальных
А одна локальная меньше чем 10 глобальных. И что ? :)))
И ещё не факт, что 10 локальных займут больше одной глобальной. Всё будет зависеть от положения вызовов ф-ий, в которых находятся локальные переменные.
Да и вообще, глупо использовать глобальную переменную в одном месте программы. Она не для этого предназначена.
К@Т писал(а):а вот хексина наоборот меньше получаетса.
И тут можно поспорить. С дури, как говориться, можно и х... (хвост) сломать. Хотя..., не мудрено, с Вашими советами.
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

Аlex писал(а): Да и вообще, глупо использовать глобальную переменную в одном месте программы.
Не в одном эфекте а во всех для последовательного счёта.
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Программа на atmega16

Сообщение BCluster »

К@Т писал(а):Учите языки,а то так скоро Delfi с С попутаете(подсказка разница не в командах а в их расписывании)
Иногда лучше жевать чем говорить, ей богу.
К@Т писал(а):Одна глобальная переменная займёт меньше памяти камня чем например 10 локальных(т.е. если 10 эфектов и повторы в них будут считать локальные)
А с чего бы? Память под переменную будет создана при вызове функции, при завершении функции будет уничтожена.
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

BCluster писал(а): А с чего бы? Память под переменную будет создана при вызове функции, при завершении функции будет уничтожена.
Хексина с 10 локальными будет больше чем с одной глобальной(проверено),а иногда каждый байт на счету.
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Программа на atmega16

Сообщение Аlex »

К@Т писал(а):Хексина с 10 локальными будет больше чем с одной глобальной(проверено)
Вам же говорят - будет зависить от вызова ф-ии. Если будете ф-ии вызывать из одной другую, тогда да, для каждой переменной будет выделена память.
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

Аlex писал(а):
К@Т писал(а):Хексина с 10 локальными будет больше чем с одной глобальной(проверено)
Вам же говорят - будет зависить от вызова ф-ии. Если будете ф-ии вызывать из одной другую, тогда да, для каждой переменной будет выделена память.
Я про это и толкую.
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Программа на atmega16

Сообщение Аlex »

К@Т писал(а):Я про это и толкую.
Про что ? Что нужно, для всех ф-ий, использовать одну переменную ? Причём эти ф-ии будут вызываться друг из друга ?
Ню-ню... Дерзайте... В скором будущем глюк Вам обеспечен.
Глобальная переменная нужна только в случае обмена данными между модулями/функциями. В остальных случаях - только локальные переменные.
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

Аlex писал(а):
К@Т писал(а):Я про это и толкую.
Про что ? Что нужно, для всех ф-ий, использовать одну переменную ? Причём эти ф-ии будут вызываться друг из друга ?
Ню-ню... Дерзайте... В скором будущем глюк Вам обеспечен.
Уже 2 новых года встречал с герляндой на 56 эфектом с кодом написанной подобным образом(т.е.с одной глобольной переменной) и глюков не было скоро третий будет и интересно когда её заглючит? :)
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Программа на atmega16

Сообщение Аlex »

интересно когда её заглючит?
Гирлянду, может и никогда.
Если так и будете делать только гирлянды, то шансы поймать глюк не увеличатся :)
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

Аlex писал(а):
интересно когда её заглючит?
Гирлянду, может и никогда.
Если так и будете делать только гирлянды, то шансы поймать глюк не увеличатся :)
А ТС что делает?Разве не гирлянду? :)
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»