Обработка прерывния. Что то уходит не туда!? - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Обработка прерывния. Что то уходит не туда!?
Обработка прерывния. Что то уходит не туда!?
vladh Дата: Чт, 13.08.2015, 11:54  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Добрый день уважаемые форумчане. Второй день бодаюсь с программой и никак не могу найти где в ней черт спрятался surprised . Может у меня внимание замылилось и я чего то не вижу. Поэтому обращаюсь к вам. Может кто то что то и найдет в ней.
Суть проблемы такова. Разрабатываемое устройство состоит из двух частей. Стационарного аппарата и пульта управления. Аппарат и пульт связываются друг с другом по RS485 интерфейсу. Но поскольку этот интерфейс в Протеусе смоделировать не удалось, я моделирую его через USART. Логика связи такова, что оба устройства находятся в режиме прослушки линии. Как только на линии появляются данные, контроллеры, по прерыванию, переходят на подпрограмму приема данных. После приема, он возвращается к исходной своей работе. После включения симуляции все идет по плану. Это значит, что я выбрав в меню на экране дисплея "1" перехожу на подпрограмму "Компенсации". Далее, в режиме Компенсация, я хочу нажать на клавишу "5" тем самым осуществить режим Пуск. При этом пульт должен передать в аппарат код установленного режима(Reg=1) и код команды Пуск(Pusk=1). На экране дисплея выводится сообщение о том, что следующее нажатие на клавишу "5" должно перевести устройство в исходное состояние. Так вот уже после того как пульт передал данные он должен был получить от аппарата данные об измеренном токе и код ошибки. Вот теперь программа как бы подвисает. Т.е. она перестает воспринимать клавиатуру. Если в этот момент запустить пошаговый анализ программа пульта ведет себя странно. Она только как бы прерывается и переходит на прием данных и это все повторяется с периодом в 41 мс. Т.е. программа как бы не возвращается в основной цикл. Даже если там я поставлю точку останова. Что ото может быть?
Прикрепления: RS232.rar(96Kb)
ЯНДЕКС Дата: 13.08.2015
ADMIN Дата: Чт, 13.08.2015, 13:33  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Сделать, однако, стоит так:
Dim RS as Bit
Prer:
Context Save
RS = 1
INTCON.7 = 1
Context Restore
Resume

Main:
If RS=1 Then
RS=0
GoSub RS232_in
EndIf
------------------------------
-------------------------
vladh Дата: Чт, 13.08.2015, 13:46  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ADMIN ()
Сделать, однако, стоит так:
Максим, в Вашем варианте получается, ситуация при которой возникшее прерывание устанавливает только флаг RS, а сама обработка будет тогда когда программа наткнется в своем теле на этот флажок! Но тогда уже вероятно принимать будет нечего, передача данных уже закончится. И все равно это ничего не меняет.

Сообщение отредактировал vladh - Чт, 13.08.2015, 13:49
ADMIN Дата: Чт, 13.08.2015, 16:24  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Ну, по крайней мере, в симуляторе, проц начинает на нажатия реагировать. Думаю, выход все-таки есть. Нужно подумать...
vladh Дата: Чт, 13.08.2015, 16:37  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ADMIN ()
Ну, по крайней мере, в симуляторе, проц начинает на нажатия реагировать. Думаю, выход все-таки есть. Нужно подумать...
Не вижу, чтобы появились изменения к лучшему. Наоборот если раньше первый МК успевал передать значение тока, то сейчас даже и этого нет. Может Вы что то другое поменяли. Пришлите Ваш вариант, пожалуйста.
ADMIN Дата: Чт, 13.08.2015, 16:44  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Вот сейчас вижу, что в U1 - переполнение стека после нажатия 5 для стопа.
Прикрепления: 9738648.rar(98Kb)
vladh Дата: Чт, 13.08.2015, 16:48  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

В Вашем варианте даже U1 перестал принимать первоначальные данные.
ADMIN Дата: Чт, 13.08.2015, 17:27  |                                                                                                                Сообщение # 8
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Так..., такой вариант не идет. Вернул первоначальный вариант. Но так, по идее, не делается. Я заметил, что после отправки команды Пуск(клавишей 5) аппарат (U1) начинает как раз с частотой 40 с чем то мС отправлять данные на U4, что, собственно и приводит к прерываниям с такой же частотой микроконтроллера U4. Может. стоит в этом направлении копнуть?
ADMIN Дата: Чт, 13.08.2015, 17:37  |                                                                                                                Сообщение # 9
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Вот такой вариант.... Обратите внимание на бит First
Прикрепления: RS232_.rar(97Kb)
vladh Дата: Пт, 14.08.2015, 10:01  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Сегодня все утро сравнивал и анализировал. Сделал для себя следующий вывод. Ваш вариант вроде как работает. Но дело в том, что МК U1 посылает посылку второму МК только один раз. Мне же надо, чтобы аппарат более менее регулярно отсылал значения тока и еще разных вещей регулярно. Я это предполагал делать 1 раз в секунду(в программе цикл гораздо меньше). А в этом случае компьютер не успевал просчитывать модель и программа зависала. Видимо это смоделировать не выйдет. Надо будет проверять в железе. На следующей неделе соберу и проверю.
Максим, спасибо за участие.
ADMIN Дата: Пт, 14.08.2015, 12:13  |                                                                                                                Сообщение # 11
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Да не за что!
Посылать постоянно - запросто! Заведите таймер на 1 сек. В прерывании по таймеру ставьте флаг, что пора отправлять. При выходе из прерывания - при проверке флага отправляйте данные, сбрасывайте флаг и т.д. Отправка будет 1 раз в сек, более или менее равномерно. Это будет лучше, чем 1 раз в 42 мСек.
vladh Дата: Пт, 14.08.2015, 12:47  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Я и собирался использовать прерывания по таймеру, но здесь для простоты сделал такую задержку.
ADMIN Дата: Пт, 14.08.2015, 18:46  |                                                                                                                Сообщение # 13
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Надеюсь, все получится. Что за аппарат, если не секрет?
vladh Дата: Сб, 15.08.2015, 08:39  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Секрет, но Вам я скажу. Аппарат для размагничивания различных конструкций .
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Обработка прерывния. Что то уходит не туда!?
Страница 1 из 11
Поиск: