Fórum témák
» Több friss téma |
Köszi a linket. Kipróbáltam mindent de sehogy sem akar jó lenni.
Megszakítási rutinban akarsz viszonylag nagy méretű rutint hívni és ez több memóriaterületet kívánna a rendelkezésre állónál (Stack ?). Már ha jól értelmezem a hibaüzenetet és a leírásod.
7 szintű a stack. Memória sincs már valami sok (26B). Akkor lehet hogy ez lesz a hiba. Köszi.
Rendezd át a programot úgy, hogy egy véletlen szám mindig rendelkezésre álljon. A megszakításban jelzed a főprogramnak egy segédváltozóval, hogy elhasználta a számot, igyekezzen újat generálni a legközelebbi megszakításhoz.
A .hex fájl nem tartalmaz címkéket, azt a .map fájlból lehet(ne) kinyerni.
Az egyedüli megoldás, ha a generált címkéket szövegszerkesztővel lehet beleszerkesztgetni, ha már kitaláltad a funkcióját. Harmincvalahány éve i8080-ra (CP/M) írtam egy ilyet, de PICre már nem fogok. A hozzászólás módosítva: Okt 19, 2020
Ez jó ötlet, köszi. Most úgy csináltam hogy a while-ba beleraktam a rand-ot ami folyamatosan generál egy véletlen számot, amit egy változóba rakok és amikor szükség van rá mindig rendelkezésre áll. Most így jó, csak annyi a baj ezzel hogy non-stop pörgeti a rand-ot a while, majdnem fölöslegesen mert csak 1s-onként kell egy újabb szám. 1s alatt gondolom egy jó pár ezerszer felülírja a változó értékét, de mivel nincs más a while-ban gondolom ez nem probléma.
Megoldottam, köszi. Most már csak akkor generál új számot ha lefutott a megszakítás A hozzászólás módosítva: Okt 19, 2020
Hello! Én anno 8048-ra írtam ilyesmit. De keserves kenyér a visszafordítás értelmezése, főleg magas szintű nyelvnél és táblázatok esetén..
A hozzászólás módosítva: Okt 19, 2020
Nem mondtam, hogy egyszerű, de nem lehetetlen.
Eléggé, de mindenképpen kelleni fog egy programozó PICKIT vagy valami amiven megpróbálod kiolvasni az eredeti tartalmat.
Az Mplab is tud ilyet, nem kell külön program hozzá.
Sziasztok!
Olvastam már több helyen is ezt: 0x0000 ;0x0000015 mit jelent ez a számítás technikában?
Ezek hexadecimális számrendszerben leírt számok.
0x0 = 0 0x15 = 21 Az mindegy, hogy a szám előtt hány nulla van, az értéke nem változik. Arra jó hogy jelezze, az illető szám hány biten van tárolva. 0x0000 -> 16 bites szám 0x0000015 -> 28 bites szám Utóbbinál valószínűleg lemaradt egy nulla, mert ez a hossz nem használatos számítástechnikában sem. Az adattárolás alapja a bájt, ami nyolc bit. 0xF1 = 241 (255) 0x4A02 = 18 946 (65 535) 0xAAF44400 = 2 868 134 912 (4 294 967 295) A lefoglalt bájtok száma adja meg, hogy maximum mekkora szám fér el benne, ezek az értékek vannak zárójelben.
Köszönöm!
A választ értem! A 0x egy jelölés arra hogy hány bitten ábrázolják az adott értéket,de ha utánna irják, hogy valamib,valmid,valamih az...?
Nem. A 0x a hexadecimális jelölése. A 0b a binárisé (pl. 0b01101001). Szokás még 45A3h hazsnálata is.
Szia,
Ahogyan már a többiek is írták a 0x-el kezdődő számok hexadecimális számok, ami 16-os számredszerben van. Ez annyit jelent, hogy a számok 0-tól 15-ig változnak (ami összesen 16) nem úgy, mint a hagyományos decimális (10-es) számrendszerben ahol 0-tól 9-ig számolunk. Ahhoz, hogy 16-ig lehessen számolni egy digit-en betüket is kell használni A-tól F-ig ahol A = 10, B = 11, ... F = 15. Így a 0x8 az még 8-at jelent viszont a 0xE az 14-et. Mint ahogy a 10-es számrendszerben is lehet több számjegyű számot alakítani azzal hogy 10 többszörösével szorzunk majd összeadunk (pl 123 = 1*10*10 + 2*10 + 3) úgy a 16-os számrendszerben is lehet, csak ott a 16 többszörösével kell ami kicsit bonyolít a dolgon. Így tehát a 0x10 az valójában 1*16 + 0, a 0x23 meg 2*16 + 3 lenne, a 0x123 meg 1*16*16 + 2*16 + 3. Ahogyan azt már említették, ezeket a számokat többnyire számítástechnikában használják ahol bitekben és bájtokban (1 bájt az 8 bit) adják meg, így 1, 2, 4, 8, vagy 16 számjegyből állnak a leggyakrabban, pl: 0x1 0x55 0x12D0 0x005500AA Mivel az F a legnagyobb érték ebben a számrendszereben ezért éppen az határozza meg, hogy mekkora lehet pl 8 vagy 16 biten az adott szám maximális értéke: 8 biten 0xFF ami 255-nek felel meg 16 biten meg 0xFFFF ami meg 65535 és így tovább, 32 meg 64 biten. Hogy miért is pont 16-os ez a számrendszer ez azért van mert így lehet a maximálisan kihasználni a számok bináris megjelenítését. Ha megnézed a táblázatot ezen a linken Bővebben: Link, akkor láthatod, hogy a 9 az csak 0b1001 és ahhoz hogy elérjünk a 0x1111-hez, hogy teljes legyen a kép még be kell iktatni 6 másik számjegyet (betüt) A-tól F-ig. Lehet kicsit részletesen írtam, de remélem segítettem
Ödvözöök mindenkit! Kis segitségre lenne szükségem van 4 asm fájl amit szeretnék ha hex formátumra valaki átkonvertálná, sajnos nem értek hozzá de fontos lenne. Aki meg tudja csinálni kérem irjon már.
Köszönöm
Hali!
Ahhoz tudni kellene milyen processzorhoz, milyen fejlesztőrendszer alatt készült az asm.
Üdvözöllek ez a két fájl lenne az ha jó látom és olvasom AVR type ezt szeretném feltölteni az Attiny24-be
Sziasztok!
Kezdő vagyok, és segítséget szeretnék kérni. Szükségem lenne egy egyszerű alapprogramra, ami villogtat két ledet. Az egyiket lassabban, a másikat gyorsabban. A pause utasítással dolgozó progi nem jó. PIC18F46K22 a procim. Pic Basic Pro-t használok. Természetesen a progit tovább szeretném bővíteni, de a kiinduláshoz szükségem lenne egy kis segítségre. Köszönöm, ha valaki segít! A hozzászólás módosítva: Nov 11, 2020
Nem ismerem azt a nyelvet, de szerintem a pause felhasználói beavatkozásra várást jelent. Valószínűleg delay függvényt kellene használnod.
A pause utasítás mögé beírt számmal lehet beállítani, hogy mennyi időre álljon meg a program.
pl. pause 1000, akkor 1 másodpercre áll meg. így lehet villogtatni, csak így a progi többi része is megáll, és az nem jó.
A timer megszakításoknak nézz utána, hogy kell itt megcsinálni, abban növelsz(vagy csökkentesz) két számlálót, amikor elérték a határértéküket akkor gyújtod/oltod az egyik ill. másik ledet.
Mindenképp állíts be egy timert megszakításra ahogy pipi is írta. Igazából amíg egyéb feladat nincs, a főprogram csak ennyiből áll, hogy egy goto utasítás ugyan azon a soron forgatja.
A megszakításban számol két számláló a feltöltött értékről visszafelé. Amint valamelyik lejár, újra feltöltöd a számlálóját. A hozzá tartozó kimenetet pedig billegteted. Assemblyben ez egy BTG utasítással működik. Biztos van basic-ben is megfelelője.
Sziasztok.
Választ keresem az alábbi problémára: adott egy 18F2550 MCU és pickit3 programozó. A hiba a következő: az áramkör csak a programozóról táplálva működik, külső tápról nem. A programozóról leforrasztottam a clock és a data, valamint a reset vezetéket is, csak a táp maradt, ebben az esetben is a programozóról működött az áramkör.
Reset láb lebeg, vagy van rajta felhúzó, és kondi, vagy belső resetre van állítva?
Szia!
A RESET (MCLR) lábon mi van, ha leforrasztottad róla a vezetéket ( felhúzó ellenállás?!)?
Debug módban fordítottad? A külső táp működik, eljut táp/föld a kontrollerre a külső tápról?
A Debug mód nem menne, ha a programozónak már csak a táplábai vannak csatlakoztatva! Kontakt vagy RESET probléma lesz!
Az MCLRE=on. A resetláb tápra húzva 10k-s ellenállással, föld felé 100nf. A 100nf-el párhuzamosan reset-gomb. Elkövettem azt, hogy a programozó DAT és CLK, valamint a RESET lábát leforrasztottam az MCU lábáról, azaz csak a tápot adta a programozó: a program futott.
Következő (eretnek) kísérlet: a programozó tápját az áramkör betáp pontjára kötöttem: a program fut. Ha külső tápt adok, nem fut. Már a teszt miatt annyira lecsupaszítottam az áramkört, hogy csak a PORTA kimeneteken van 8db led, amit villogtatok... Tehát az egész áramkör minimális alkatelemekből áll. A reset jól működik, mert (ha) fut a program, akkor a gomb megnyomására leáll a program működése. |
Bejelentkezés
Hirdetés |