Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: UART для ATtiny2313
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
TamTam
требуеться принемать через варт несколько байт, и в зависимости от того что пришло что то делать

вопрос: как лучше принять данные и потом сравнить их с тем что записано в МК.

Хочу чтото вроде АТ команд забомбить. (ты ему AT он те OK),

если моно поделитесь примером.
vet
Накапливаем пришедшие символы в буфере, пока не встретится код 13 (перевод строки). Код 10 (заполнение строки) игнорируем.
Сравниваем пришедшее с имеющимся набором команд поочерёдно, если совпало с чем - выполняем соотв. действие.
Стираем выполненную команду из буфера.

Следующим шагом логично будет организовать обработку передаваемых с командой параметров.
TamTam
Цитата(vet @ Apr 3 2006, 16:48) *
Накапливаем пришедшие символы в буфере, пока не встретится код 13 (перевод строки). Код 10 (заполнение строки) игнорируем.
Сравниваем пришедшее с имеющимся набором команд поочерёдно, если совпало с чем - выполняем соотв. действие.
Стираем выполненную команду из буфера.

Следующим шагом логично будет организовать обработку передаваемых с командой параметров.



А можно примерчик кода,
и еще вопрос как лучше включить в генераторе прерывание по приходу или самлому из регистра байты выдергивать ???

Цитата(vet @ Apr 3 2006, 16:48) *
Накапливаем пришедшие символы в буфере, пока не встретится код 13 (перевод строки). Код 10 (заполнение строки) игнорируем.
Сравниваем пришедшее с имеющимся набором команд поочерёдно, если совпало с чем - выполняем соотв. действие.
Стираем выполненную команду из буфера.

Следующим шагом логично будет организовать обработку передаваемых с командой параметров.



А можно примерчик кода,
и еще вопрос как лучше включить в генераторе прерывание по приходу или самлому из регистра байты выдергивать ???
vet
Всё зависит от потребностей.
Если контроллер ничего не делает, кроме ожидания команд и реакции на них - незачем городить прерывания. То же относится к задаче, выполняемой под RTOS.
Если параллельно ожиданию команды выполняются другие вещи, занимающие процессорное время настолько, что способны вызвать потерю принятых символов - без прерываний по приёму символа не обойтись.

Код очень простой, напишите самостоятельно за пару минут, просто для разминки. Алгоритм я уже расписал.
ALexx
В приложении - Исходник для работы с УАРТом.
Писано на CodeVision под МЕГА16, но переносится на ТИНИ2313(см. директивы в файле USART.с)


В основной программе в секции инициализации надо прописать следующие строки:

USART_AsyncInit(0,TXCIE | RXCIE);
USART_AsyncOpen(9600,CharLen_8,OneStop,NoParity); // Настройка и открытие порта


В основном цикле проверяете пришел ли пакет:
...
unsigned char MesLen;
....
....
if(MesLen=UART_ReceiveBuffer()){ // Пришел пакет(лежит в RxBuffer[])
... // обрабатываем пакет
...
// Далее - один из вариантов формирования и отправки ответа
sprintf(TxBuffer,"Module PW1=%d PW2=%d PW3=%d PW4=%d PW5=%d\r\n\0",PW[0],PW[1],PW[2],PW[3],PW[4]);
UART_SendBuffer(strlen(TxBuffer));


}

Это лишь один из множества вариантов работы с УАРТом. Экспериментируйте;-)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.