Прерывание в pic basic
|
|
Max_Ostin |
Дата: Пн, 26.02.2018, 10:02 | Сообщение # 16 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 29.10.2017
Статус:
Offline
|
В дебрях ин-нета не могу найти бесплатную версию Proton, все либо требуют ключ, либо заражены всякой гадостью.
|
|
|
|
mikhail09p |
Дата: Пн, 26.02.2018, 12:26 | Сообщение # 17 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Да зачем в дебрях искать! Тут на сайте всё есть!
|
|
|
|
Max_Ostin |
Дата: Чт, 01.03.2018, 07:44 | Сообщение # 18 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 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. При попытке прогнать эту прогу в протеусе, последний ругается: "стэкс оверфлоу"
|
|
|
|
ivan_fd |
Дата: Чт, 01.03.2018, 09:46 | Сообщение # 19 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Max_Ostin, не в обиду. Скажите, а Вы документацию на компилятор смотрели??? А именно как работать с прерываниями. Я имею ввиду прерывания на протоне.
Может покажите здесь вашу программу?
|
|
|
|
Max_Ostin |
Дата: Чт, 01.03.2018, 19:51 | Сообщение # 20 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 29.10.2017
Статус:
Offline
|
Пожалуста... Я начинал с PBP, по книжке великого Чака Хелибака. Пока хорошо освоил 16F84А и 16F628А камень. Учитель для прерывания использовал команду On Interrupt Goto (и для окончательной настройки регистры Intcon и Option_reg). После того как, я несколько раз пытался использовать прерывания в своих программах, но терпел неудачу. И у меня закралась мысль, что это сделано специально для бесплатно распространяемых программ. Знал что есть другой компилятор похожий на Basic, это Proton и подумал: а как он компилирует? И после установки Proton обнаружилось, что точно так же. Конечно, я нашёл способ как исправить это. Но это ручной метод и занимает много времени и чем длине прога, тем больше времени тратится на эту процедуру. В прикреплённых файлах она есть, но немного изменён (не тот с которого сделаны скриншоты, выложенные выше), но после компиляции (причём сам компилятор не сообщает об ошибках, а значит всё правильно?) и ручной правки хекс кода через программатор всё работает в Proteus и в железе.
|
|
|
|
ivan_fd |
Дата: Пт, 02.03.2018, 00:05 | Сообщение # 21 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
У Вас получилась какая то смесь PicBasicPro и Proton.
Теперь говорю еще раз - отрываете: Proton Compiler Manual, страница 212 и читаете Software Interrupts in BASIC. Потом открываете страницу 303 и внимательно изучаете. Удачи.
|
|
|
|
xvovanx |
Дата: Пт, 02.03.2018, 11:30 | Сообщение # 22 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Max_Ostin ( ) Proton ..а как он компилирует? И после установки Proton обнаружилось, что точно так же. Конечно, я нашёл способ как исправить это. Но это ручной метод и занимает много времени и чем длине прога, тем больше времени тратится на эту процедуру Никогда ничего не правил вручную и в мелких прогах с часиками и в огромных в 128к с четыремя видами прерываний. Протон, да и раньше ПикБайсик, всегда все корректно компилировали...
Сообщение отредактировал
xvovanx - Пт, 02.03.2018, 11:33
|
|
|
|
Max_Ostin |
Дата: Вс, 11.03.2018, 17:50 | Сообщение # 23 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 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! Пришлось в ручную её дописывать асемблером. Кто нибудь знает в чём дело?
|
|
|
|
anatol |
Дата: Вс, 11.03.2018, 20:30 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 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 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Max_Ostin ( ) Кто нибудь знает в чём дело?
Только без обид. Забудьте вы про свой ассемблер, лучше гляньте пару простых примеров с прерываниями и какие и где команды пишут.
|
|
|
|
Max_Ostin |
Дата: Пн, 12.03.2018, 15:44 | Сообщение # 26 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 29.10.2017
Статус:
Offline
|
Спасибо Анатолий и xvovanx. Разобрался наконец с прерываниями. Всё дело в Context Save/Context Restore, просто я по англицки плохо читаю, а все мануалы по описанию команд Протона именно на нём. Больше или пока вопросов не имею. Кстати может подскажете, когда программировал в MPLAB с интегрированным PBP, там были горячие клавиши "Коммент блок" и "Ункоммент блок" а у Протон компилятора есть такие?
|
|
|
|
anatol |
Дата: Пн, 12.03.2018, 16:47 | Сообщение # 27 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
С языком испортячим и у меня проблемы. Пользуюсь https://translate.google.com/ . В частности pdf файл открываю Adobe Acrobat Reader, выделяю нужный кусок, копирую и перевожу. Дальше соображаю как правильно. С MPLAB вплотную не занимался, даже не знаю поддерживает ли она Proton. Для проверки использую Proteus. Мне было достаточно такой связки. Ведь отрабатывать программу можно кусочками. Удачи.
|
|
|
|
Max_Ostin |
Дата: Вт, 13.03.2018, 07:21 | Сообщение # 28 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 29.10.2017
Статус:
Offline
|
Я об другом, в MPLAB при написании проги есть такие опции, при нажатии которых можно было выделенный блок либо сделать комментарием, либо снять комментарии с него. Это очень удобно в процессе написания и отладки.
Сообщение отредактировал
Max_Ostin - Вт, 13.03.2018, 07:52
|
|
|
|
ivan_fd |
Дата: Вт, 13.03.2018, 12:21 | Сообщение # 29 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Есть такое в Протоне.
|
|
|
|
Max_Ostin |
Дата: Чт, 15.03.2018, 09:39 | Сообщение # 30 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 29.10.2017
Статус:
Offline
|
Спасибо
|
|
|
|