Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Azért kell bele végtelen ciklus, mert a programod legutolsó sora után is van még ugye szabad és "fölösleges" programmemória-szakasz. A mikrovezérlő ezt mind egytől egyig lefuttatja. Ez ugye nem jelent mást, azt hiszem, nop utasításoknak "nézi" az összes többi sort. Ha a programmemória végére ért, akkor viszont olyan cselt csinál, hogy elkezdi elölről futtatni a programmemóriát a legelejétől. Ez viszont teljesen fölösleges a te esetedben, ráadásul ebből később gondjaid is lehetnek, komolyabb és összetettebb programoknál.
16f628A van kiválasztva 628-al is megpróbáltam akkor is ezt a hibát írja ki. Az égetőprogi biztos hogy jó, mert máskor is ezt használtam. Időközben megtaláltam a problémát. Az utolsó indításnál 12f509-re csináltam projectet és most csak simán csináltam egy új forrásfájlt. A hibaüzenetek közt írj is:
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p12F509 "led.asm" /l"led.lst" /e"led.err" Most nincs hibaüzenet a winpic800-nál. Kösz a segítséget.
Norbertot kiegeszitve meg olyan is elofordulhat, hogy a programod mogotti resz amire rafut a vegtelen ciklus hianya miatt nem NOP-okbol, hanem regebbrol visszamaradt programreszletekbol all, ami megjosolhatatlan modon befolyasolja a chip mukodeset.
Igazából megszeretném megtanulni a PIC programozást és ez elég jó feladatnak tünik :yes:
Üdv mindenkinek!
Még mindig nem sikerült törölni (formázni) a 627 es pic em ami 630 nak "képzeli" magát. Létezik olyan törlés ami teljesen lenulláz mindent?
Helló MIndenkinek.
Kezdő pickesként kisebb programokat próbálgatok és elemezgetek. Egy kis programban az alábbi részt találtam: latchset macro latchnum ; select the latch movlw latchnum movwf PORTA ; set the DF and DB data bits movlw B'1000' ; C = high and G = low to set the latch. default DF and DB low. btfsc buffF, latchnum ; check/set forwards bit iorlw 1 ; DF is high btfsc buffB, latchnum ; check/set backwards bit iorlw 2 ; DB is high movwf PORTC endm ; step through the latch and set the front and back leds. latchset 0; latchset 1; latchset 2; latchset 3; latchset 4; latchset 5; latchset 6; latchset 7; latch_done bsf PORTC, 2 ; set it to memory mode ('11xx') Timer1_End ; reset the timer #ifdef TESTING movlw 0x00 movwf TMR1H movwf TMR1L #else movlw 0x00 movwf TMR1L movlw 0xF6 movwf TMR1H #endif Kérdéseim: A latchset az egy macro? És mit jelent akkor a latchset 0; A másik: az assemblerben van IF utasítás? Köszönettel.
Hello
Az assembly-ben nincs If utasítás. Itt Megnézheted hogy milyen utasítások vannak. Bocs, de a többi kérdésedre nem tudom a választ, mert én is kezdő vagyok.
latchset az igen, egy makró.
Amikor a programban meghívod, pontosabban, amikor a programba belefordul, akkor az utána lévő szám az a makróhoz tartozó bemeneti értéket jelöli. Példaként: latchset 3 - azt jelenti, hogy amikor a makró lefordul, akkor a fordító a végén lévő számot behelyettesíti a következő helyre, méghozzá decimális érték formájában: latchset macro latchnum movlw latchnum movwf PORTA ... ... endm Ez teljes értékűen olyan, mintha azt írtad volna, hogy: movlw 3 movwf PORTA Ugyanúgy a decimális 3 kerül ki az A portra. Az assembly-ben nincs if utasítás. Hozzá hasonló van, feltételes ugrásnak szokták hívni. Az adott PIC adatlapjában biztos van rá példa is
Helló Norberto és PetAd
Köszönöm a gyors válaszotokat. Az elsőt értem is, de az IF utasítást a MPLAB 'szó nélkül' lefordította. Ezért nem értem, hogy mi az ott. Köszönettel
Bocsanat, hogy kozbe szolok, de PetAd nem jol irta le szerintem. Gondolom ugy ertette, hogy az MCU szamara nincs nativ IF utasitas, azonban az assemler ismeri ezt a direktivat.
Az IF forditas kozben ertekelodik ki, gyakorlatilag olyasmi mint egy makro, ha a feltetel teljesul akkor a blokk bele fordul a kodba, ha nem akkor nem fordul bele. A Help / Topic / MPASM Assembler -ben a 'Directives' -t nyisd meg es ott vannak az assembler kulcsszavai.
Ahogy trudnai is jól írta, ez egy parancs-jellegű dolog. Parancs, de nem a PIC-nek szól, hanem kifejezetten a fordítónak (ami ugye a PIC számára emészthetővé teszi (HEX-re fordítja) az ASM fájlt). Méghozzá azt lehet vele megcsinálni, amit trudnai is írt, tehát fordítási időben kiértékelődik a feltétel, és ha "logikai igaz" a végeredmény, akkor az utána következő IF-es blokk belefordul az égetendő kódba. Ha "logikai hamis" az eredmény, akkor az egész IF-es kódrész kimarad a programból, tehát le sem fordul, nem lesz benne a PIC-be égetendő programban (HEX-ben).
Helló Norberto és Trudnai.
Köszönöm a válaszotokat, nagyjából értem is. A program elején írta, hogy a teszteléshez (ez egy ledes áramkör) a TIMERT le lehet lassítani. Ez szerintem az a rész. CSak, hogy tudom én, igazzá, vagy hamissá tenni ezt a feltételt? Köszönettel
Ott latod azt az "#ifdef" -et, ez a C nyelveknel hasznalt preprocesszornal ismertte valt felteteles forditasi direktiva. "def", azaz a nevebol is kitalalhato, hogy valami definialassal kapcsolatos a dolog. "ifdef" - azaz "ha definialt"...
Ha beteszed azt a definiciot ez ele - mondjuk a program elejere erdemes valahova ezt betenni - hogy: #define TESTING akkor az #ifdef TESTING igaz lesz es a mogotte talalhato reszlet kerul be a fordito inputjaba, egyebkent pedig az #else resznel emlegetett kodreszlet kerul leforditasra (egeszen az #endif-ig...) Kellene olvasgatni a direktivakat kicsit ott ahol mondtam (a help-en).
Helló Trudnai.
Köszönöm, most már értem. Ilyennel még nem találkoztam.Tudom, mindig van egy első eset. Köszönettel
Hogy lehetne egy Tcn75-es hőmérőszenzortól kapot bináris számhoz hozzárendelni egy karaktertáblázatban levő decimális szám rajzát, ezt mivel lehetne megoldani? valahogy egy BCD átalakítóval? Amúgy egy 3310-es kijelzőre szeretném a hőmérsékletet ki írni.
Google-ba beírod: pic bin bcd és találsz néhány mintaprogramot a bináris-->BCD konverzióhoz.
Nem a rajzát kell hozzárendelni, hanem azt a kódot(ascII) amit a kijelző kíván a megfelelő karakter megjelenítéséhez. A potyo által ajánlott megoldás a célravezető...
Ha a kijelző nem ismerti a karakterkódokat, akkor még a karaktertáblát is meg kell írd. Valamint a kijelző vezérlését is.
A 3310 kijelző pont mátrixos nincs benne karaktertábla a karaktereket már meg írtam hozzá már "csak" ezeket kellene hozzárendelni a hőmérszenzor értékeihez
Szamomra mindig dobbenetes mennyire nem kepesek emberek megfogalmazni a problemat - pedig enelkul igen nehezkes a valaszokat megtalalni...
Szoval az a kerdes, hogy letezik-e valahol egy kodreszlet ami 3310-re karaktereket tesz ki? Vagy egyaltalan az a problema hogyan lehet meghajtani ezt a kijelzot? Vagy BCD atalakitas nem megy? Tenyleg nem tiszta - szamomra legalabbis - hogy mi az ahol elakadtal?
Akkor már kaptál útba igazítást. Találtál infót az átalakításra a megadott keresési kulccsal?
A karaktertáblát a szabványos ASCII kódokkal írtad meg?
Sziasztok!
Tudnátok segíteni? Nekem egy olyan kapcsolásra lenne szükségem ami 24 óránként bekapcsol egy szivattyút 1-30 percre. (ha lehet PIC12F675-re egy példa programot) Sziasztok! Köszönöm!
Erre olcsón lehet kapni időzítős órákat. Feltéve, ha valóban szükséges és nem csak tanulni(játszani) akarsz...
Rákerestem, 2. találat:
32-bit Binary to BCD to ASCII
Szia watt!
Szükséges is lenne meg tanulni is szeretnék hogy hogy kell leprogramozni.
A kijelző meghajtás már megy, tudok rajta karaktereket megjeleníteni, a problémám az hogy adott egy hőmérő szenzor ami küld egy adott értéket ami alapján nekem megkéne hívnom az adott értékhez tartozó decimális számot tároló táblázatot, túlajdonképen egy Bcd átalakítást akarok megvalósítani, ez-az ami nem tiszta hogy kéne megvalósítani.
Akkor el kell döntened, hogy mennyi idő múlva szükséges! Példa progit nem fogsz kapni, hacsak véletlenül valaki nem írt már ilyet, de ennek minimális a valószínűsége.
A programozás megtanulásához viszont idő kell. Azt akkor sem fogod megtanulni, ha netán ad valaki egy kész programot. Ha tényleg tanulni akarsz, akkor kezd Topi 3 részes cikkével: Íme az első Figyelmeztetés: JDM-et kerüld el, ah jót akarsz! A többi nagyon hasznos, és értékes információ kezdőknek is!
Mi nem tiszta? Már kaptál linkeket a bináris-->bcd átalakításra, helyetted nem fogjuk megírni.
Oké, nézem! nem is várom el hogy megírja más helyetem
Üdv mindenkinek!
Bosszantott a beteg pic em és elvittem egy ismerőshöz akinek van egy gyári égetője de nála is a 829 helyett 630 at ír ki rá. Az olvasásnál nincs gond de írni nála se lehetett. Mivel használtan kaptam így nem tudom menyit lett gyilkolva előttem. Lehet, hogy túl sokszor lett írva és az tett be neki? Kb meddig "él" egy pic?
Speckoban ez is le van irva, de amugy ugy lehet szamolni olyan ezerszer lehet irni a flasht - ez azonban enm garancia! Viszonyt olyat meg nem lattam, hogy masnak ismerte volna fel a chipet... lehet gyarilag volt hibas vagy kapott forditott bekotest, vagy nagy feszt oda ahova nem kellett volna, vagy valami statikus kisules ment rajta at mondjuk mert manapsag ugye mar "nem szokas" foldelt csukloval dolgozni... hat ilyen eredmenyek is szarmazhatnak akar ebbol...
|
Bejelentkezés
Hirdetés |