Изучение уязвимостей электронных систем.
 
key programming immo tools emergency start device программаторы ключа заводилки Кодграббер штатных охранных систем, toyota, lexus, subaru.

Вернуться   Изучение уязвимостей электронных систем > Для начинающих > Программирование микроконтроллеров

Программирование микроконтроллеров Темы касающиеся программированию микроконтроллеров разных производителей.

Ответ
 
Опции темы
Старый 15.06.2010, 09:09   #1
burnout84
гость
 
Аватар для burnout84
 
Регистрация: 14.02.2007
Сообщений: 178
Поблагодарил: 14
Поблагодарили 73 раз в 27 сообщениях
burnout84 стоит на развилке
По умолчанию Вычисленный перехд (Pic16f84)

Есть такая проблема у меня. На отрезке программы, после PC=0xFF, не адекватно работает вычисленный переход.

По идее должно быть вот так:

К примеру, PC=0x10
WREG=1

ADDWF PC,1
RETLW 0x00 (СЮДА ПОПАДАЕМ ЕСЛИ W=0, PC=0x11)
RETLW 0x01 (СЮДА ЕСЛИ W=1, PC=0x12)


Но если комапнды находятся в области памяти программ, за адресом 0xFF, то такая тема:

PC=0x108, W=0

ADDWF PC,1
RETLW 0x00 (ДОЛЖНЫ ПОПАСТЬ СЮДА)
RETLW 0x01

После сложения счетчика PC 0x108+0x01 получается 0x9, т.е. это совсем др.участок программы. Счетчик состоит из двух байтов. Сложение происходит с младшим, а старший просто куда-то исчезает.

Как в этом случаи быть? (MPLAB IDE v8.30)
burnout84 вне форума   Ответить с цитированием
Старый 15.06.2010, 09:57   #2
oleg
продвинутый фрикер
 
Аватар для oleg
 
Регистрация: 22.01.2007
Сообщений: 2,080
Поблагодарил: 191
Поблагодарили 2,192 раз в 427 сообщениях
oleg скоро станет знаменитым(-ой)
По умолчанию

Насколько я помню, что бы манипулировать счетчиком команд, нужно перед процедурой оказаться в начале страницы. Почитай про счетчик и страничную организацию памяти контроллера.

---------- Post added at 09:56 ---------- Previous post was at 09:32 ----------

Разберись с PCLATH - вообщем регистр PCLATH надо проинициализировать. И еще на границе страниц, программисты не располагают таблицы и процедуры - потому что не возможно точно настроить переходы. Вот кусок кода, нашел у себя на компе, не мучайся с 16 бери пик 18!

clrf PCLATH
movf RCREG,w
movwf bait_command
addwf PCL,f

goto awai
goto hands
goto get_cur
goto set_cur
goto mem_er

---------- Post added at 09:57 ---------- Previous post was at 09:56 ----------

Вот пример помещение процедуры в начало страницы директивой org и таблица:
org ($ & 0xFF00)+0x0100
Ind_Set: movlf count_set,0xAA
movlf ind_blink,0xAA
movlf ind_flag,0
movlf PCLATH,high$
movf ind_select,w
addwf ind_select,w
addwf ind_select,w
addwf ind_select,w
addwf PCL,f

nop
nop


уехал в клуб
oleg вне форума   Ответить с цитированием
Старый 16.06.2010, 16:21   #3
burnout84
гость
 
Аватар для burnout84
 
Регистрация: 14.02.2007
Сообщений: 178
Поблагодарил: 14
Поблагодарили 73 раз в 27 сообщениях
burnout84 стоит на развилке
По умолчанию

18 пик лежит, но мне пока что хватает 16-го

С проблемой разобрался. Спасибо за примеры.

Разобрался с помощью даташита. Надо было сразу туда лезть, но когда производишь элементарную операцию сложения, а в результате что-то необъяснимое, это вынос мозга.

Счетчик PC состоит из 2-х байт, младшего и старшего (на самом деле старший байт состоит из менее чем 8 бит, но это не важно). Программист может читать и записывать только младший байт. А в старший, значение можно закинуть через регистр PCLATH, перед операцией с PC.

Вообщем, прежде чем делать вычисленный переход, нужно в регистр PCLATH занести значение, грубо говоря страницы памяти, той куда планируется переход. Жутко не удобно.

В моем примере, правильно должно быть вот как:

; PC=0x108, W=0

MOVLW 0x01
MOVWF PCLATH

ADDWF PC,1
RETLW 0x00 (ДОЛЖНЫ ПОПАСТЬ СЮДА)
RETLW 0x01
burnout84 вне форума   Ответить с цитированием
Старый 25.08.2010, 04:02   #4
Ahalam
начинающий фрикер
 
Аватар для Ahalam
 
Регистрация: 16.04.2007
Сообщений: 579
Поблагодарил: 15
Поблагодарили 37 раз в 27 сообщениях
Ahalam стоит на развилке
По умолчанию

интересно, а какой диапазон PCLATH в твоем случае???
Ahalam вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Проблема] PIC16F84 не считывается Engineer7 Программирование микроконтроллеров 14 07.12.2011 23:58
[Вопрос] PIC16F84 защита? Engineer7 Лаборатория 1 11.09.2011 00:56
кодграббер на pic16f84 ilya-kunicyn Новички 5 25.02.2009 18:21


Текущее время: 14:19. Часовой пояс GMT +4.


Перевод: zCarot