Технический форум по робототехнике.
avr123.nm.ru » 13 мар 2007, 10:53
Myp писал(а):а в симуляторе написан именно символ который передаётся
Симулятор отображает так как настроен - он изображает терминал. Вклюите вывод чисел и будут числа.
avr123.nm.ru » 13 мар 2007, 10:59
Myp писал(а):тоесть в итоге я получу массив вида 0х52, 0х32, 0х30 что будет соответствовать общечеловеческой строке "R20"
и дальше уже
switch(massiv[1])
case 'R'
зря вы все же не найдете время ВНИМАТЕЛЬНО прочитать курс.
там написано что в массиве нумерация элементов с нуля идет !
======
А в задаче - avr123.nm.ru/z5.htm - написано на выделеном фоне в каком порядке символы-числа располагаются в буфере.
======
Если вам нужно дождаться прихода символа R и ни чего больше не делать то так
while (getchar() =='R');
тут вы окажетесь когда из приемного буфера будет считан символ R.
теперь можете анализировать что дальше.
сделайте 2 раза "гетчар" и сложите это в десятичное число.
а дальше "Свитч"
avr123.nm.ru » 13 мар 2007, 11:01
как конкретно реализовать алгоритм зависит от количества нужных комбинаций символов.
Myp » 13 мар 2007, 12:29
там написано что в массиве нумерация элементов с нуля идет !
да я вспомнил что с нуля, только я уже спать ушёл, по этому не стал исправлять=)
зря вы все же не найдете время ВНИМАТЕЛЬНО прочитать курс.
ой блин там стока всего что не усваиваю =/
Если вам нужно дождаться прихода символа R и ни чего больше не делать то так
немного сложнее
мне нужно ждать прихода одного из скольких то заранее определённых символов и в завис от символа чёто делать
Myp » 13 мар 2007, 15:41
- Код: Выделить всё • Развернуть
char buffer[3];
void Priem(void)
{
gets(buffer, 3);
}
не работает
хз в чём дело но в этом месте Мк вваливаеться в непрерывный цикл
тоесть gets(buffer, 3) выполняеться и новые символы записываются но процедура не кончается на этом
- Вложения
-
- вот такой вот бред
- ACDSee6 BMP Image.jpg (2.85 КиБ) Просмотров: 2077
Myp » 13 мар 2007, 16:10
блин бред какойто
я непонимаю =/
почему getchar(); вводит программу в ступор?
блин пойду выпью йаду =/
avr123.nm.ru » 13 мар 2007, 16:18
дак кода не видно ктож скажет.
Myp » 13 мар 2007, 16:24
хмммм
протеус задница
пишем вот такой код
- Код: Выделить всё • Развернуть
while (1)
{
PORTB.0=0;
delay_ms(20);
PORTB.0=1;
delay_ms(20);
PORTC = getchar();
putchar(PORTC);
};
и что мы видим в протеусе???
а вот что, на PORTB.0
вобще всегда лог единица
пофиг на всё
единица горит, симуляция идёт...
если вводим в терминал символ он отображается в порту С и отсылается обратно...
а PORTB.0 форева единица...
как это понимать?
почему портб не моргает пока идёт симуляция?
Vooon » 13 мар 2007, 16:55
- Код: Выделить всё • Развернуть
while (1)
{
PORTB.0 = 0;
delay_ms (20); // а вы успеете увидеть такую задержку ? :)
PORTB.0 = 1;
delay_ms (20); // нафих ненужна
PORTC = getchar(); // здесь мы сидим до тех пор пока что-нибудь не придет - вот вам и кажется что всегда 1
putchar (PORTC);
};
Myp » 13 мар 2007, 17:04
это чисто для протеуса такая задержка
там это вполне отчётливо видно=)
а вторая пауза чтоб видно было моргание
ибо если делать паузу один раз то невидно будет так как будет моментально переключатся состояние ноги
блин
а как мне тогда это сделать то?
чтоб по прерыванию записывалось 3 символа в массив
я тогда не понимаю как мне взять в мой массив то что уже фактически физически пришло и лежит в буфере Rx_buffer
avr123.nm.ru » 13 мар 2007, 17:12
сделать 3 раза в цикле
элемент массива (номер такой то) = getchar();
maktep » 13 мар 2007, 17:21
Прерывание виснет по двум причинам.
1. Не успевает обрабатываться код.
Тоесть прерывание вызывается снова, когда предыдущее еще не завершено.
2. После выполнения прерывания автозапуск прерывания отключается.
Как это сделано в АЦП у АВР.
И вообще понимайте объективнее суть проблемы, а не сразу пишите в форум. Так большего добьетесь... и проблемы станут решаемыми.
Любую проблему можно понять и решить самому.
Myp » 13 мар 2007, 17:29
avr123.nm.ru писал(а):сделать 3 раза в цикле
элемент массива (номер такой то) = getchar();
дык блин
уже раз 5 наверно написал здесь не работает
как только доходим до getchar висим и ждём от неба погоды...
и висим висим висим
char buffer[3];
void Priem(void)
{
int i = -1;
while ((i+1) <= 3)
{
buffer[i] = getchar();
}
}
ну нет выхода из этой процедуры, счётчик не тикает висим на getchar
Последний раз редактировалось
Myp 13 мар 2007, 17:34, всего редактировалось 1 раз.
Myp » 13 мар 2007, 17:32
maktep писал(а):И вообще понимайте объективнее суть проблемы, а не сразу пишите в форум. Так большего добьетесь... и проблемы станут решаемыми.
Любую проблему можно понять и решить самому.
вы время создания темы посмотрите
месяц уже минул
вот я до сих пор немогу осознать в чём косяк
я невижу в чём проблема потмоу и прошу помочь
я знаю что мне нужно в итоге и знаю как это реализовать
но не работает...
(мне нужно выполнять основную программу и при поступлении 3 символов поуарту записывать эти символы в массив. потом возвращаться обратно в основную программу)
Myp » 13 мар 2007, 17:50
кстати краткий курс накрылся
не работает...http://www.avr123.nm.ru/
и вот как в таких условиях можно чтото сделать...
вопрос элементарный
а ответа нет ....
чтоб было понятно о чем речь повторюсь
есть контроллер мега8
контроллер управляет 2мя двигателями
необходимо помимо основной программы обрабатывать данные по прерыванию
ТЗ:
.выполняеться основная программа использующая массив из 3х символов
.при поступлении символа в МК срабатывает прерывание Rx
.после приёма 3х символов, эти 3 символа записываются в массив
.возврат в основную программу
.выполнение основной программы с изменёнными выше значениями массива