|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 4:32 am
Проблем със страниците на PIC16F877
| Автор |
Съобщение |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
PCLATH не се променя от контролера, а само "ръчно" от програмата.
PCLATH нищо не "прехвърля" . Той само насочва в коя страница/сегмент ще "скочи" програмния брояч. Битове 4,3 сочат страницата и се ползват при goto и call, а 2,1,0 сочат сегмента и се ползват заедно с 4,3 при промяна на PCL. Изчислението се прави така:
movlw high Label - това слага и 5-те бита в W
movwf PCLATH - така PCLATH ще сочи точно към страницата и сегмента на Label. Label си е име на каква да е подпрограма или просто етикет.
Пробвай следното - в началото на всяка страница сетваш точните битове 4,3 в PCLATH. Същото и в точката на връщане от return-a. Това мисля ще ти реши проблема в случая. Разгледай hex- файла в MPLAB-a , там ще се ориентираш за разположението на кода в паметта.
Ти видеото приемаш ли го или го предаваш? Да не извеждаш информация към телевизор?
|
| Нед Фев 10, 2008 9:13 pm |
|
 |
|
E1
Ранг: Почетен член
Регистриран на: Нед Юли 22, 2007 8:57 pm Мнения: 607 Местоположение: Белград
|
Приемам го. И го правя на стилизирано изображение на рекламното табло. Малък рекламен трик за шок на посетител, който схваща в един момент, че всъщност той ръководи поведението на рекламното табло, с всяко свое движение. Схемата е следната: Картина от цифрова камера влиза в програма за обработка и оттам се предава през паралелния порт към контролера, който я извежда на светодиодна матрица, съгласно предварително зададена схема за промяна. Абе, много лудо изглежда буквите да се движат с теб и да се изкривяват по движенията ти, нали? При първото пускане, ефектът беше тотален шок за всички. Просто не знаеха какво става и как текстът ги гони и откъде-накъде силует на ръцете им се появява на екрана! Наистина е страхотна идеята, но искам да го усавършенствам, а между идеите ми и познанията как да ги осъществя има доста голяма пукнатина...
А програмата е натоварена и от факта, че за текста и за картината използва два различни протокола и определени буфери се смятат като сума от двете въздействия... За мен това е малък ужас(вече работя по това чудо няколко месеца)!
А чисто по конкретния проблем: просто не мога да схвана КЪДЕ ми е началото на страницата, че да я означа. Вече имам двадесетина копия на програмата, включващи различни безуспешни опити да превключа страниците. Защото ако успея с превключването, ще реша всички проблеми. Като за начало, всички идентични goto групирах и пренасочих към процедури, които се намират явно в същата страница(голямо избиране на място беше!). Самите процедури имат за цел да посочат реално търсения преход. Така ми остана да реша само ТРИ прехода. Толкова процедури имам. Но нищо не става! Сега чета някакви кодове, които свалих от посочения линк, че да видя какво ще стане...
|
| Пон Фев 11, 2008 1:48 am |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
А бре момко, ти май съвсем слепешката я караш? Отваряш MPLAB/View/Program memory и там вляво са ти адресите на които е разположена програмата ти. Page0 -0..7ff , Page1-800..fff и т.н. Никъде ги няма означени тия адреси в асм-файла. Ти трябва да си ги знаеш. А с ORG можеш да задаваш от къде да се разполагат следващите я инструкции. Прочети и по-важното, РАЗБЕРИ как процесора адресира паметта си. 2-3 странички са в даташита.
|
| Пон Фев 11, 2008 3:13 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Ами направата на масив в асемблер си е реализирана в самия процесор - ji4ka ти го е описал точно. В даташиита Indirect Adressing. А гото при 16-ките си е с целия адрес (11 бита). Тези предупреждения са в случай че ползваш computed goto (от сорта на addwf PCL,f) щото принципно така имаш достъп само до LSB на PC counter-a. Goto и Call зареждат пълния адрес. Единствения проблем с computed goto е когато има опасност адреса който ще се изчисли да излезе извън рамките на "страницата" (примерно PCL = h1F0, w=h10, PCL ще стане h100, щото старшите 3 бита остават непроменени и реално ще забие в тръстиката)
|
| Пон Фев 11, 2008 3:45 pm |
|
 |
|
MidNighT_SpiRiT
Ранг: Напреднал
Регистриран на: Нед Сеп 17, 2006 12:00 pm Мнения: 450 Местоположение: Plovdiv
|
Препоръчвам ти тази книга: Myke Predko-Programming and customizing PIC microcontroller. Има я в gigapedia.org, само трябва да се регистрираш. Има описано как да се направи таблица, по-дълга от 256, както и доста друга неща.
|
| Пон Фев 11, 2008 5:37 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Това важи само ако си рамките до 2к. В случая контролера има 8к ,затова Goto и Call зареждта 11-бита + още 2старши бита от PCLATH<4,3>.
|
| Пон Фев 11, 2008 6:49 pm |
|
 |
|
E1
Ранг: Почетен член
Регистриран на: Нед Юли 22, 2007 8:57 pm Мнения: 607 Местоположение: Белград
|
Решението се оказа МНОГО ЛЕСНО!!! В линка, който е приложил ji4ka малко по-нагоре, намерих обяснение на концепциите за превключване и едната от тях е, че вместо goto се използва lgoto. Замених командите, за които имам съобщения, че минават границите и програмата ТРЪГНА!!!
Благодаря на всички отзовали се! Специална благодарност на ji4ka, защото написа много конкретни неща, които тепърва ще ми свършат работа!
|
| Пон Фев 11, 2008 10:54 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|