прерывание виснет

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Сообщение avr123.nm.ru » 13 мар 2007, 10:53

Myp писал(а):а в симуляторе написан именно символ который передаётся


Симулятор отображает так как настроен - он изображает терминал.  Вклюите вывод чисел и будут числа.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение 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
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение avr123.nm.ru » 13 мар 2007, 11:01

как конкретно реализовать алгоритм зависит от количества нужных комбинаций символов.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение Myp » 13 мар 2007, 12:29

там написано что в массиве нумерация элементов с нуля идет !
да я вспомнил что с нуля, только я уже спать ушёл, по этому не стал исправлять=)

зря вы все же не найдете время ВНИМАТЕЛЬНО прочитать курс.
ой блин там стока всего что не усваиваю =/

Если вам нужно дождаться прихода символа R и ни чего больше не делать то так

немного сложнее
мне нужно ждать прихода одного из скольких то заранее определённых символов и в завис от символа чёто делать
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 13 мар 2007, 15:41

Код: Выделить всё
char buffer[3];
void Priem(void)                    
{
   gets(buffer, 3);
       
}


не работает
хз в чём дело но в этом месте Мк вваливаеться в непрерывный цикл
тоесть gets(buffer, 3) выполняеться и новые символы записываются но процедура не кончается на этом
Вложения
ACDSee6 BMP Image.jpg
вот такой вот бред
ACDSee6 BMP Image.jpg (2.85 КиБ) Просмотров: 2075
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 13 мар 2007, 16:10

блин бред какойто
я непонимаю =/


почему getchar(); вводит программу в ступор?


блин пойду выпью йаду =/
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 13 мар 2007, 16:18

дак кода не видно ктож скажет.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04: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 форева единица...

как это понимать?
почему  портб не моргает пока идёт симуляция? :(
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Vooon » 13 мар 2007, 16:55

Код: Выделить всё
while (1)
{
    PORTB.0 = 0;
    delay_ms (20); // а вы успеете увидеть такую задержку ? :)
    PORTB.0 = 1;
    delay_ms (20); // нафих ненужна
    PORTC   = getchar(); // здесь мы сидим до тех пор пока что-нибудь не придет - вот вам и кажется что всегда 1
    putchar (PORTC);
};
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Сообщение Myp » 13 мар 2007, 17:04

это чисто для протеуса такая задержка
там  это вполне отчётливо видно=)
а вторая пауза чтоб видно было моргание
ибо если делать паузу один раз то невидно будет так как будет моментально переключатся состояние ноги

блин
а как мне тогда это сделать то?
чтоб по прерыванию записывалось 3 символа в массив :(

я тогда не понимаю как мне взять в мой массив то что уже фактически физически пришло и лежит в буфере Rx_buffer
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 13 мар 2007, 17:12

сделать 3 раза  в цикле

элемент массива (номер такой то) = getchar();
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение maktep » 13 мар 2007, 17:21

Прерывание виснет по двум причинам.

1. Не успевает обрабатываться код.
Тоесть прерывание вызывается снова, когда предыдущее еще не завершено.

2. После выполнения прерывания автозапуск прерывания отключается.
Как это сделано в АЦП у АВР.

И вообще понимайте объективнее суть проблемы, а не сразу пишите в форум. Так большего добьетесь... и проблемы станут решаемыми.

Любую проблему можно понять и решить самому.
Аватара пользователя
maktep
Правохранитель
 
Сообщения: 197
Зарегистрирован: 23 фев 2007, 02:23
Откуда: Зеленоград

Сообщение 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
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 13 мар 2007, 17:32

maktep писал(а):И вообще понимайте объективнее суть проблемы, а не сразу пишите в форум. Так большего добьетесь... и проблемы станут решаемыми.

Любую проблему можно понять и решить самому.

вы время создания темы посмотрите
месяц уже минул
вот я до сих пор немогу осознать в чём косяк

я невижу в чём проблема потмоу и прошу помочь

я знаю что мне нужно в итоге и знаю как это реализовать
но не работает...
(мне нужно выполнять основную программу  и при поступлении 3 символов поуарту записывать эти символы в массив. потом возвращаться обратно в основную программу)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 13 мар 2007, 17:50

кстати краткий курс накрылся
не работает...http://www.avr123.nm.ru/


и вот как в таких условиях можно чтото сделать...


вопрос элементарный
а ответа нет ....

чтоб было понятно о чем речь повторюсь

есть контроллер мега8
контроллер управляет 2мя двигателями

необходимо помимо основной программы обрабатывать данные по прерыванию

ТЗ:
.выполняеться основная программа использующая массив из 3х символов
.при  поступлении символа в МК срабатывает прерывание Rx
.после приёма 3х символов, эти 3 символа записываются в массив
.возврат в основную программу
.выполнение основной программы с изменёнными выше значениями массива
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Пред.След.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25