Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Erre én is gondoltam. Lehet, hogy csak egy bejegyzés a project leíró fájlban.
Attól tartok, hogy ezeket a beállításokat nem a Project állomány (MCP), hanem a Workspace állomány (MCW) tárolja. Az pedig elég reménytelen esetnek látszik.
Igen, ez amugy nagy marhasag -- legalabbis annak tartom. De nem hiszem nagy ugy kettot kattintani a programozas elott, hogy kivalasszam a PICkit2-t, avagy hasznalni a kulso PICkit2 szoftveret programozashoz...
sziasztok azt szeretném kérdezni hogy egy PICAXE-08M tipusu pic-et milyen programmal, égetővel lehet programozni.
Tisztelt trudnai és icserny!
Köszönöm a kiadós a 2 héttel ezelőtti válaszotokat Link a problámámra, és bocs a késöi reagálásért, most jutottam csak ide.
Hajmeresztő, ahogy az RS-232 szintillesztés problémáját kezelik!
Hi Mindenkinek!
Mi a véleményetek arról, hogy szeretnék nyitni egy új topikot, "ASM Rutinok Gyüjteménye PIC-re" címmel. Arra gondoltam, hogy itt közkinccsé tehetnénk azokat az asm forráskód részleteket, amelyek alaposan teszteltek és garanrantáltan jól működnek egy adott probléma kezelésére. Természetesen a cél az lenne, hogy a lehető legrövidebb, általánosan jól használható subrutinok kerüljenek a gyüjteménybe a kipróbált PIC(ek) tipusának megnevezésével.
Az bizony! A JDM is sírva könyörög receptért!
Szerintem ilyen rutinok igazából "nincsenek"(Évek óta programozom, de még eddig nem készítettem ilyeneket még magamnak se, és nem is fogok.). Ez nem PC, ez sokkal specifikusabb. De ha még is erőlködünk néhány általános rutint, akkor meg ugyan logikailag fel lehet belőlük építeni egy programot, csak nem fog hatékonyan működni.
Másrészt meg rengeteg példa van a gyártó oldalán, komplett projectek, azokból többet lehet tanulni, mint szétszórt rutingyűjteményekből. Én így gondolom, de ez csak egy vélemény...
Az MPASM dokumentációjából másoltam ki ezt a mintapéldát (PIC18-ra mutatná be a fill használatát).
Egyetlen szépséghibája van, hogy nem fordul le! Nem írt ki minden hibát, de gyakolatilag a HI_INT-$ és a start-$ típusú kifejezéseket nem szívleli. Sem a címkét, sem a $ jelet. Számkonstanssal működik, csak úgy értelme nincs, mert 4 vagy 6 nop-ot én is oda tudok tenni...
Természetesen igazad van, de úgy gondolom ilyeneket sokan tudnának hasznosítani. Mutatok egy példát, milyen probléma megoldásokra gondoltam. Bár lehet, hogy ezt rövidebben is meg lehet oldani.
Call-lal érkezünk és a változókból dolgozunk tovább. W-ben visszaadja, hogy az adott év februárja hány napos volt. SzökőévKeresés MOVF ÉVTIZED_ÉV,W SKPNZ MOVF ÉVEZRED_SZÁZAD,W ; SKPNZ ; Nincs jelentősége, ; mert 1582 október 15 előtt másképp működött az ; időszámítás, de 9999 után már hasznos lehet )) ; RETLW .29 ;00 évezred_évszázad volt ADDLW -.4 SKPNC GOTO $ -.2 ADDLW .4 SKPZ RETLW .29 ; 28 napos a február, nincs szökőév RETLW .30 ; 29 napos a február, nincs szökőév
Bocsi, de úgy tűnik, hogy a beszúrás még nem megy nekem.
A véleményem az, hogy egy ilyen gyűjteménynek nem megfelelő helye egy fórumtopik. Egy gyűjtemény akkor ér valamit, ha könnyen érthető módon és alaposan dokumentálva van, s az egyes részei nem össze vannak hányva, hanem átgondoltan, összehangoltan, egymásra épülve működnek.
Az ALU-val kapcsolatos eljárások (matematikai rutinok, konverziós rutinok) viszonylag könnyen általánosíthatók, de a hardverközeli dolgoknál Watt-nak adok igazat, reménytelen a hatékony és nem agyonbonyolított általánosítás. Szerintem a megértést segítő mintaprogramoknak több haszna van. OK. Feladom. Azért hátha jól jön valakinek ez a hardverközeli részlet. Bár lehet, hogy már van tömörebb is. CBLOCK 0x20 ;Tetszés szerint LCD_Időzit_L LCD_Időzit_H Karakter ENDC #DEFINE LCD PORTD ; LCD port kimenet VDD EQU 7 ; LCD portláb funkciók E EQU 6 RW EQU 5 RS EQU 4 D7 EQU 3 D6 EQU 2 D5 EQU 1 D4 EQU 0 LCDInit BANKSEL PORTD ;Call-al érkezünk CLRF LCD BANKSEL TRISD CLRF TRISD ; PORTD kimenet lesz a kijelzőhöz ; BANKSEL LCD ; BSF LCD,VDD ; Kijelzőt bekapcsoljuk, ha nem fixre van kötve ; CALL LCD_Időzit_2 ; Várunk, amíg feléled a kijelző MOVLW B'00100000' ; 4 bites üzemmódra váltunk MOVWF Karakter BCF STATUS,C ; LCD-nek parancsot fogunk küldeni CALL LCD_FelsőDigit ; Kiküldjük a felső négy bitet MOVLW B'00101000' ; 2 soros üzemmódra váltunk CALL LCD_Parancs ; Kiküldjük a parancs byte-t MOVLW B'00001100' ; Kijelzőt bekapcsoljuk CALL LCD_Parancs MOVLW B'00000001' ; Kijelzőt töröljük CALL LCD_Parancs MOVLW B'00000010' ; Kijelzőt és a kurzort alaphelyzetbe állítjuk LCD_Parancs ;Parancs küldéskor Call-al ide jövünk MOVWF Karakter ;W-ben a parancs kódjával BCF STATUS, C GOTO LCD_Irás LCD_Karakter_BCD ;A W-ben lévő BCD számot innen írjuk ki ANDLW B'00001111' ;Call-al érkezhetünk ADDLW B'00110000' LCD_Karakter ;Normál karaktert innen irjuk MOVWF Karakter ;Call-al érkezhetünk BSF STATUS, C LCD_KarakterIrás CALL LCD_FelsőDigit SWAPF Karakter,F LCD_FelsőDigit BTFSS STATUS, C BCF LCD,RS ; LCD-nek parancsot fogunk küldeni BTFSC STATUS, C BSF LCD,RS ; LCD-nek adatot fogunk küldeni BCF LCD,RW ; LCD-re irni fogunk BSF LCD,E ; Engedélyezzük a forgalmazást BTFSS Karakter,7 BCF LCD,D7 BTFSC Karakter,7 BSF LCD,D7 BTFSS Karakter,6 BCF LCD,D6 BTFSC Karakter,6 BSF LCD,D6 BTFSS Karakter,5 BCF LCD,D5 BTFSC Karakter,5 BSF LCD,D5 BTFSS Karakter,4 BCF LCD,D4 BTFSC Karakter,4 BSF LCD,D4 NOP NOP BCF LCD,E ; Befejezzük a forgalmazást LCD_Időzit MOVLW B'11000000' ; 20 MHz-ig ezzel az időzitéssel jól működik MOVWF KCD_Időzit_L LCD_Időzit_1 DECFSZ LCD_Időzit_L,F GOTO LCD_Időzit_3 RETURN ;LCD_Időzit_2 ;Ez csak a kijelző bekapcsolásakor kell, ; CLRF LCD_Időzit_L ; ha nincs fixre kötve ; CLRF LCD_Időzit_H LCD_Időzit_3 DECFSZ LCD_Időzit_L,F GOTO LCD_Időzit_3 DECFSZ LCD_Időzit_H,F GOTO LCD_Időzit_3 RETURN
Ez az LCD rutin is egy olyan, amit még sosem tudtam egyik projektből másikba változtatás nélkül átmenteni, pedig még C nyelvű kóddal is próbáltam. Ha meg változtatni kell, akkor meg kell érteni, hogy mit csinál, akkor meg már az ember egyszer megírja magának, azután pedig mindig hozzáigazítja az adott feladathoz. Épp tegnap gyártottunk haverral MSP kontrollerbe LCD kezelést nulláról (adatlap alapján), pedig itt volt nekem a komplett kód több példányban is PIC-re, de az elven kívül hiába néztük, nem tudtuk használni. Azután az se biztos, hogy egy portra lesznek az LCD vezetékei kötve, mert kijöhet úgy is, hogy három porton lesz 2-2 szabad láb, és oda lehet kötni az lcd-t. Azért meg nem teszek be többlábú kontrollert, hogy az LCD egy portra essen. Azután a parancsok utáni várakozás oké, hogy 20MHz-is jól működik, de ez azt jelenti, hogy 4MHz-en már adott esetben a feladat többi része által meg nem engedhetően sokat vár, tehát megint bele kell nyúlni. Szóval én is értékelem azt, hogy szeretnél egy ilyet csinálni, de nem hiszem, hogy ennek sok értelme lenne...
Amúgy ne keverd a #define és EQU dolgokat, használd inkább a #define-t mindenhol.
Csak kiegészítésként(nem feléd szánva), hogy a matekos rutinok megvannak a neten, nincs értelme gyűjtögetni.
Esetleg egy olyan topic megélhetne, az MCC18 mellett, amiben ASM programozási fogásokat tárgyalnánk, de ahogy nézem nem nagy igény van rá, az itteni felmerülő kérdésekből kiindulva. Az meg itt is elfér... (Nem is beszélve az oldaladról(a cikkekről, és a többi hasonló oldalról), ahol sok példát lehet erre is találni...)
Szia!
Nekem működik 8.15a alatt, csak a "relokálható" kódot nem tudtam most kipróbálni! ( lehet, hogy a kód beszúrás nem lesz jó !) [code=c] #include p18f452.inc RST org 0 goto start fill 0,HI_INT-$ HI_INT org 0x0008 goto INTR_H fill (goto start),6 LO_INT org 0x0018 goto INTR_L fill 10a9,start-$ org 0x0020 start fill (nop), 4 goto $ INTR_H retfie INTR_L retfie end /code Elfogadta, és berakta a NOP-okat! Steve Idézet: „Nekem működik 8.15a alatt, csak a "relokálható" kódot nem tudtam most kipróbálni!” Így pont a lényeg maradt ki...
Csak hummogni tudok... Baseline-os projectemben siman mukodik a dolog, sot hasznaltam is mar es regebben sem volt ezzel gondom....
Na, es viszont az nekem absolute modben van, ha atkapcsolok relocative modba akkor annak is problemaja akad. Gyanitom, hogy ilyenkor az assmebler nem tudja feloldani a forditas kozben a $-t es/vagy egyeb labeleket, mert az csak a linkeleskor derul ki hova is kerul valojaban. Eppen ezert a labelek ertelmetlenek a kifejezesekben. Es valoban a help valamit bofog errol, hogy nem szabad kulon szekciokba tenni a dolgokat. Marpedig az a HI_INT nem comke, hanem szekcio nev... Es a tesztem is lefordul, csak eppen ertelme nincs a dolognak:
Mar csak az a kerdes a help-be mi a fenenek raktak azt bele ha nem fordul -- hacsak ez nem mukodott korabbi MPASM eseteben?! Amugy meg a "Knokn Problems"-ek kozt benne van:
Hat ennyit sikerult kideritenem...
Köszönöm, hogy utánanéztél! Tulajdonképpen én is csak azon akadtam ki, hogy egy nyilvánvalóan rossz kódot beraknak a Help-be. De mindegy, nem ez a legnagyobb gondom...
Sziasztok.
Lenne egy nagy problémám. A neten találtam egy számkódos kapcsoló kapcsolást pic-kel. Letöltöttem hozzá mindent.( Az LCD-set csináltam meg.) az asm-eket nem tudom lefordítani, valaki megnézné,hogy mi a hiba benne?
Első blikkre lefordul, tehát nincs benne hiba - legalábbis szintaktikailag. Hogy működik-e, azt nem tudhatom...
Nálam a 8.36 MPLab ugat az ilyenekért:
de helyreigazítás után már csak a lcdlib.asm-ben levő 2 sorra ír ilyet:
Szia!
Nem kell levonogatni és a végén korrigálni. Az utolsó két bit pontosan megmondja, hogy a szám osztható-e 4-gyel:
Szia
Szia!
Ez a maradék 2 üzenet a programozó slendriánságából adódó megjegyzés. Nem írta le, hogy az eredmény a W regiszterben (w) vagy a memóriában (f) keletkezzen az utasítás végrehajtása során. A fordító a f-t használja ilyen esetben. Érdemes ellenőrizni a kérdéses utasításokat. Szia
Mi az a konyvtarnev, hogy "éN" ? Eleve ekezeteseket file nevekben es folder nevekben nem szabad hasznalni (marmint ha jot akar az ember saja maganak!)
32bit< alkalmazásokban nincs nagyobb baj vele, dosban meg ott az ASCII, majd behelyettesíti... A virtuális szervereim meg nem foglalkoznak vele, eleve, hogy win32-es mind, meghogy nem ott van /root/.
Mindig van aki bizonygatja, hogy de jó az ékezetes file név nincs avval semmi baj. Pedig azzal ugye még senki se szívott ha csak angol kis betüket használ. Hiába a régi motorosok tudják hogy jobb nem feszegetni a rendszer tűréshatárait
|
Bejelentkezés
Hirdetés |