| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Помощ ПИК16Ф88. Прогр.памет над 2048 не мога да ползвам. http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13384 |
Страница 1 от 1 |
| Автор: | CarBeta [ Пет Ное 28, 2014 9:41 pm ] |
| Заглавие: | Re: Помощ ПИК16Ф88. Прогр.памет над 2048 не мога да ползва |
Не ти е проблема в инициализирането. 14 битовите команди позволяват максимум 11 бита за адрес т.е. максималния адрес е 2048. За да прескочиш на друга страница трябва да сетнеш още няколко бита по други регистри, които формират горните адреси. Ако имаш подпрограма, която започва в края на първата страница и преминава в следващата страница, то тая подпрограма ще работи само в частта от първата страница и после ще отиде на нулевия адрес т.е. в началото. За да не стават такива магарии най-лесно е да си маркираш началото на горната страница с ORG 0x800 и от там нататък всичко е във втората страница. Ако имаш CALL или GOTO от едната страница към другата трябва да използваш PAGESEL. ... ... PAGESEL PODPROGRAMA_10 CALL PODPROGRAMA_10 ... ... |
|
| Автор: | excitron [ Пет Ное 28, 2014 10:25 pm ] |
| Заглавие: | Re: Помощ ПИК16Ф88. Прогр.памет над 2048 не мога да ползва |
За написаното до тук колега много благодаря и затова на част от изречението ви добавям моите регистри.Тях ли трябва да сетна и как за пример ,ако е това.Освен това разбрах че трябва да маркирам мястото за втора страница като оглеждам всеки път преди компилирането ми къде е началото на втора страница. И последно да не ползвам call i goto когато правя преход към страниците .А да пиша: pagesel или да поставям това всеки път над call i goto. И за съвет намерих и това пак за: pagesel , какво означава това : movlw high(tableaddr) movwf PCLATH Моля потвърдете ми ако съм разбрал по горе нещата ,как да сетна регистрите . Не ти е проблема в инициализирането. 14 битовите команди позволяват максимум 11 бита за адрес т.е. максималния адрес е 2048. За да прескочиш на друга страница трябва да сетнеш още няколко бита по други регистри, които формират горните адреси. ; Определение регистров. CLen EQU 0x20 ; Количество периодов несущей ; (определяет длину импульса несущей). CLenV EQU 0x21 ; Переменная цикла для длины импульса. IrCmd EQU 0x24 ; Байт команды протокола. SendB EQU 0x25 ; Байт, посылаемый процедурой SendByte. Btn EQU 0x26 ; Результат опроса кнопок ; (0-4 или 5 - не нажата). BtnPrev EQU 0x27 ; Предыдущий результат опроса кнопок. BtnTmp EQU 0x28 ; Временный результат опроса кнопок. ADCRes EQU 0x29 ; Результат АЦП. P1msV EQU 0x30 ; Переменная цикла для процедуры паузы. PNmsV EQU 0x31 ; Переменная цикла для процедуры паузы. CfrmLoopV EQU 0x32 ; Переменная цикла CfrmLoop. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SHIFT_FUNC EQU 0X33 btnshift EQU 0X34 BIT_SHIFT_ON EQU 0X35 IMPULS EQU 0X36 Btn_shift_temp EQU 0X37 COUNTER EQU 0X19 ACQT EQU 0X38 ;******************************************************************************* TIMER_1SEC EQU 0X39 CIKAL_MIGANE EQU 0X40 CIKAL_MIGANE_1 EQU 0X41 Btn0 EQU 0x42 ; Порог кнопки mute. Btn1 EQU 0x43 ; Порог кнопки Vol-. Btn2 EQU 0x44 ; Порог кнопки Vol+. Btn3 EQU 0x45 ; Порог кнопки Seek+. Btn4 EQU 0x46 ; Порог кнопки Seek-. Btn5 EQU 0x47 ; Порог кнопки MODE Btn6 EQU 0x48 BUTON_ZA_SHIFT EQU 0X49 INTCONMEM EQU 0x7A ;Bank 0,1,2,3 REEADR EQU 0x7B ;Bank 0,1 REEDATA EQU 0x7C ;Bank 0,1 BUTON_KOMBINIRAN EQU 0x4A CHANGE_CD EQU 0X4B CHANGE_CD_1 EQU 0X4C POVTORI_CODE EQU 0X4D ;******************************************************************************* Btn_VE4E_SUMIRAN equ 0X4E btnshift1 equ 0x4F ;ADCRes1 equ 0x7D ;OPTIONMEM EQU 0xA0 ORG 0x0000 ; Вектор сброса. goto Main ; Переход к началу программы. |
|
| Автор: | CarBeta [ Съб Ное 29, 2014 10:01 am ] | |||||||||
| Заглавие: | Re: Помощ ПИК16Ф88. Прогр.памет над 2048 не мога да ползва | |||||||||
Не знам защо ги цитираш тия променливи, които нямат нищо общо с темата. Това са декларации на променливи от програма за 12Ф629 за управление на авто радио от бутоните на волана. Регистъра, който те интересува е PCLATH. Там се пише горната част от адреса.
Горното е абсолютно същото, като PAGESEL, но си прецакваш работния регистър и не можеш да го ползваш да пренесе данни във функциата, към която се обръщаш. За преход към втората страница е достатъчно и само BSF PCLATH, 3 Това го пишеш преди CALL или GOTO. След CALL трябва да имаш PAGESELL $ или BCF PCLATH, 3 за да продължи от там програмата след RETURN |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|