реклама на сайте
подробности

 
 
> Опять Atiny2313 и COM-PORT, Стоит задача
GoldZ
сообщение Jul 16 2007, 06:31
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 14-07-07
Пользователь №: 29 114



Прошу помощи, светлых мыслей, указания куда идти!
Стоит задача:
послать в МК цифру;
исполнить подпрограмму несколько раз согласно полученной цифры.

Посылаю цифру в виде строки(в виде цифры не умею)
Дальше, по логике нужно эту строку превратить в цифру и
создать цикл. В теле цикла вставить вызов подпрограммы.

Тормоза наступили на уровне преобразования строки в цифру
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dimmy
сообщение Jul 16 2007, 07:22
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 12-09-05
Пользователь №: 8 503



Ну во первых: результат skoko - это не строка, а один байт
Во вторых - нехорошо висеть постоянно в пп приема данных
Если идти по вашему пути - то надо организовывать внешний буфер (Buf[64]) для приема строки (где-то 64 байта например),
и постепенно его заполнять. Ф-я USART_receive должна возвращать что-то типа BOOL. Если принят символ / не принят вообще - то FALSE, а как-только приняли 0 (конец строки) - то добавляем его в буфер и возвращаем TRUE. После этого вызываете atoi(Buf);
if (USART_Receive()) nn=atoi[Buf];
Повторяю - СТРОКА ЗАКАНЧИВАЕТСЯ НУЛЕМ!
Еще - вы передаете данные именно как строку (т.е. цифра 0 - это 0x30, цифра 1 - это 0x31...), или все-таки как число - может тогда и преобразовывать не надо ничего...

Сообщение отредактировал Dimmy - Jul 16 2007, 07:32
Go to the top of the page
 
+Quote Post
GoldZ
сообщение Jul 17 2007, 00:50
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 14-07-07
Пользователь №: 29 114



Цитата(Dimmy @ Jul 16 2007, 17:22) *
Ну во первых: результат skoko - это не строка, а один байт
Во вторых - нехорошо висеть постоянно в пп приема данных
Если идти по вашему пути - то надо организовывать внешний буфер (Buf[64]) для приема строки (где-то 64 байта например),
и постепенно его заполнять. Ф-я USART_receive должна возвращать что-то типа BOOL. Если принят символ / не принят вообще - то FALSE, а как-только приняли 0 (конец строки) - то добавляем его в буфер и возвращаем TRUE. После этого вызываете atoi(Buf);
if (USART_Receive()) nn=atoi[Buf];
Повторяю - СТРОКА ЗАКАНЧИВАЕТСЯ НУЛЕМ!
Еще - вы передаете данные именно как строку (т.е. цифра 0 - это 0x30, цифра 1 - это 0x31...), или все-таки как число - может тогда и преобразовывать не надо ничего...

Глупый, но вопрос
Как добавить в буффер????
Go to the top of the page
 
+Quote Post
IEC
сообщение Jul 17 2007, 06:54
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Цитата(GoldZ @ Jul 17 2007, 03:50) *
Глупый, но вопрос
Как добавить в буффер????

Наверное дам глупый ответ, но постараюсь:
- создаете буфер ( buf[255] )
- перед началом приема посылки инициализируете некую переменную - счетчик принятых байт (bNumb=0)
- принимая очередной байт, пишите его в буфер ( buf[bNumb++] = UDR )
- принимая данные проверяете буфер на переполнение ( bNumb < 255 )
- после завершения приема посылки формируете завершение строки ( buf[bNumb] = 0х00 )

Надеюсь я ответил на ваш вопрос biggrin.gif .
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 08:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01389 секунд с 7
ELECTRONIX ©2004-2016