Форум за електроника Форуми Форум за електроника

Форум за електроника
Български форум за електроника, ремонти, схеми, документация
 
 Въпроси/ОтговориВъпроси/Отговори   ТърсенеТърсене   ГрупиГрупи   Регистрирайте сеРегистрирайте се 
 ПрофилПрофил   Влезте, за да видите съобщенията сиВлезте, за да видите съобщенията си   ВходВход 

Service Manual Search :   Enhanced by: Jabse.com : българската търсачка
Въпрос за банките памет на PIC16F877A
Иди на страница 1, 2, 3, 4, 5  Следваща
 
Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Общи приказки - Just talking
Предишната тема :: Следващата тема  
Автор Съобщение
emil74
Опитен потребител
Опитен потребител


Регистриран на: 16 Мар 2007
Мнения: 1106

МнениеПуснато на: Вто Фев 19, 2008 2:53    Заглавие: Въпрос за банките памет на PIC16F877A Отговорете с цитат

Налага ми се да пиша програма, в която има доста променливи. Забелязах, че от един момент престана да работи програмата и установих, че това се получава, когато променливите SYM1...SYMn не са дефинирани в нулевата банка, а в 1 и 2:

CBLOCK H'A0' ; 1RAM starts at address A0h
SYM1
SYM2
......
SYMn
ENDC

Тогава спира да работи следната проверка:

bcf STATUS,Z
movf SYM1,w
xorlw H'73'
btfsc STATUS,Z
goto S2

Във файла за грешките има съобщения за настройка на битовете за банките

Доста търсих, но не можах да намеря нещо, от което да разбера, къде и КАК трябва да се работи с променливите, за да не се получава такъв проблем. Тоест: къде настройвам банката (STATUS,RP0 STATUS,RP1)?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Комбинатор
Опитен потребител
Опитен потребител


Регистриран на: 31 Окт 2007
Мнения: 310

МнениеПуснато на: Вто Фев 19, 2008 9:47    Заглавие: Отговорете с цитат

PCLATH<4> и PCLATH<3>
С тези 2 флага на регистъра настройваш
Програмната дума към коя банка да се обръща.
Това става само ръчно и софтуерно.
Причината е в невъзможноста в 14 битовата
програмна дума да се инициализира по голям адрес,
да съдържа и кода на операцията и същевременно и 8 бита данни.
Затова PCLATH<4> и PCLATH<3> се добавя в началото на думата.
На дявам се да се изразявам правилно, защото тези неща ги пише в даташета на процессора и то на англииски. А аз не съм преводач.

P.S А ще забележиш че статус регистъра се дублира в всяка банка.
И поне към него няма нужда от настройка на банката


ORG 0x500
BCF PCLATH,4
BSF PCLATH,3 ;Select page 1;(800h-FFFh)
CALL SUB1_P1 ;Call subroutine in: ;page 1 (800h-FFFh):
ORG 0x900 ;page 1 (800h-FFFh)
SUB1_P1: ;called subroutine;page 1 (800h-FFFh):
RETURN ;return to;Call subroutine;in page 0;(000h-7FFh)


2.4 Program Memory Paging
All PIC16F87XA devices are capable of addressing a
continuous 8K word block of program memory. The
CALL and GOTO instructions provide only 11 bits of
address to allow branching within any 2K program
memory page. When doing a CALL or GOTO instruction,
the upper 2 bits of the address are provided by
PCLATH<4:3>. When doing a CALL or GOTO instruction,
the user must ensure that the page select bits are
programmed so that the desired program memory
page is addressed. If a return from a CALL instruction
(or interrupt) is executed, the entire 13-bit PC is popped
off the stack. Therefore, manipulation of the
PCLATH<4:3> bits is not required for the RETURN
instructions (which POPs the address from the stack).
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Niakoi
Опитен потребител
Опитен потребител


Регистриран на: 20 Авг 2006
Мнения: 350
Местожителство: Каръктаун

МнениеПуснато на: Вто Фев 19, 2008 15:29    Заглавие: Отговорете с цитат

Комбинатора е прав, но това е за програмната памет. А за твоя случай - погледни в дейташита: в STATUS регистъра има два бита RP0 и RP1. Виж какво пише за тях.
За да ти работи проверката:

bcf STATUS,Z
bsf STATUS,RP0
movf SYM1,w
bcf STATUS,RP0
xorlw H'73'
btfsc STATUS,Z
goto S2

По-добър вариант е, да сложиш на местото на тоя пик един 18F452 (пасва точно на крачетата) и да (ще) забравиш за съществуването на 16-ките.
_________________
Жица, на която не виждам двата края, не я пипам!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Комбинатор
Опитен потребител
Опитен потребител


Регистриран на: 31 Окт 2007
Мнения: 310

МнениеПуснато на: Вто Фев 19, 2008 15:32    Заглавие: Отговорете с цитат

Да така е но за мен е лош навик исползването на
RP0 и RP1
А когато DB
или там каквото исползваш
масива ти надхвърли SRAM-а на една банка
и се наложи прехвърлянето в друга тогава става лошо,
защото се налага ръчно да сменяш банките с RP0 и RP1
но mikrochip имат апнотки за такива случай.
А нещо не схващам примера,
виждам че си проверяваш Z bita при XOR
но това няма да даде грашка в която и банка да работиш
Освен грешни данни в W , от друга банка


Последната промяна е направена от Комбинатор на Вто Фев 19, 2008 15:55; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Niakoi
Опитен потребител
Опитен потребител


Регистриран на: 20 Авг 2006
Мнения: 350
Местожителство: Каръктаун

МнениеПуснато на: Вто Фев 19, 2008 15:50    Заглавие: Отговорете с цитат

Комбинатор, човека проверява, дали променливата е равна на 73h. Кой флаг предлагаш да проверява след XOR!?
И как се обръщаш към променлива в рам-а на адрес А0h, без да ползваш RP битовете?
_________________
Жица, на която не виждам двата края, не я пипам!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Комбинатор
Опитен потребител
Опитен потребител


Регистриран на: 31 Окт 2007
Мнения: 310

МнениеПуснато на: Вто Фев 19, 2008 16:01    Заглавие: Отговорете с цитат

Сори в момента работя с референций ,класове и темподобни, опитвам се да синхронизирам процеси и ми идва малко в повече
разговора за пикльто.
Не виждам проблема в кода му, ако е в вярната банка
И сега погледнах датата на този проц
ако SIMN n<=80


Последната промяна е направена от Комбинатор на Вто Фев 19, 2008 16:10; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Niakoi
Опитен потребител
Опитен потребител


Регистриран на: 20 Авг 2006
Мнения: 350
Местожителство: Каръктаун

МнениеПуснато на: Вто Фев 19, 2008 16:08    Заглавие: Отговорете с цитат

Very Happy
_________________
Жица, на която не виждам двата края, не я пипам!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Комбинатор
Опитен потребител
Опитен потребител


Регистриран на: 31 Окт 2007
Мнения: 310

МнениеПуснато на: Вто Фев 19, 2008 16:15    Заглавие: Отговорете с цитат

Да прав си има 2 регистри единия е в банка 0
а другата в банка 1
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
woodoman
Активен потребител
Активен потребител


Регистриран на: 03 Яну 2008
Мнения: 67

МнениеПуснато на: Сря Фев 20, 2008 19:48    Заглавие: Отговорете с цитат

Така писан кода променливата SYM1 е деклалирана в банка1. При преместване на съдържанието в работния регистър ще се прехвърли стойноста на регистър с адрес 20 от банка0. За да фонкционира правилно програмата трябва преди обрщение към съответния регистър да се инициализира правилната банка. Това става както са писали чрез битове RP0 и RP1 на регистър STATUS<5,6>. В съответния случай преди съответния блок от команди трябва да се постави:
BCF STATUS,6 ;
BSF STATUS,5 ;Избира се банка1
bcf STATUS,Z
movf SYM1,w
xorlw H'73'
btfsc STATUS,Z
goto S2
BCF STATUS,5
Ако след този блок се проверяват регистри намиращи се в банка1 последната команда може да не се пише.
Ако те интересува нещо друго пиши.
_________________
Нека да си помагаме взаимно. Защото ако не си помогнем ние няма кой да ни помогне.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
emil74
Опитен потребител
Опитен потребител


Регистриран на: 16 Мар 2007
Мнения: 1106

МнениеПуснато на: Сря Фев 20, 2008 21:23    Заглавие: Отговорете с цитат

Мисля, че последното ще свърши работа. Не бях сигурен само къде точно посочвам банките. Ще променя програмата и ще напиша какъв е резултатът.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Потърси "Въпрос за банките памет на PIC16F877A" в магазин за електроника Pulsator.bg : БЕЗПЛАТНА ДОСТАВКА над 90 лв.

Покажи мнения от преди:   
Потърси "Въпрос за банките памет на PIC16F877A" в Интернет



Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Общи приказки - Just talking Часовете са според зоната GMT + 2 Часа
Иди на страница 1, 2, 3, 4, 5  Следваща
Страница 1 от 5

 
Към:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети