Fórum témák
» Több friss téma |
Nézd meg figyelmesebben a memóriatérképet! Csak a 0. bankban van memória, a másik bankban csak ugyanazt tükrözi.
Az adatlap a Bank1 A0h-DFh-nél ezt írja: "accesses 20h-5F" ... vagyis ott a 20h-5Fh tartományt éri el.
A programodról: az a sok warning azt jelenti, hogy a cimkén kívül az összes többi sort beljebb kell kezdeni (nyomj egy TAb-ot). Az SFR regiszterekre, és azok bitjeire név szerint lehet hivatkozni az MPASM-ban, mindig nagybetűvel. Így könnyebb megjegyezni. Tehát nem bsf 0x03,5 hanem bsf STATUS,RP0. Ezeket a neveket megtalálod az adott PIC adatlapján kívül, a PIC include fájlában ami a ...\Microchip\MPASM Suite\ könyvtárban van.
icserny, MPi-c :
Köszönöm szépen a gyors segítséget. Így már rendben. Pontosabban tudom, hogy mit értettem félre. Én azt hittem, hogy csak az SFR van tükrözve minkét bankra az általános célú regiszterek nem. Köszönöm még egyszer! A warning-okat már meg sem mertem kérdezni, hogy mitől lehetnek, bár nagyon zavartak. Az include file-ban még nem nézelődtem.(eddig, de majd mindjárt...) Köszönöm az ezekre adott tanácsokat is. A címeket csak azért írtam hexában, hogy jobban rögzüljön bennem, az hogy mi hol található. Így az elején ezt fontosnak tartom.
Lehet, hogy igazad van, bár nem sok hasznát veszed majd, miután pl. a STATUS C, Z az adott, és nem igazán érdekes, hanyadik biten van. Ha igen, ott az adatlap. Azért érdemes még jeleket használni, mert ha segítséget kérsz, senki nem szívesen böngészi az adatlapokat a bitek után, miután mi sem így használjuk, ezért nem tudjuk mindet fejből.
Ha zavar a warning, akkor a project ablakban jobb egérgomb katt az *.asm fájlon --> Build Options --> Categories--> Output Diagnostic level --> Errors only !
Én is így használom általában, nem zavaró a sok figyelmeztetés! Steve
Szia!
Ha csak egyféle / néhány zavar (pl. bankváltásnál, lapváltásnál kiírt), akkor
Hi Mesterek
Van egy kis gondom a prg debug-nál tökéletesen megy lépésről lépésre, de ha pic "futtatja" akkor nem megy. Mi lehet a gond?
org 0 -t tegyel az elejere elso lepesben.
Szia!
Az MpLab ablakában felül középen a Debug módot állítsd át Release módra.
Raktam ORG 0, de semmi.
Most jelenleg úgy megyen hogy RCB4,RCB6-on lévő ledek világítanak ha megnyomom a gombot (ami a RC0-van) akkor RCB2,RCB4-en levő ledek világítanak. Annyi különbség van a debug illetve a pic-es futtatáskor hogy debugba a CALL KESL kiszedem hogy ne keljen végig léptetni. Lehet hogy ez lenne a gubanc?
Ebben a kodban amit mellekeltel nincs gomb nyomas...
Átállítottam, de ugyanaz.
Egyébként mi a különbség a Debug és a Release mód között? Bocsánat valamit benéztem, kimásoltam TXT-be.
Meg par megjegyzes:
1. A fo problema valoszinuleg, hogy a PORTB nincs rendesen felinicializalva. Hogy hogyan kell, nezd meg a pelda programot az adatlapban. (118. oldal avagy 10.2 fejezet) 2. Az alapbeallitasokban a radix az 16, nem 10. Magyarul nem decimalis, hanem hexadecimalis szamokat feltetelez. Decimalis szamokat pl .255 vagy D'255' alakban lehet megadni. 3. Nem tudom most hirtelen a 01234H vagy a 0011B jeloles mukodik-e. Ezt vagy H'01234' vagy 0x01234 alakban ill B'0011' alakban erdemes beirni. 4. 18F-ben nem kell neked a BANKSEL az SFR eleresehez, az automatikusan access modban elerodik (igy jo magyarosan). 5. TEMP valtozo neked tulajdonkepp nem is kell, csak a LATB, hisz az mar onmagaban egy arnyek regiszter, nem kell annak egy masik arnyek regiszter (ehhez az egyszeru alkalmazashoz). 6. BRA utasitas csk egy szot foglal le a program memoriabol mig GOTO 2-t. Ha kisebb ugrasokat hasznalsz erdemesebb ezt hasznalni 7. CALL-lal ugyanaz a helyzet, helyette RCALL-t erdemes hasznalni Tehat 4. - 7. pontok miatt:
8. Skip utasitast egyszerubben is fel lehet hasznalni:
9. Mindig tedd ki a target-et, ne hagyatkozz az alapertelmezettre, pl jelen esetben az 'F'-et:
Köszönöm, hogy átnézted, és a magyarázatot!
A radix-ot itt átálítottam, s így elvileg jó, vagy nem? Na áttanulmányozom a leírtakat. Viszont annak örülök hogy a 18fXXXX sorozatú PIC-ekben akkor automatikus a bankváltás. Idézet: „MOVWF TEMP,W MOVWF LATB,W MOVWF TEMP” Ezekkel nem tudom, hogy mit akartál csinálni, de szerintem nincs értelmük. Vagy MOVF kellene, vagy a W célmegjelölést kell elhagyni az első két utasításnál. Idézet: Erről szó nincs! Csak értelmesebben vannak elhelyezve, és nagyobb az egyidejúleg látott bank mérete. Sok PIC-nél az összes SFR regiszter belefér, meg az adatmemória eleje is látható. A varázsszó: ACCESS BANK „Viszont annak örülök hogy a 18fXXXX sorozatú PIC-ekben akkor automatikus a bankváltás.”
Csak úgy magamnak írom...
Idézet: „4. 18F-ben nem kell neked a BANKSEL az SFR eleresehez, az automatikusan access modban elerodik (igy jo magyarosan).” Ne hirdessük, mert nem igaz az újabb, több perifériával rendelkező kontrollerekre: 18F2580 CAN, 18F2680 ECAN, 18F97J60 Ethernet és tárasikra. Annyi igaz csak, hogy egy lapon nem 32 FSR érhető el, hanem 256. Amennyiben a kontroller 128-nál több FSR-rel rendelkezik, akkor kell a bankváltás. A 0xF00 és 0xF7F közötti FSR -ek a 15. bank kiválasztásával érhetők el. (A BSR regiszter beállítása...) Még két mód áll rendelkezésre: - Indirekt elérés - a teljes cím az FSRx -ből jön, - movff utasítás - mindkét regiszter teljes címe az utasításban van. Jelentős segítség az ACCESS bank, de ezeknél a kontrollereknél nem elég.
Szia!
Debug módban egy programrészletet tesz még a programodhoz, amivel a nyomkövetés során a fejlesztő eszközzel (ICD2, ICD3, PICKit2, PICKit3, stb.) kommunikál. Release módban csak a programod kerül a kontrollerbe.
Kiegeszitve icsernyit:
Valoban sok alkalmazashoz elegendo, ha az ACCESS bankban kotoraszik az ember, de ezen felul 'allandora' beallit egy masik bankot amit bankos eleresben er el, azonban mivel ezt 'allando' jelleggel hasznalja, a bankot nem kell a program vegrehajtasa kozben valtania, megis eleg nagy terulet all rendelkezesre. Abban az adatlapban amit belinkeltem neked a 68. oldalon az 5.5-os abran latszik jo, hogy mi van, tehat a normal bankos eleres nagyon hasonlit a 16F-es PIC-ekehez, mig az access ram-os eleres eseten tulajdonkepp egy olyanbankot latsz, aminek az eleje szabadon felhasznalhato RAM, a vege pedig a specialis regiszterek -- es akkor ugye ezt a speci bankot fuggetlenul a bank valaszto regisztertol ered el, csupan az access mod kivalasztasaval (amit a fordito neked automatan elintez, de kezzel is megadhatod ha akarod)... Namost, ezt nehanyan meg azzal fejelik meg, hogy a fobb processeknek kulon lapjuk van a lokalisok szaara, igy fuggveny belepeskor valtanak bankot ill kilepeskor vissza allitjak az eredeit (vagy a hivo intezi el, ez attol fugg hogy csinajak meg. Nyilvan ekkor akar tobb fuggveny is osztozhat ugyanazon a bankon, a lenyeg, hogy erosen lecsokkentik a futas kozben szukseges bank valtasok szamat. Na es akkor erre meg pakolgatnak olyan okossagokat, hogy a tobbi bankot RAM-kent hasznaljak es onnan MOVFF-el emelik at a sajat bankjaikba avagy INDF cimzessel dolgoznak onnan. Hogy mi a jo megoldas azt nehez megmondani -- de ez mar nagyon elkanyarodik az eredeti kerdestol. Csupan csak fel szerettem volna vazolni, hogy a lehetosegek korlatlanok es sok jopofa dolgot lehet megcsinalni, de ahogy icserny emlitette volt a 18F-ben is vannak bankok.
Hi
Na ez egy kicsit még kínai, de rajta vagyok. Na így megyen a prg szépen, köszönöm a segítséget. Lehet hogy itt is van fölösleges bank váltás, de hiába kerestem a adatmemória térképet nem találtam a 18f2550 adatlapjában, de biztos Én vagyok a bamba.
Az SFR tartományvan BSR-nél keresd! (Bank Select Register)
Az utasításoknál meg MOVLB k.
Őszintén szólva még elég ködös nekem ez az egész. Nem voltam benne biztos, hogy jó az nekem, ha memorizálom a speciális bitek/bájotk elhelyezkedését (de elsőre jó ötletnek tűnt), de elég könnyen meggyőztetek, hogy nem jól gondolom.
Akkor hát ezután nem vacakolok a hexás címekkel, hanem úgy tanulom ahogyan mondtátok. És még egyszer köszönöm, mindenkinek a válaszait(na meg a türelmét a kezdő kérdéseimhez). Különösen MPi-c nek, aki még a hibaüzenetek miértjére is kitért, no és az include fájlok tartalmára is felhívta a figyelmem.
Nem a mazochizmus a vegcel hanem a PIC architekturajanak megismerese
Hali
Ha egy kis olvasnivalora vagysz, akkor latogass el a konyvtaramba. Talalhatsz jo konyveket, es mintapeldakat. Van egy 40 peldas ASM csomag, ami a kezdestol a LCD kezelesig vegig vezet. Erdemes a kitaposott utat kovetni.
Szia!
Idézet: „MOVWF TEMP,W MOVWF LATB,W MOVWF TEMP” Sajnos itt még rosszabb a helyzet, mert ezeknek az utasításoknak a második paramétere az a, azaz étéke ACCESS vagy BANKED lehetne. Az ACCESS értéke 0, a BANKED értéke pedig 1. A fent idézett sorokban a helyére a d paraméter konstansa kerül, ahol a f értéke 1, a w értéke pedig 0, ha elhagyjuk, akkor f azaz 1 értéket kap. A lefordított utasítások úgy fognak működni, mintha ezeket a sorokat írták volna le:
Itt még nem okoz problémát, de az alábbi két sor már nem ugyanazt végzi el:
Sajnos az MpLab Assemblere nem ellenőrzi a paraméterek nevét, csak az értékekiet. Idézet: „Sajnos az MpLab Assemblere nem ellenőrzi a paraméterek nevét, csak az értékekiet.” Nem is ellenorizheti, hiszen ezek csak egyszeru ertek behelyettesitesek, aminek nincs tipusa. Valoszinuleg lint-tel vagy plint-tel meg lehetne oldani a figyelmezteteseket.
Huhh, ez aztán a bőséges olvasni való! Kösz neked is.
Hali. Egy 2x16 karakteres LCD-re szeretnék kiíratni szöveget. Van egy kész programom amiben 4bites módban van vezérelve az LCD. Az első sorban van egy felirat és mellette írja ki a mérés eredményét. Ezt szeretném áttenni a 2 sor közepére és az első sorba pedig a program elején szeretnék kiíratni egy szöveget. Ehhez kérnék segítséget, hogy 4 bites módban hogyan vezéreljem a kijelzős és hogy a mérést hogyan vigyem át a második sorba. ITT található a kapcsolás és minden egyéb a készülékhez.
A segítségeteket előre is köszönöm.
Szia!
A 2. sor a belső memória 0x40 pozíciójától kezdődik. A kurzor pozíciója a 0x80+pozíció paranccsal állítható.
Hi Mesterek!
Lassan kezdem feladni. Szóval próbálgatom a PCL-es RETLW-s parancsot. Elvileg az úgy menne hogy a hogy a programszámlálóhoz=62 hozzá adom az épen aktuális W=2 értékét s akkor ez elugrik (62+2=64) oda s visszatér abban a sorba berakott X értékkel. Ez megyen is de nem értem hogy a watch ablakban nézem akkor a W aktuális értéke 2 a PCL=62 s ezeket összeadatom vele ADDWF akkor ez lesz=66 . Nem értem! A másik problémám hogy elvileg XOR paranccsal lehet két kőlombozó regisztert/byte-ot összehasonlítani. MOVLW 0xFF MOVWF EGYIK MOVLW 0xFF XORWF EGYIK,W BTFSC STATUS,Z (ha 1 akkor ugrik) és ha jól tudom akkor ennek a müveletnek az eredménye 0 kel lennie az a Z beáll egybe. Ezt megnézem s ugratom a prg ahova gondolom. És ezután törlöm a Z-t. Próbáltam ezt AND logikával is, de szintén az se azt csinálja amit Én szeretnék! Más a Z C és a ehez hasonló Status regiszter bitjeit hogy tudom bevarázsolni a watch ablakba? Vagy mit érdemes két byte összehasonlítására használni? Segítséget előre is köszönöm.
Amióta elektronikus számítógépet gyártanak, az utasításszámláló mindig a következő utasításra mutat. Tehát ha a 62. címen levő utasítás hajtódik végre, akkor a 64. címre. Gondolom, ezért lesz belőle 66, de mindez az adatlapban le van írva.
Idézet: Dehogy ugrik! Skip if Clear, azaz akkor ugrik, ha a bit nulla. A Z bit pedig akkor nulla, ha az eredmény nem nulla. „BTFSC STATUS,Z (ha 1 akkor ugrik)” |
Bejelentkezés
Hirdetés |