переход со страницы на страницу в PIC16FXXX
|
|
dimitriy-bc |
Дата: Вт, 22.05.2012, 12:20 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Всем доброго времени суток. У меня не получается листать страницы PIC16F874A в ПРОТОНЕ. В программе пробовал команды BranchL BranchL KEY_NN, [ N, whor__l, layer, position, init__job, velocity__L ] ' и GoTo If KEY_N = 10 Then GoTo N If KEY_N = 11 Then GoTo whor__l If KEY_N = 12 Then GoTo layer If KEY_N = 13 Then GoTo position If KEY_N = 14 Then GoTo init__job If KEY_N = 15 Then GoTo velocity__L Участки программы, написанные по меткам N, whor__l, layer, position находятся на нулевой странице, а init__job, velocity__L на первой странице. В результате первые четыре участка программы отрабатывают нормально, а два последних… Смотрел сгенерированный asm. код в MPLAB. Третий и четвертый биты регистра PCLATH устанавливаются в ноль Bсf PCLATH,3 и Bсf PCLATH,4 хотя PCLATH,3 должен быть установлен в единицу. Пробовал программно устанавливать PCLATH,3 в единицу с командами GoTo и On GoTo. не работает. Подскажите, пожалуйста, как правильно переходить со страницы на страницу. Ну, совсем не хочется в asm. возвращаться.
Сообщение отредактировал
dimitriy-bc - Вт, 22.05.2012, 12:31
|
|
|
|
retas |
Дата: Вт, 22.05.2012, 20:33 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Если охота листать, то вам к асемблеру, а если програмировать - то к Бейсику (он сам за вас полистает) - МНЕ ТАК КАААТСА!!!
|
|
|
|
mikhail09p |
Дата: Ср, 23.05.2012, 16:26 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Да, давно пользуюсь этими командами, всё работает! Единственное, если не работает Branch , то пишем BranchL и всё ок!
|
|
|
|
dimitriy-bc |
Дата: Вс, 27.05.2012, 11:57 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Всем доброго времени суток. retas и mikhail09p, спасибо за сообщения. Действительно Бейсик листает страницы самостоятельно. Как я теперь понимаю у меня проблема с записью в EEPROM или со считыванием из EEPROM. В начале у меня выводилось ошибочное значение velocity_L при добавлении строки If number_XX = 6 Then whorl_nominal = ERead 1:layer_nominal = ERead 3:position_start = ERead 5:init_job = ERead 7: velocity_L = ERead 9
Также при добавлении этой строки, программа по объему захватывала как нулевую страницу, так и первую. Это меня и толкнуло на мысль о проблеме страничного перехода. Теперь, когда я дописал недостающие строки записи и считывания, видно, что страничный переход отрабатывает нормально, а вот запись или считывание последнего четырехбайтного слова происходит с ошибкой. Подскажите, что я делаю не так? И еще вопрос. Как лучше организовать подсветку или мигание изменяемой цифры? Заранее благодарен.
Сообщение отредактировал
dimitriy-bc - Вс, 27.05.2012, 17:44
|
|
|
|
mikhail09p |
Дата: Вс, 27.05.2012, 17:05 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Почитайте: http://terrarus.ucoz.ru/proton_plus_ide/index.html
Сообщение отредактировал
mikhail09p - Вс, 27.05.2012, 17:08
|
|
|
|
dimitriy-bc |
Дата: Вт, 29.05.2012, 21:09 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
mikhail09p, так вроде я это учел. Запись и считывание организована так ' '________________СЧИТЫВАНИЕ ДАННЫХ EEPROM______________ If PORTA.0 = 0 Then If number_XX = 6 Then whorl_nominal = ERead 1:layer_nominal = ERead 3:position_start = ERead 5:init_job = ERead 7: velocity_L = ERead 9 If number_XX = 9 Then whorl_nominal = ERead 13:layer_nominal = ERead 15:position_start = ERead 17:init_job = ERead 19: velocity_L = ERead 21 If number_XX = 12 Then whorl_nominal = ERead 25:layer_nominal = ERead 27:position_start = ERead 29:init_job = ERead 31: velocity_L = ERead 33 If number_XX = 14 Then whorl_nominal = ERead 37:layer_nominal = ERead 39:position_start = ERead 41:init_job = ERead 43: velocity_L = ERead 45 If number_XX = 16 Then whorl_nominal = ERead 49:layer_nominal = ERead 51:position_start = ERead 53:init_job = ERead 55: velocity_L = ERead 57 If number_XX = 18 Then whorl_nominal = ERead 61:layer_nominal = ERead 63:position_start = ERead 65:init_job = ERead 67: velocity_L = ERead 69 If number_XX = 20 Then whorl_nominal = ERead 73:layer_nominal = ERead 75:position_start = ERead 77:init_job = ERead 79: velocity_L = ERead 81 If number_XX = 25 Then whorl_nominal = ERead 85:layer_nominal = ERead 87:position_start = ERead 89:init_job = ERead 91: velocity_L = ERead 93 If number_XX = 32 Then whorl_nominal = ERead 97:layer_nominal = ERead 99:position_start = ERead 101:init_job = ERead 103: velocity_L = ERead 105 EndIf ' ... '_________________________ЗАПИСЬ ДАННЫХ В EEPROM__________________ If KEY = 15 Then If number_XX = 6 Then EWrite 1, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 9 Then EWrite 13, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 12 Then EWrite 25, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 14 Then EWrite 37, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 16 Then EWrite 49, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 18 Then EWrite 61, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 20 Then EWrite 73, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 25 Then EWrite 85, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] If number_XX = 32 Then EWrite 97, [ whorl_nominal, layer_nominal, position_start, init_job, velocity_L ] EndIf
первыми идут слова 16 бит, последним 32 бит.Добавлено (29.05.2012, 21:09) --------------------------------------------- Всем доброго времени суток. Со своими непонятками разобрался. Всем спасибо.
Сообщение отредактировал
dimitriy-bc - Вс, 27.05.2012, 23:33
|
|
|
|
evlis-s |
Дата: Пт, 07.06.2013, 14:22 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
9
Замечания:
±
На сайте с 11.05.2013
Статус:
Offline
|
Всем доброго времени суток! Возникла аналогичная проблема. Программа написана на PIC16f877A как только количество программных слов перевалило за 2048 (переход на другую страницу) у меня перестала работать команда goto (на второй станице). Вопрос: как заставить программу прыгать по всем страницам. в PBP таких проблем у меня не было. P. S.
строки: If f_izm_t = 0 And key = 0 Then GoTo main If f_izm_t = 1 Then GoSub TERMO_izmer просто заменить на on gotol нельзя.
|
|
|
|
shaman |
Дата: Пт, 07.06.2013, 14:52 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
178
Замечания:
±
На сайте с 07.11.2011
Статус:
Offline
|
День добрый , (evlis-s ) экстрасенсов здесь на форуме нет что бы не видя код сказать в чем проблема, приведите пример кода с файлом протеуса, если не хотите приводить и это такая секретная информация , тогда ищите сами ответ на свой вопрос.
PS: У меня есть машина белая такая , до скольки км/ч она разгонится за 10 сек. Пишу прогу по фотографии... Снимаю баги в коде по кофейной гуще... Удачи Вам.
Сообщение отредактировал
shaman - Пт, 07.06.2013, 15:21
|
|
|
|
evlis-s |
Дата: Пт, 07.06.2013, 15:36 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
9
Замечания:
±
На сайте с 11.05.2013
Статус:
Offline
|
Проект домашнего назначения. у меня есть оконный кондиционер(китаец) молотит круглые сутки, так как не тянет. Цель проекта заменить механическое управление на электронное с отслеживанием температуры (с помощью DS18B20) на входе в кондиционер(фактическая) и на выходе (так для себя хочу знать на сколько он охладил). в заменяемости какая температура соответствено компресор включается и выключается. также выбор скорости вентилятора и таймер работы, таймер отдыха, таймер отключения (ночной режим). Вся информация выводится на КЖ 8х2.
|
|
|
|
shaman |
Дата: Пт, 07.06.2013, 15:51 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
178
Замечания:
±
На сайте с 07.11.2011
Статус:
Offline
|
Я конечно все могу понять , но как это понять не понимаю . Программа для 877 камня , а схема для 628 А...?????????????????????? А это как я понял КЖ 8х2 ( LCD8x2 ) , а в схеме LCD 16х2. И как Вы собираетесь вмещать все это на LCD 8x2 , Вы просто ради интереса посчитайте сколько символов у Вас на экран выходит (Print At 1, 1, "tf-", Dec1 T_FAKT, 8, " ", Dec5 Analog ) ??????????????????????
Сообщение отредактировал
shaman - Пт, 07.06.2013, 16:06
|
|
|
|
mikhail09p |
Дата: Пт, 07.06.2013, 20:39 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Да уж... Device = 16F877A ' 16F628A
Цитата (evlis-s) как только количество программных слов перевалило за 2048 (переход на другую страницу) у меня перестала работать команда goto И не удивительно...
|
|
|
|
evlis-s |
Дата: Пн, 10.06.2013, 16:12 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
9
Замечания:
±
На сайте с 11.05.2013
Статус:
Offline
|
Цитата (shaman) Я конечно все могу понять , но как это понять не понимаю . Программа для 877 камня , а схема для 628 А...?????????????????????? А это как я понял КЖ 8х2 ( LCD8x2 ) , а в схеме LCD 16х2. И как Вы собираетесь вмещать все это на LCD 8x2 , Вы просто ради интереса посчитайте сколько символов у Вас на экран выходит ( ) ??????????????????????
Изначально программа писалась под камень 628 - в пятницу торопился на работе домой поэтому и ошибся выложил не тот файл. а на счет LCD 8x2 все правильно в проекте используются только первые 8 символов а запись (Print At 1, 1, "tf-", Dec1 T_FAKT, 8, " ", Dec5 Analog ) тестовая точнее ее часть (, " ", Dec5 Analog) по задумке выводить аналоговое значение на ЖК не нужно. Добавлено (10.06.2013, 16:12) --------------------------------------------- Да! Охаяли, а помочь не помогли.
|
|
|
|
Matrix252005 |
Дата: Пн, 10.06.2013, 16:36 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток!!!
Цитата (evlis-s) Да! Охаяли, а помочь не помогли. А что Вы хотите??? Ничего не написали и чего то ждете... Или Вы думаете что мы тут все:
Цитата (shaman) Пишу прогу по фотографии... Снимаю баги в коде по кофейной гуще... Экстрасенсы... Так нет...
Ваша программа норм компилится... Не считая мелких багов, прога работает!!! Так что, я не знаю что Вы хотите...
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
mikhail09p |
Дата: Пн, 10.06.2013, 22:01 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Команда On GoToL - предназначена для использования с микроконтроллерами, которые имеют больше чем одна страница памяти (у которых память больше чем 2048 кбайт)
Страницы тут не при чём, думается мне. Ошибка где-то иначе. А прога Ваша в таком виде, как есть, работает.
|
|
|
|
evlis-s |
Дата: Вт, 11.06.2013, 12:29 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
9
Замечания:
±
На сайте с 11.05.2013
Статус:
Offline
|
У меня не работают прерывания. (точнее нет отсчета времени по которому производится измерение температуры - 1 раз в секунду). Команда on gotol не удобна при выполнении сложных условий. например: If f_izm_t = 0 And key = 0 Then GoTo main.
|
|
|
|