| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Как в PIC 16f877 переключать страницы памяти?
12.06.2012, 13:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
вот кусок главный
|
|
|
|
12.06.2012, 14:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Программа ужас (в логику программы не вдавался). Не определена постоянная DELAY.
|
|
|
|
12.06.2012, 14:16
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
там простое мигание светодиодами. Та переменная определена в другом файле где только дефайны прописаны со фьюзами и т.д.ююю
|
|
|
|
12.06.2012, 14:19
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Ну тогда выложите и main.h, но в любом случае программа слишком неоптимальная по размеру программной памяти.
|
|
|
|
12.06.2012, 14:48
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
У Вас в программе DELAY_MS вызвана порядка 100 раз(!), а надо бы загнать все это безобразие в цикл, кроме того, для надежности выложите и hex файл.
|
|
|
|
12.06.2012, 14:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Яркий пример попытки сделать "универсальный" алгоритм.  Типичная ощибка начинающих. Сформируйте массив значений и выводите их через порты в цикле с задержкой. Действительно, непрерывный участок кода не может быть больше размера одной страницы памяти программ. Поэтому и ругается компилятор.
nonamedov, из-за желания обеспечить возможность произвольного назначения портов и возник сей "монстр"
__________________
misterdi<@>i.ua
Последний раз редактировалось MisterDi; 12.06.2012 в 14:53.
|
|
|
|
12.06.2012, 14:55
|
|
|
Заблокирован
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Сообщение от nonamedov
|
|
У Вас в программе DELAY_MS вызвана порядка 100 раз(!),
|
Да хоть 2000 раз... 
Вопрос - влезет или не влезет...
Пока не вижу причин, чтобы прога не влезла...
Сообщение от nonamedov
|
|
для надежности выложите и hex файл.
|
Не прикалывайтесь... если компилер сильно ругается... откуда HEX ???
|
|
|
|
12.06.2012, 15:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Сообщение от MisterDi
|
|
Действительно, непрерывный участок кода не может быть больше размера одной страницы памяти программ.
|
Что значит "непрерывный участок кода"? По Вашему надо писать подпрограммами?!
|
|
|
|
12.06.2012, 15:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
Надо бы посмотреть как осуществляется реализация SWITCH оператор в этом компиляторе, возможно он не может адресовать из одной в другую страницу.
|
|
|
|
12.06.2012, 15:47
|
|
|
Вид на жительство
Регистрация: 16.09.2011
Сообщений: 342
Сказал спасибо: 10
Сказали Спасибо 170 раз(а) в 103 сообщении(ях)
|
Re: Как в PIC 16f877 переключать страницы памяти?
|
Цитата:
|
|
Действительно, непрерывный участок кода не может быть больше размера одной страницы памяти программ.
|
Да ну, бросьте  Счетчик команд инкрементируется без проблем, если "код непрерывный". Сам сетчик команд 13-битный, младшие 8 бит содержатся в регистре PCL, а старшие - в PCLATH.
Тот код, который записавается в ячейки памяти программ контроллера, может управлять переходом именно в пределах 11 битного адреса памяти программ.. Старшие 2 бита содержатся с регистре-защелке PCLATH, из нее берется номер страницы, который должен быть записан перед командой перезода.
Всё это в даташите описано.
Последний раз редактировалось Bumbarra; 12.06.2012 в 16:33.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:23.
|
|