Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Lássuk az egész kódot(csatold az egész fájlt a Tallózás gombbal!)
Csatoltam az egész projectet. A watch ablakban megfigyelhető hogy REG tartalma nem másolódik át REG1-be viszont PORTB már átmásolódik PORTC-be.
De átmásolódik az, csak mivel mindkettőben nulla van a MOVFF előtt, ezért nem látsz változást. A BSR regisztert nem állítod be, mielőtt a MOVWF REG és MOVWF REG1 utasításokat végrehajtod, ezért azok nem a REG és REG1-nek nevezett területre írnak, mert a célregiszter megjelölésére csak nyolc bitet tartalmaz a MOVWF utasítás, a maradék négy bitet a BSR regiszteből szedi. Tehát te a 0x000 és 0x001 című regiszterekbe írod a 100 és 50 konstansokat, míg a 0x100 és 0x101 című regiszterek között csinálod MOVFF utasítást.
Lehet olyat csinálni, hogy mindig a megfelelő tartalom kerüljön a BSR-be, hogy:
Vagy úgy tűnik, hogy működik a BANKSEL makró is:
Tehát ezek valamelyikét el kell helyezned, mielőtt a REG vagy REG1-hez hozzá akarsz férni olyan utasítással, ami nem tudja a teljes memóriaterületet címezni. Persze nem kell mindkettő elé, ha azonos Bank-ban vannak, akkor csak az első előtt kell.
Szia!
A 18F vezérlők is bankosan használják a memóriát, de a bank mérete 256 byte. Nem a movff utasítással van a gondod, hanem a movwf-vel. Ez az utasítás csak egy lapot ér el bankos kezelés esetén, azt amelyiket a BSR kijelöli. De a fordító annyira ügyes, hogy a speciális célú regiszterek kezelésekor az úgynevezett access bankot használja.
Mivel a BSR regiszter tartalma 0, ezért a REG és REG1 feltöltése nem a 1. lapon (ahol definiáltad őket), hanem a 0 lapon történik. A movff REG,REG1 viszont teljes címeket használ, így valóban a REG -et másolja a REG1-be, de a REG értéke 0. A 18F szériában az utasítások többségének egy harmadik peremétere is van, Banked vagy A. Az "A" jelenti az access bank szerinti elérést. Ezt a paramétert is ki kellene írni az utasításoknál. Szia
Ahogy a többiek írták, azzal van a baj, hogy a két változódat olyan területre tetted, ami másik bankban van(BANK1). Válassz inkább olyan területet, ami a 0..255-ig terjedő RAM-ra esik(BANK0).
Csatoltam a módosítást, ami már működik.(egyébként BANKSEL-el a te programod is működik, csak felesleges olyan területet választani, amit állandóan bankolni kell. Van még egy trükk, amivel 256+128 RAM terület bankváltás nélkül használható. Ki kell választani a program elején a BANK1-et, amit ezután teljes méretében használhatsz(256bájt), és még ehhez eléred az acces területet is bankváltás nélkül, ami + 128bájt. Ez legtöbbször elegendő is szokott lenni. Végül is a te programodat csak ezzel az egy sorral kell megtűzni, és kész is, csak akkor minden változódat erre a területre deklarálj.
Csatoltam a BANK1-es verziót is.
Idézet: „Van még egy trükk, amivel 256+128 RAM terület bankváltás nélkül használható. Ki kell választani a program elején a BANK1-et, amit ezután teljes méretében használhatsz(256bájt), és még ehhez eléred az accesa területet is bankváltás nélkül, ami + 128bájt.” A konkrét típusnál ez így igaz, de érdemes azt is tudatosítani, hogy az Access Bank mérete típusfüggő. Például az általam nyaggatott PIC18 mikrovezérlőknél csak 0-tól 0x5F-ig terjed az Acces Bank, cserébe az SFR területből látszik nagyobb terület.
Így már tényleg jó köszi szépen a segítséget mindenkinek! Most tértem csak át a pic18-ra és magamtól sosem jöttem volna rá hogy mi a gond.
Egyébként a watch ablakban hogyan tudtad beüzemelni az ADD SYMBOL menüt?
Új projectet készítettem az asm-al. Nem tudom miért volt szürke, pedig már találkoztam ilyennel, bár velem még nem fordult elő.
Igen, ez igaz, bár nekem még nem volt ilyen típusom, ezért nem jutott eszembe ez a lehetőség. Köszi a kiegészítést!
Van vagy 20 projectem és mindegyiknél szürke sajos. Melyik verziót használod? Én az MPLAB IDE Version 8.30.00.00 -át.
v8.36-van fenn most.
Érdekes, hogy amit én készítek, az nem szürke nálad sem! ??
Generálj abszolút kódot!
Állítsd át a projekt tulajdonságokban: Project>Build Options...>Project, majd a feljövő párbeszédablakban MPASM/C16/C17/C18 Suite fülön, középen, a Single File Assembly Project mezőben Generate absolute code. Ezután, ha újrafordítod, működni fog az Add Symbol.
El kellene mar gyerekek felejteni ezt az abszolut modu programozast, csak a gond van vele. Nem egy nagy ordongosseg linker scriptet hasznalni...
Ez bejött! Amúgy mi a különbség az absolute és a relocatable code között?
Abszolut modban "kezzel" osztod ki az eroforrasokat (ram es program memoria) mig relokativban a linker osztja ki neked. Relokativban pl mar linkeles ideje alatt rajohetsz, hogy ninc eleg ram-od, vagy utkozes van stb. Azonkivul relokativnal kulon modulokra bonthatod a programodat, overlay ram teruleteket jelolhetsz ki -- es a reszletekre a linker figyel nem Te...
:nemtudom: Én csak a Watch ablak szürke Add Symbol gombjára adtam egy megoldást...
Egyébként igazad van, ha a kód a relokálható mód szabályai szerint készült volna, akkor is működne az Add Symbol
Ezt most találtam, szorzáshoz, osztáshoz kódgenerátor. Nagy előnye, hogy nem csak a kész kódot készíti el, hanem az algoritmust is leírja hozzá: Link
Én jobbanszeretem magam csinálni addig, amíg nem lesz átláthatatlan. Egyikkel sincs semmi gond, ha jól használod.
Persze, hogy nincs gond, csak kerdes miert akarna az ember kezzel megoldani azt amit a linker neki automatikusan megcsinal?
Amugy overlay teruleteket hogyan szoktad kezzel megoldani? Minden rutinhoz ilyenkor kulon CBLOCK-ot csinalsz?
Sziasztok! Egy olyan PIC tápegységre lenne szükségem ami ipari környezetben is megálja a helyét, nem hal be a zajoktól. Sajnos a 78XX szériával már volt ilyen jellegű problémám. A válaszokat előre is köszönöm.
Autóban 78xx-et használok, nem volt még gond vele. Jó az, csak nem kell lespórolni a kondenzátorokat az áramkörről.
[OFF]Ne is mondd, epp most pakoltam be egy 7805-ost egy szivargyujto csatiba, es amit meg nem tudok, hogy hosszu tavon vajon mennyire fog melegedni (elmeletileg a GPS olyan 350mA kornyeken vesz fel, nade a TO220 tok is epp hogy bepreselodott a csatiba, hutes mar sehogy sem fert volna el, ugyhogy nem tudom mi lesz majd a vegeredmeny, de lehet majd kiolvasztja maganak a szellozo nyilast ).
9V*350mA az 3,15W, az túl fog melegedni hűtés nélkül. Nemhogy vettél volna egy ilyet:Link. Engem picit emlékeztet valamire, de lehet, hogy csak az én fantáziám piszkos
Azzal sosem szoktam spórolni(kondenzátorral). Ipari környezetbe menne, kb egy 10kW-s fűtőszál transzformátorát egy tirisztor segítségével szabályozná. Bemenő fesz 400V szóval valószínüleg, lesz zavar bőven, persze vonal szűrő fog csatlakozik a betápra, de nekem a lényeg hogy a +5V mindig rendelkezésre álljon. Nekem a 7815-el van az a problémám, hogy ha terheléssel indítom van amikor nem szeret elindulni, de ezt már egy másik topikban letárgyaltuk. Szóval akkor szerintetek melyik a stabilabb, egy DC/DC konverter vagy egy sima 7805. Válaszokat előre is köszönöm
Szerintem a 7805 stabilabb. Esetleg tegyél elé RC szűrőt, ha gondolod, hogy a betáp zavarhatja össze. Illetve valami nevesebb gyártót nézz, National Semicondudtor, ONSemi, SGS-Thomson, Motorola, Fairchild, ilyenek. A Taiwan Semiconductor (TS) pl. elég gyenge márka, azt inkább kerüld.
Üdv!
Érdekel-e esetleg közületek valakit egy PIC 16F887 és egy szabványos AT / PS2 billentyűzet összekapcsolása ? Írhatnánk belőle közösen egy cikket. Nálam már üzemel a Hi-Tech PIC C ben készült kód, kicsit le lehet még tisztázni. Amit tud egyelőre: megszakítás segítségével veszi a billentyűzet lenyomásokat, és a soros porton küldi vissza asciiban dekódolva. Továbbá lehet kapcsolgatni a ledeket, és egyéb beállító parancsokat küldeni a billentyűzet felé.
Szerintem ez sokmindenkit érdelne.
Engem is. |
Bejelentkezés
Hirdetés |