#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;
}
}
с помощью данной проги я просто моргаю светодиодами............., почемуто светодиод который подключен к нулевому пину порта В все время горит что я не так написал ?
а почему когда в вышеприведенной программе я ставлю n<300 то мен выскакивает такое
Warning: C:\Documents and Settings\User\Рабочий стол\Управление портом ATmega8\Управление портом ATmega8.c(13): pointless integer comparison with an out of range constant
FreshMan писал(а):а почему когда в вышеприведенной программе я ставлю n<300 то мен выскакивает такое
Warning: C:\Documents and Settings\User\Рабочий стол\Управление портом ATmega8\Управление портом ATmega8.c(13): pointless integer comparison with an out of range constant
бессмысленное сравнение целое сравнение с константой вне пределов
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, зачем тогда такое условие?
уВажаемые коты, подскажите такую С конструкцию: нужно, что бы часть программы выполнялась при совпадении условия в цикле, не выходя из него, но только 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 проход цикла занимает немало времени (точно не
//измерял)
};
wellcom, заведите флаг, который проверяется в if. если не установлен и выполнилось условие ((fabs(fl_Point_Speed1 - Data_SICK))<0.2), выполняете действие SPI_SendBits(_AD5260,CLK_AD5260,Speed_2); и выставляете этот флаг. более это действие не выполнится. очищаете флаг при выходе из цикла.
Автор проги я, про флаг тоже думал, не хочется выделять память еще на 2 флага...у меня и так 40 глобальных переменных разного типа....проц - атмега 128
Даже возрастет скажу вам. При байтной величине извлекается байт, сравнивается с величиной, осуществляется переход/не переход. При битовой сразу переход/непереход. Посмотрите, что в компилированном файле.
pyzhman писал(а):Даже возрастет скажу вам. При байтной величине извлекается байт, сравнивается с величиной, осуществляется переход/не переход. При битовой сразу переход/непереход. Посмотрите, что в компилированном файле.
я пока АСМ не очень понимаю, но думаю мож так прокатит?