Верно я не вникал что он хочет делать, но натягивать трусы через голову не правильно
Я тоже так считаю.Как потом разделить, завис ли контроллер или просто прерывание обычное нужно провести?
Верно я не вникал что он хочет делать, но натягивать трусы через голову не правильно
Код: Выделить всё
while (PINB.0 = 1) {}; 
добавить после вашей строки
Код: Выделить всё
if (PINB.0 = 1) {x++}; //ваша строка
while (PINB.0 = 1) {}; // то, что нужно добавить
Код: Выделить всё
void Calibrate() //Калибруем все сенсоры по очереди
{
unsigned char i=1,k=0;
while(i!=0)
{
TCNT1=0x0000; // обнуляем счетный регистр
TCCR1B=0x01; // разрешаю счет таймера1
DDRD = ~i;// настраиваем пин порта на вход
while((PIND&i)==0); // жду пока не появится 1 на пине порта
TCCR1B=0x00; //останавливаю таймер
DDRD|=i; // конфигурирую пин на выход состояние Hi-Z
SensorTimes[k]=TCNT1; // присваиваю время зарядки сенсора
SensorHI[k]=SensorTimes[k]+70; //задаю верхний предел
SensorLO[k]=SensorTimes[k]+20; // и нижний
k++; // увеличиваю переменную на 1
i<<=1; //сдвигаю 1 влево
}Код: Выделить всё
void Calibrate() //Калибруем все сенсоры по очереди
{
unsigned char i=1,k=0;
DDR_X = DDRD // присваиваю "переменной" порт с которым работаю
while(i!=0)
{
TCNT1=0x0000; // обнуляем счетный регистр
TCCR1B=0x01; // разрешаю счет таймера1
DDR_X = ~i;// настраиваем пин порта на вход
.
.
.
if (i == 0x80){
DDR_X = DDRB;
i == 0;
}
k++; // увеличиваю переменную на 1
i<<=1; //сдвигаю 1 влево
}
Правильно будет сделать это через указатели. Но я как-то пробовал в CV создать указатель на порт и поработать с ним - не получилось. Видимо, атмелам подобное не дано...подскажите как правильно делать опрос с 2х портов.
Видимо, атмелам подобное не дано...
vitalik_1984 писал(а):обычное условие можно сделать число x двигаем,когда число больше чем 128(0b10000000) один порт, если меньше другой порт.вот и все.
Код: Выделить всё
if (i == 0x80){
DDR_X = DDRB;
i == 0;Код: Выделить всё
void Calibrate() //Калибруем все сенсоры по очереди
{
unsigned char i=1,k=0;
while(i!=0)
{
TCNT1=0x0000; // обнуляем счетный регистр
TCCR1B=0x01; // разрешаю счет таймера1
DDRD = ~i;// настраиваем пин порта на вход
while((PIND&i)==0); // жду пока не появится 1 на пине порта
TCCR1B=0x00; //останавливаю таймер
DDRD|=i; // конфигурирую пин на выход состояние Hi-Z
SensorTimes[k]=TCNT1; // присваиваю время зарядки сенсора
SensorHI[k]=SensorTimes[k]+70; //задаю верхний предел
SensorLO[k]=SensorTimes[k]+20; // и нижний
k++; // увеличиваю переменную на 1
i<<=1; //сдвигаю 1 влево
if ( i == 0x80)
{
while (i! = 0)
{
i = 1;
TCNT1=0x0000; // обнуляем счетный регистр
TCCR1B=0x01; // разрешаю счет таймера1
DDRB = ~i;// настраиваем пин порта на вход
while((PINB&i)==0); // жду пока не появится 1 на пине порта
TCCR1B=0x00; //останавливаю таймер
DDRB|=i; // конфигурирую пин на выход состояние Hi-Z
SensorTimes[k]=TCNT1; // присваиваю время зарядки сенсора
SensorHI[k]=SensorTimes[k]+70; //задаю верхний предел
SensorLO[k]=SensorTimes[k]+20; // и нижний
k++; // увеличиваю переменную на 1
i<<=1; //сдвигаю 1 влево
if (i == 0x08 ) // использую у порта B использую только 4 пина
{
i=0;
}
}
}
}Плюс ещё нужно подумать о переполнении таймера, т.е. добавить обработчик прерываний по переполнению и инкрементировать в нём старшие байты времени заряда. Иначе, если таймер переполнится, Вы получите неправильное значение.Код: Выделить всё
SensorTimes[k]=TCNT1; // присваиваю время зарядки сенсора
Код: Выделить всё
DDRD = ~i;// настраиваем пин порта на вход
DDRD|=i; // конфигурирую пин на выход состояние Hi-ZКод: Выделить всё
PINB&iКод: Выделить всё
if (i == 0x80)Код: Выделить всё
Name_Port = 0x35 // к примеру это адрес порта B
Name_Port = ~i