Disha » 17 июн 2015, 17:52
Подскажите плз. CV_AVR код
- Код: Выделить всё • Развернуть
unsigned char cw_dir[6]= {
0b00010110,
0b00100110,
0b00100101,
0b00101001,
0b00011001,
0b00011010,
};
unsigned char step_index;
unsigned char step_time = 10;
.....
.....
while (1)
{
step_time = 10;
for (step_index = 0; step_index <6;step_index++)
{
PORTD = 0b00000000; //Закрыли все ключи
delay_us(1); // Death time (1 us) (не может быть переменной, только число)
PORTD = cw_dir[step_index]; //Открыли НУЖНЫЕ ключи
ДАЛЕЕ ВОПРОС:
Вот это работает delay_ms(step_time); //Время включения катушки (10 ms)
А хочу заменить на это
//while (step_time > 1)
//{
//delay_us(1000);
//step_time--;
//}
НЕ РАБОТАЕТ!!!!
}
};
Как еще можно delay_us сделать с переменным аргументом?? Как использовать МИКРОсекунды без таймера??
Angel71 » 17 июн 2015, 18:18
ф-ю с константой сделать с переменной легко - просто берёте и переписываете. можно не прикалываться, а запихать вызов в цикл. не нравятся таймер-счётчики, ну можете поизвращаться. каждая команда выполняется определённое количество тактов. зная частоту, вычисляете сколько итераций цикла нужно сделать. а что в него запихать уже ваше дело, хоть один или несколько нопов, хоть пустой цикл.
вообще-то есть максимумы для задержек, если так интересно, смотрите исходники. например где и почему там переполнение. есть ли реализация проверки максимума и вызовова dalayms. не интересно вникать, так и не страдайте фигнёй. 10мс это или один вызов delayms(10) или десять delayms(1). нужен меньший шаг, так добавьте ещё вызов других задержек.