Fórum témák
» Több friss téma |
Konkrétan hol akadtál el benne? Ez egy asm cucc. Új project, copy / paste, fordítás, égetés, elvileg mennie kellene. A HEX a lefordított bináris projectből lekreált szöveges script. Kvázi base16 kódolásban a bináris cucc fejlécezve. A fordítónak kell létrehoznia sikeres fordítás után.
Fordításnál hibát ír ki, szerintem rosszul másolom be.
![]()
Nem tudom melyik fordítóhoz készült, de a Microchip fordítója nem szereti az ilyen számformátumot: h'FE'. ezeket írd át ilyenre: 0xFE.
Valamelyik konfigurációs paraméter sem tetszik neki, azt meg kell keresni mi jó definíció helyette, vagy kitörölni és manuálisan beállítani a égetés előtt. Arra figyelj még ha módosítgatod, hogy az alapértelmezett számrendszer a hexa, tízes számrendszerbeli számot így írj be: .95 , vagy állítsd át a project beállításoknál az alapértelmezett számrendszert decimálisra.
Értem, köszönöm szépen, holnap megpróbálom át irkálni, hátha sikerül. Esetleg valami másfajta progit tudsz ajánlani, amivel nem kell szenvedni? Mert nem értek én ehhez, csak beillesztem a HEX-et és kész, nem kezdtem még programozni, csak meg vettem hozzá a dolgokat.
Köszi a választ! Nos, a poll-int.c ugyanazt csinálja. Sőt! Kipróbáltam Ubuntu alatt is (a minicom -o -D /dev/ttyACM0 paranccsal), amivel működik, de az üdvözlet szintén nem jön...
Win7 alatt ez sem (hello-int) ír ki semmit. De mégis van megoldás! Ugyanis felfigyeltem, hogy ha a portnál a sebességet (óvatosságból) 9600-ra, a Flow control-t meg valamire (RTS... vagy XON...) beállítom, win7 alatt is azonnal működik!!! Az alábbit írja ki (Win7): Isten hozott a PICCOLO projekthez! hello-int.c program (USB interrupton kezelve) Vett karakter: = 13 Vett karakter: = 10 a Vett karakter: a = 97 Vett karakter: = 13 Vett karakter: = 10 Az =10 azért van mert CR+LF van a terminálban beállítva. Nos ennyire jutottam. ![]()
Érdekes és misztikus jelenségekről írsz, de nekem egyáltalán nem így viselkedik. Most próbáltam ki egy PIC18F4550-nel Win7 alatt a hello-int programot és nálam kifogástalanul működik. Egyedül a régi CDCTerminal.exe nem működik nálam (eleve fekete ablakkal jön be), de minden mással úgy viselkedik a program, ahogy kell.
Jó például a Microchip Application Libraryes USB CDC mintapélda mellett található Dynamic CDC Demo.exe is, ami automatikusan kapcsolódik a virtuális soros porthoz. Idézet: Ezeknek a beállításoknak elvileg semmi köze az USB kapcsolathoz. Ezért misztikus az, amit tapasztaltál. Ha a PIC egy soros porton küldené tovább az USB-n kapott adatokat, akkor lenne csak jelentősége ezeknek a beállításoknak. Lásd például ebben a cikkemben, ahol egy PIC18F14K50 mikrovezérlőt USB-UART protokol konverterként használok, s ahol a soros port sebessége állítható a PC terminál emulációs programjában... „ha a portnál a sebességet (óvatosságból) 9600-ra, a Flow control-t meg valamire (RTS... vagy XON...) beállítom” A hozzászólás módosítva: Jan 9, 2013
Igen, én is mindent így tudtam, ahogyan Te írtad volt, nálam mégis volt hatása az állítgatásnak. Mondjuk, 64 bites Win7-en próbáltam, de szerintem ennek ebből a szempontból nem lenne szabad befolyásolni az eredményt. No mindegy. Köszönöm a segítséget.
Az újabb terminállal (Dynamic CDC Demo.exe) nekem is szuperül megy! A korábban írottak a régire vonatkoztak.
Köszi!
ASM 30 direktíváit próbálgatom.
Szeretnék konstansokat inicializálni, de valami szintaktikai problémám van a float típusnál. A hibaüzenet szerint: Idézet: „Prefix (0x) is not valid for a floating point constant. ” Nem tudom miként lehetne használni a float típust, mert hiába próbálkozom pl. kivenni a 0x -et vagy más formátumot használni, egyenlőre nem tudok rájönni mi lehet a megoldás. A többi konstansot a fordító elfogadja.
A hozzászólás módosítva: Jan 10, 2013
A Help szerint előjel, egészrész, tizedespont és törtrész (decimálisan) lehet benne. x nem
köszi, már megy is!
Viszont a float tárolása (min) 4 byte ot igényel. Gondolom a linker alakítja át a kapott decimális értéket floattá. Hogy tudom használni a bytokat később a program során? pl. szorzáshoz. Ez így már lefordul, viszont szimulátor szerint W5 be 0 kerül.
A hozzászólás módosítva: Jan 10, 2013
Idézet: A négybájtos adatot ne akard már két bájtba beleszuszakolni! „mov d,W5” ![]()
Nem akartam, de örültem volna ha látok valamit belőle. Te hogyan oldanád meg? A 2 Byte os Wn be a float 4 bytejából melyik fele kerülne bele? Ha egy példát írnál egészen világos lenne.
Ami azt illeti, akár három dolgot is tehetsz.
1. Lecserélheted a 16 bites pic-et egy 32 bitesre, és csúszna olajozottan. 2. Ne asm-ben, hanem C-ben akard megírni az emulált dolgokat, amúgy sincs floating unitja a 24F-eknek. 3. 24f asm-ben nem vagyok éppen profi, de lehetségesen a
a d változó címét fogja W5-be beleküldeni, és utána már mozgathatod 2 külön részben indirekt címzéssel, pld
Az asm szintaktikai hibákért bocsi, abban majd a többiek kisegítenek. A memória mozgatása így megoldható ugyan, de floatingot kezelni ettől még nem fogsz tudni. 24F alatt arra külön libek vannak. A hozzászólás módosítva: Jan 10, 2013
Szia!
Ezt milyen környezetben írtad? Idézet: Ha a változó címét adtad meg, akkor nyilván az első két bájt kerül bele. „A 2 Byte os Wn be a float 4 bytejából melyik fele kerülne bele?”
Egyenlőre maradnék a PIC24 ASM 30 nál. (Ez zenetom nak is szól)
Értem mire gondolsz példaprogramodban, de sajna így nem megy. Mivel nem láttam semmit a file regsizterekben, megváltoztattam az init adatok szekcióját .data -ra.
.bss szekcio mérete: 4 .data szekcio mérete: 20 .text szekcio mérete: 2 (???) azért ez nem éppen reális...... .bss szekció kezdőcíme: 0x0814 .data szekció kezdőcíme: 0x0800 .text szekció kezdőcíme: 0x0200 De így sem látom sehol a letárolt konstansokat, pedig paramétereik olvasható. Icserny: Idézet: „Ha a változó címét adtad meg, akkor nyilván az első két bájt kerül bele.” A d float konstans címe 0x080F, amit W0 reg mutat szépen, de a szimulátorral a 30. sorra érve a reset címkére ugrik. Nem tudom miért... Viszont MPLAB View/file regiszterek közt sem látom adott címen, hogy ott lenne az adat. A hozzászólás módosítva: Jan 11, 2013
Nézd meg a honlapomon a Globális változók inicializálása c. szakaszt!
Legjobb tudomásom szerint a RAM-ban elhelyezett változóban csak akkor lesz értelmes adat, ha a __reset: címkénél egy olyan kódsorozat kezdődik, ami a ROM-ból bemásolja a szükséges adatokat az inicializálandó változóba. A C fordító ezt megszervezi neked, az assembler viszont nem. Tehát neked kell megszervezni...
Ismerem a javasolt oldalt, az ott elírtak érthetőek és működnek is. Én csupán továbbgondoltam más direktívákra az ASM30 fordító használhatóságát.
Azt látom sokféleképpen konfigurálható az adatstruktúra. Elképzelhető, hogy létezik valamely általad említett másoló kódsorozat, majd utána nézek. Még egy kérdésem lenne: a .section önmagában mit jelölhet? A mellékelt pdf szerint létezik 3 előre definiált section: Idézet: „Sections are locatable blocks of code or data that will occupy contiguous locations in the 16-bit device memory. Three sections are pre-defined: .text for executable code, .data for initialized data and .bss for uninitialized data. Other sections may be defined; the linker defines several that are useful for locating data in specific areas of 16-bit memory. Section directives are: • .bss • .data • .pushsection name [, attr1[,...,attrn]] • .popsection • .section name [, “flags”] (deprecated) • .section name [, attr1[,...,attrn]] • .text” Ez esetben miért használhatjuk vegyesen. Nekem a .section direktíva önmagában nem értelmezhető. Pl ezekben:
A szekcióknak az a lényege, hogy a többféle memóriaterület (ROM, RAM, utóbbin belül: közeli RAM, vagy DMA pufferterület, DSP-knél X és X memória) közül meg lehessen mondani, hogy mi hová kerüljön, melyik kalapba. Ennél mélyebben én nem foglalkoztam a kérdéssel.
Sziasztok!
Van egy LCD kijelzőm és egy gombnyomás hatására(INT0/RB0) törölni a képernyőt és új adatokat kiírni rá. Simán rakjam bele a main függvényben futó while ciklusomba, vagy pedig írjak interrupt-ot, ami a gombnyomáskor meghívódik? Olvastam, hogy interrupt-on belül nem illik függvényeket meghívni, pedig szükségem lenne a kijelzőre íráskor(nem is sikerült a függvényt meghívni).
A megszakításban csak egy Flag-et állíts át.
A főprogramban pedig kezeld le a Flag-et. A hozzászólás módosítva: Jan 11, 2013
Köszi szépen, működik. Eleinte nem értettem, amit írtál, de aztán rájöttem.
Sziasztok
van egy 16f877A picem ami működik 4.0V-5.0V között (villogtatja a ledet szépen ) Viszont 4 volt alatt nem villogtatja a ledet... Mért lehet ez? az adatlapjában az van hogy 2.0-5.5V mehet neki.
Az adatlapjában az van, hogy a 16LF877A mehet 2 és 5,5V között. A 16F877A-t csak 4V felett garantálja gyártó. Adatlap 174. oldal.
Köszi, hát akkor hozza a papírformát...
és a 220 as oldalt néztem. ![]()
Csak két rövidke megjegyzés a 30. és 31. sorhoz:
Idézet: „mov [W0],W1 mov [W0++],W1” Nem tudom, te hogy vagy vele, de én ha asm-ben dolgozom, akkor a mov az vagy mov.b vagy mov.w, de sohasem mov. Persze ez részint csak ízlés dolga, de részint meg kevesebbet hibázol, ha nem implicite vezérled az adat hozzáférés szélességét, hanem mindig beleírod a kódba, hogy a fordító rád ripakodhasson, ha valami lehetetlent kívánsz. Lévén 16 bites pic-el dolgozol, az a W0++ gondolom szándékoltan 2 byte-ot növelne. Egész biztos a programod szerint is 2 byte-ot fog az növelni, és nem csak 1-et?
Sziasztok.
Analóg jelet szeretnék feldolgozni 16F628 PIC el. Kemény fába vághattam a fejszét mert napok óta alig jutok előre. Úgy nézem pascal-ban egyszerűbb ez a meló mint assembly-ben. A mikro pascal súgó is részletesen elmagyarázza miként kell csinálni, csak az a gond hogy egy típusú PIC-et mutat be. Nekem meg olyan nincs, de nem is felelne meg a mérete miatt. Ez van a súgóban:
Valaki meg tudja mondani hogy a TRISA, TRISB, ADC_Read, ANSEL stb, ezek miért nem működnek a 16F628 nál a 16F887 nél pedig igen? Esetleg mit kell berakni helyettük? Sokat segítene mert most már kivagyok ![]() Előre is köszi. ![]()
Ha megnézed az adatlapját láthatod hogy : a 628 nem tud adc-t kezelni ! Próbáld meg helyette talán a 16f690 et
|
Bejelentkezés
Hirdetés |