Цитата
осталась проблемка не касающаяся кодинга....
А что, это все работает? Не верю!!
Я, конечно, могу сильно проезжать (со мной это что-то часто в последнее время), но все же:
1) что-то не могу уловить, где вызываются функции sort() и work();
2)
Цитата
short int temp;
itoa(&x[0],temp,10); // v a xranitsa maska bitov
komanda=temp;
всегда думал, что itoa преобразует число в строку(Int TO Alpha)...
или в ICC наоборот? тогда сорри!
В нормальном С строку в число преобразует atoi (в CodeVision например есть int atoi(char *str), IСС сейчас не пользуюсь, было дело несколько лет назад, но кряка к trial-версии не нашлось, пришлось выкинуть)
думаю, было бы что-то вроде
x[4]=0; // чтоб atoi знал, где конец строки, объявлять надо char х[5]
prinataya_stroka=atoi(x+1); // раскодируем начиная с х[1]
а команда, если это тоже число в формате ASCII
komanda=x[0]&0x0F; // стирает 3 из старшей тетрады
см. также 5)
3)
Цитата
for (i=0;i<8;i++)
{
b=prinataya_stroka;
b<<=i;
b>>=i;
if (b==1) svetodiodon(nojkas[i]);
if (b==0) svetodiodoff(nojkas[i]);
}

трудно даже проанализировать, когда выполняютя условия b==1, b==0...
Давайте на примере:
представим, что "принятая строка"=11100001.
і=0: после b<<=i; b>>=i; получаем b=11100001, ничего не происходит
і=1: b=01100001, ничего не происходит
i=2: b=00100001, ничего не происходит
i=3: b=00000001, зажигается светодиод №3
i=4: b=00000001, зажигается светодиод №4
i=5: b=00000001, зажигается светодиод №5
i=6: b=00000001, зажигается светодиод №6
i=7: b=00000001, зажигается светодиод №7
итог: хотели зажечь 11100001, зажгли 00011111
Вопрос: почему бы не написать просто
PORTB=prinataya_stroka ???
4)
Цитата
void svetodiodon(char nojka)
{
PORTB &=~BIT (nojka);
}
кажется, выключает, а не включает
Цитата
void svetodiodoff(char nojka)
{
PORTB ^= BIT (nojka);
}
^ - операция "исключающее ИЛИ", т.е. светодиод не выключается, а меняет состояние на противоположное
5) Кстати, а нельзя сразу с компьютера посылать 1 байт, кодирующий, чего включить и выключить, вместо того чтобы посылать 3, а потом их разгребать?
6)
Цитата
void get_result()
{
x[cou]=UDR;cou++;
if (cou==4) {cou=0;}
}
warning

: будеть корректно работать только если компьютер будет посылать каждый раз строго 4 байта
О сколько нам открытий чудных ...