Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Прерывание в pic basic
Прерывание в pic basic
Max_Ostin Дата: Пн, 26.02.2018, 10:02  |                                                                                                                Сообщение # 16
Группа: Пользователи
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 29.10.2017

Статус: Offline

В дебрях ин-нета не могу найти бесплатную версию Proton, все либо требуют ключ, либо заражены всякой гадостью.
mikhail09p Дата: Пн, 26.02.2018, 12:26  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Да зачем в дебрях искать! Тут на сайте всё есть!
Max_Ostin Дата: Чт, 01.03.2018, 07:44  |                                                                                                                Сообщение # 18
Группа: Пользователи
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 29.10.2017

Статус: Offline

ЛЮДИ!!! АУ!!! ГДЕ ВЫ!!!
Недавно установил Протон (3.5.2.6), скачанный с сайта.
При компиляции маленькой программки, он сделал тоже самое, что
и описанный выше PBP (см. моё первое сообщение). Единственные изменения
Это, добавил команду обнуления р-ра STATUS и лишнии команды перехода
 на подпрограмму обработки прерывания и в конце добавил команду "END"
 (это сам на себя замкнул безусловный переход).
Опять появилась старая "тройка"(как и в PBP):

    0x0025 : 0x1B8B   btfsc   0x0B , 7
    0x0026 : 0x0008   return
    0x0027 : 0x283E   goto    0x3E
 

где последняя строка это собственно и есть адрес перехода на под-
программу обработки прерываний. Но это не правильно! Это не настоящее
аппаратное прерывание! А преход на эту "тройку" есть call 0x25 ( 2025h ).
Которое и есть в программе прерыванием! И таких "калов" протон наложил
в программе целую кучу! Больше чем PBP. При попытке прогнать эту
прогу в протеусе, последний ругается: "стэкс оверфлоу"
Прикрепления: 6415987.png (25.4 Kb) · 2191601.png (34.0 Kb) · 1414789.png (0.9 Kb)
ivan_fd Дата: Чт, 01.03.2018, 09:46  |                                                                                                                Сообщение # 19
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Max_Ostin,  не в обиду. Скажите, а Вы документацию на компилятор смотрели???
А именно как работать с прерываниями. Я имею ввиду прерывания на протоне.

Может покажите здесь вашу программу?
Max_Ostin Дата: Чт, 01.03.2018, 19:51  |                                                                                                                Сообщение # 20
Группа: Пользователи
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 29.10.2017

Статус: Offline

Пожалуста...
Я начинал с PBP, по книжке великого Чака Хелибака. Пока хорошо освоил
16F84А и 16F628А камень. Учитель для прерывания использовал команду
On Interrupt Goto (и для окончательной настройки регистры Intcon и
Option_reg). После того как, я несколько раз пытался использовать прерывания
в своих программах, но терпел неудачу. И у меня закралась мысль, что это
сделано специально для бесплатно распространяемых программ.
Знал что есть другой компилятор похожий на Basic, это Proton и подумал:
а как он компилирует? И после установки Proton обнаружилось, что точно так же.
Конечно, я нашёл способ как исправить это. Но это ручной метод и занимает
много времени и чем длине прога, тем больше времени тратится на эту процедуру.
В прикреплённых файлах она есть, но немного изменён (не тот с которого сделаны
скриншоты, выложенные выше), но после компиляции
(причём сам компилятор не сообщает об ошибках, а значит всё правильно?)
и ручной правки хекс кода через программатор всё работает в Proteus и в железе.
Прикрепления: 16FF84A.bas (2.2 Kb)
ivan_fd Дата: Пт, 02.03.2018, 00:05  |                                                                                                                Сообщение # 21
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

У Вас получилась какая то смесь PicBasicPro и Proton.

Теперь говорю еще раз - отрываете: Proton Compiler Manual, страница 212 и читаете Software Interrupts in BASIC. Потом открываете страницу 303 и внимательно изучаете.
Удачи.
ЯНДЕКС Дата: 02.03.2018
xvovanx Дата: Пт, 02.03.2018, 11:30  |                                                                                                                Сообщение # 22
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Max_Ostin ()
Proton ..а как он компилирует? И после установки Proton обнаружилось, что точно так же.
Конечно, я нашёл способ как исправить это. Но это ручной метод и занимает
много времени и чем длине прога, тем больше времени тратится на эту процедуру

Никогда ничего не правил вручную и в мелких прогах с часиками и в огромных в 128к с четыремя видами прерываний. Протон, да и раньше ПикБайсик, всегда все корректно компилировали... wink

Сообщение отредактировал xvovanx - Пт, 02.03.2018, 11:33
Max_Ostin Дата: Вс, 11.03.2018, 17:50  |                                                                                                                Сообщение # 23
Группа: Пользователи
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 29.10.2017

Статус: Offline

Цитата xvovanx ()
Никогда ничего не правил вручную и в мелких прогах с часиками и в огромных в 128к
Cпассибо всем кто откликнулся, но всё же, я о своём наболевшем...
Изучил мануал по Протону и в частности по прерываниям.
Оказалось там три типа прерываний:
On_Low_Interrupt - это Interrupt для пиков 18 серии и пока мне не интересен.
On_Hardware_Interrupt - это сообственно и есть "железный" Interrupt.
В тоже время компилятор понимает команду и
On_Interrupt - это когда он создаёт подобие (эмуляцию) Interrupt. Но извините
меня Interrupt он и в Африке Interrupt! Зачем же разработчики Протона это
придумали? Не понимаю? Ведь достаточно вставить в прогу команду Delay и уже ни
каких лже прерываний, во время работы этой задержки, не будет!
В другое время и при компиляции команды On_Hardware_Interrupt опять обнаружил
странности или непонятности.
Создал небольшую прогу используя команду On_Hardware_Interrupt, затем откомпи-
лировав её и просмотрев итог, увидел, что в начале выполнения её сохраняются
первым аккумулятор, вторым статус (и одновременно обнуляется), и третьим FSR
По идее перед командой Retfie эти регистры должны востанавливаться. Ан-нет!
Прога заканчивается выходом Return и без всякого востановления ранее сохранё-
ных аккумул., стасус и FSR! Пришлось в ручную её дописывать асемблером.
Кто нибудь знает в чём дело?
Прикрепления: INT.bas (2.6 Kb)
anatol Дата: Вс, 11.03.2018, 20:30  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Учиться и учить описание на контроллер. В сети есть отличный перевод мануала на 16 ПИКи: http://www.microchip.ru/lit/?mid=1x0
А на нашем сайте есть немного по прерываниям http://www.picbasic.ru/publ....-0-111.
Прямо в Протоне есть файл помощи вызываемой по нажатию кнопки "Help" вверху/
Вот кусок перевода предупреждения части описания команд и директив стр.153 команды Context
"Заметки.
Когда происходит прерывание, немедленно покидается основная программа и переход к прерыванию
обрабатывая подпрограмму независимо от того, что делает основная программа. Основная программа в целом не подозревает, что произошло прерывание, и если прерывание использует какие-либо ресурсы устройства или системные переменные компилятора и обработчик прерываний делают то же самое, они будут изменены когда основная программа продолжится, с катастрофическими результатами.
Это является причиной сохранения контекста и восстановления внутренних системных переменных компилятора и SFR устройства (специальные регистры функций). Каждая команда компилятора генерирует переменные для того, чтобы он работать, либо для передачи параметров, либо для фактической работы библиотечной процедуры.
Некоторые команды также используют SFR устройства, например FSR или PRODL или
PRODH и т. Д. ..."
Поэтому, чтобы не писать команды на ассемблере, есть команды Context Save {Variable,Variable},
Context Restore. По команде Context Saveсохраняются регистры специальных функций SFRs, а добавив регистры (Variable) можно сохранить и другие регистры.
Команды обязательны при применении прерываний.
Вот здесь http://www.microchip.ru/files/d-sheets-rus/pic16_8.pdf, на странице 5 отличная картинка логики прерываний. из которой следует что прерывания будут работать если будут включены.
В выложенной программе прерывания не включены (задекларированы)
Еще количество оперативной памяти в процессорах ограничено, и дублировать регистры моветон.
xvovanx Дата: Вс, 11.03.2018, 23:15  |                                                                                                                Сообщение # 25
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Max_Ostin ()
Кто нибудь знает в чём дело?


Только без обид.
Забудьте вы про свой ассемблер, лучше гляньте пару простых примеров с прерываниями и какие и где команды пишут.
Max_Ostin Дата: Пн, 12.03.2018, 15:44  |                                                                                                                Сообщение # 26
Группа: Пользователи
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 29.10.2017

Статус: Offline

Спасибо Анатолий и xvovanx. Разобрался наконец с прерываниями. Всё дело в Context Save/Context Restore, просто я по англицки плохо читаю, а все мануалы по описанию команд Протона именно на нём. Больше или пока вопросов не имею. Кстати может подскажете, когда программировал в MPLAB с интегрированным PBP, там были горячие клавиши "Коммент блок" и "Ункоммент блок" а у Протон компилятора есть такие?
anatol Дата: Пн, 12.03.2018, 16:47  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

С языком испортячим и у меня проблемы. Пользуюсь  https://translate.google.com/ . В частности pdf файл открываю Adobe Acrobat Reader, выделяю нужный кусок, копирую и перевожу. Дальше соображаю как правильно.
С MPLAB вплотную не занимался, даже не знаю поддерживает ли она Proton. Для проверки использую Proteus. Мне было достаточно такой связки. Ведь отрабатывать программу можно кусочками. Удачи.
Max_Ostin Дата: Вт, 13.03.2018, 07:21  |                                                                                                                Сообщение # 28
Группа: Пользователи
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 29.10.2017

Статус: Offline

Я об другом, в MPLAB при написании проги есть такие опции, при нажатии которых можно было выделенный блок либо сделать комментарием, либо снять комментарии с него.
Это очень удобно в процессе написания и отладки.
Прикрепления: Video_2018-03-1.wmv (323.3 Kb)

Сообщение отредактировал Max_Ostin - Вт, 13.03.2018, 07:52
ivan_fd Дата: Вт, 13.03.2018, 12:21  |                                                                                                                Сообщение # 29
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Есть такое в Протоне.

Max_Ostin Дата: Чт, 15.03.2018, 09:39  |                                                                                                                Сообщение # 30
Группа: Пользователи
Ранг:  Новенький
Сообщений: 12
Репутация: 0   ±
Замечания:   ±
На сайте с 29.10.2017

Статус: Offline

Спасибо
Форум Picbasic.ru » Программирование МК » PicBasicPro » Прерывание в pic basic
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: