Страница 1 из 1

USART Mega16 косяк с флагом UDRE

Добавлено: Вс июл 15, 2007 15:58:36
Mozart
хочу поделиться, чтобы никто не мучался, если что...
было:

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

void TransferBufferUSART(unsigned char *massive, unsigned char size) {
	
	for (unsigned char i = 0; i < size; i++) {
		while (!(UCSRA && (1 << UDRE)));
		UDR = *(massive + i);
	}
}
у меня был такой код, когда посылал первую команду от компьютера к uC, то в ответ по идее должно было отправляться 4ре байта в компутер. Программировал uC и да действительно присылалось 4ре байта, но в ответ на вторую и след комманду присылалось 2а байта. Сломал часть своего мозга. JTAG'а дома нету... посмотреть что происходит тоже не мог... дописал одну строчку в конец цикла через 4ре часа мучений

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

UCSRA &=~(1 << UDRE);
и о чудо случилось всё заработало.

Добавлено: Вс июл 15, 2007 17:27:59
tych
VMLAB помогает хорошо и PROTEUS тоже.

Добавлено: Вс июл 15, 2007 19:41:06
Mozart
господи, как же я не догадался???... что есть протеус и вмлаб... вот почему ты мне, господи, это раньше не сказал...

Добавлено: Вс июл 15, 2007 19:50:48
ARV
tych писал(а):VMLAB помогает хорошо и PROTEUS тоже.
Mozart писал(а):вот почему ты мне, господи, это раньше не сказал...
Итак, пора в разделе "Новые звания" поздравлять tych-а с присвоением звания бога... :)))

Добавлено: Вс июл 15, 2007 22:18:38
Mozart
только я чуть-чуть атеист... и больше ему не поверю :) ;)
ибо должен быть разум...

Добавлено: Пн июл 30, 2007 21:28:54
Mozart
косяк с моей головой...

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

while (!(UCSRA && (1 << UDRE)));
вот так не пишите... пишите вот так

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

while (!(UCSRA & (1 << UDRE)));
вот так всё работает и хорошо работает...

з.ы. до НИИ доеду... пришлю фотки работы...
з.з.ы. приятно когда что-то работает правильно......

Добавлено: Вт июл 31, 2007 08:44:32
Aheir
дык это, && и & - весьма разные вещи в данном случае.
Наверное, можно даже сказать, что & в данном контексте арифметичекая операция, а && - логическая.

Добавлено: Вт июл 31, 2007 09:25:02
Mozart
дык, я знаю, что разные...