CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

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

#include <mega8.h>
#include <delay.h> // подключаем библиотеку задержки
char n;

 void main (void)
{
  DDRD=255; // Data Direction Register   Все пины порта D сконфигурированы на выход
  DDRB=0b11111111;
 
  n=0;
  while(n<3)
 {
 PORTB=0b00000001;
 delay_ms(500);
 PORTD=0b00000001;
 delay_ms(500);
 PORTD=0b00000010;
 delay_ms(500);
 PORTD=0b00000100;
 delay_ms(500);
 PORTD=0b00001000;
 delay_ms(500);
 PORTD=0b00010000;
 delay_ms(500);
 PORTD=0b00100000;
 delay_ms(500);
 PORTD=0b01000000;
 delay_ms(500);
 PORTD=0b10000000;
 delay_ms(500);
 n=n+1;
  }
 
}

с помощью данной проги я просто моргаю светодиодами............., почемуто светодиод который подключен к нулевому пину порта В все время горит :dont_know: что я не так написал ? :(
Tell Me The Truth
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: CodeVision AVR в вопросах и ответах

Сообщение Apparatchik »

Ну дык Вы его строкой PORTB=0b00000001; засветили и больше нигде не гасите, вот он и горит :)
«И всё-таки она вертится!»
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

точно, СПАСИБО......, ща закошачу :))
Tell Me The Truth
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

а почему когда в вышеприведенной программе я ставлю n<300 то мен выскакивает такое
Warning: C:\Documents and Settings\User\Рабочий стол\Управление портом ATmega8\Управление портом ATmega8.c(13): pointless integer comparison with an out of range constant
Tell Me The Truth
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

FreshMan писал(а):а почему когда в вышеприведенной программе я ставлю n<300 то мен выскакивает такое
Warning: C:\Documents and Settings\User\Рабочий стол\Управление портом ATmega8\Управление портом ATmega8.c(13): pointless integer comparison with an out of range constant

бессмысленное сравнение целое сравнение с константой вне пределов
В поисках истины человек развивается.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: CodeVision AVR в вопросах и ответах

Сообщение Apparatchik »

FreshMan писал(а):а почему когда в вышеприведенной программе я ставлю n<300 то мен выскакивает такое
Warning: C:\Documents and Settings\User\Рабочий стол\Управление портом ATmega8\Управление портом ATmega8.c(13): pointless integer comparison with an out of range constant

так, как n типа char, то она не может быть больше 255 и она всегда будет меньше 300, зачем тогда такое условие?
«И всё-таки она вертится!»
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

просто захотелось попробывать будет ли так работать......... :)
Tell Me The Truth
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

уВажаемые коты, подскажите такую С конструкцию: нужно, что бы часть программы выполнялась при совпадении условия в цикле, не выходя из него, но только 1 раз!, что бы при следующих совпадениях условия часть программы уже НЕ выполнялась (т.е. единоразово)

вот то, что я налепил, мож у кого будут какие идеи?

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

while ((Data_SICK < Li)||(Data_SICK >Ui))      //пока пришедшие данные вне диапазоне +/-0,01 (работаю только с Float)
        {
            Sick_data_Correct (_Sick,&Data_SICK);      //ПРОВЕРИТЬ РЕАЛЬНЫЕ данные во время движения
            if ((fabs(fl_Point_Speed1 - Data_SICK))<0.2) //если разница реального знач.и расчетной Точкой 1<0.2 (для устранения дребезга)
            {
             SPI_SendBits(_AD5260,CLK_AD5260,Speed_2); //сбросим скорость до 50%. ВОТ СЮДА МНЕ НУЖНО ЗАЙТИ ВСЕГО ОДИН РАЗ!, но по скольку у меня float, и реальное значение может меняться       
            };              //+/-0,01 при малой скорости движения я сюда могу попасть не один раз, а при большой скорости могу и проскочить, что тоже очень плохо.
            if ((fabs(fl_Point_Speed2 - Data_SICK))<0.2) //если разница реального знач.и расчетной Точкой 2<0.2
            {
             SPI_SendBits(_AD5260,CLK_AD5260,Speed_3); //сбросим скорость до 20%. ЗДЕСЬ АНАЛОГИЧНО.
            }           
            //Здесь оставшаяся часть программы (проверка других датчиков, отправка и прием данных по усарту), при частоте кварца 11059,  1 проход цикла занимает немало времени (точно не
            //измерял)   
           };
:solder: 32-х ядерный процессор из П213В
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Спросите у автора программы.
Docendo discimus
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

wellcom, заведите флаг, который проверяется в if. если не установлен и выполнилось условие ((fabs(fl_Point_Speed1 - Data_SICK))<0.2), выполняете действие SPI_SendBits(_AD5260,CLK_AD5260,Speed_2); и выставляете этот флаг. более это действие не выполнится. очищаете флаг при выходе из цикла.
Ставим плюсы: )
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

Автор проги я, про флаг тоже думал, не хочется выделять память еще на 2 флага...у меня и так 40 глобальных переменных разного типа....проц - атмега 128
:solder: 32-х ядерный процессор из П213В
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

2 флага - 2 бита. Памяти уйдет в наихудшем случае один байт.
Docendo discimus
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

pyzhman писал(а):2 флага - 2 бита. Памяти уйдет в наихудшем случае один байт.

если делать битовые флаги, то упадает скорость обработки, так как извлечение/запись бита в байт займет большее время доступа чем сразу к байту
:solder: 32-х ядерный процессор из П213В
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

можно использовать маски, не обязательно битовое поле.
Ставим плюсы: )
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

да, все таки наверное без ввода флагов не обойтись....
:solder: 32-х ядерный процессор из П213В
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Даже возрастет скажу вам. При байтной величине извлекается байт, сравнивается с величиной, осуществляется переход/не переход. При битовой сразу переход/непереход. Посмотрите, что в компилированном файле.
Docendo discimus
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

pyzhman писал(а):Даже возрастет скажу вам. При байтной величине извлекается байт, сравнивается с величиной, осуществляется переход/не переход. При битовой сразу переход/непереход. Посмотрите, что в компилированном файле.

я пока АСМ не очень понимаю, но думаю мож так прокатит?

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

BitTemp=0x03;
if (fl_Point_Speed1 < Data_SICK)&&(0b00000001&BitTemp))
{
.......
BitTemp = 0x2;
}
if (fl_Point_Speed2 < Data_SICK)&&(0b00000010&BitTemp))
{
.......
BitTemp = 0x0;
}

или так быстрее будет выполнятся?
if( (0b00000010&BitTemp) &&(fl_Point_Speed2 < Data_SICK))
:solder: 32-х ядерный процессор из П213В
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Битовая переменная "0" или "1".
Docendo discimus
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

Re: CodeVision AVR в вопросах и ответах

Сообщение wellcom »

pyzhman писал(а):Битовая переменная "0" или "1".

ет был вопрос или утверждение?
:solder: 32-х ядерный процессор из П213В
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Точка в конце текста. Не вопросительный знак. :)
Битовая переменная может принимать значения "0" или "1".
Docendo discimus
Ответить

Вернуться в «AVR»