Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   591 / 1320
(#) watt válasza potyo hozzászólására (») Okt 19, 2009 /
 
Erre én is gondoltam. Lehet, hogy csak egy bejegyzés a project leíró fájlban.
(#) watt válasza Hp41C hozzászólására (») Okt 19, 2009 /
 
Lehet, hogy ezt kevertem!
(#) icserny válasza watt hozzászólására (») Okt 19, 2009 /
 
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.
(#) trudnai válasza Hp41C hozzászólására (») Okt 19, 2009 /
 
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...
(#) norglass hozzászólása Okt 19, 2009 /
 
sziasztok azt szeretném kérdezni hogy egy PICAXE-08M tipusu pic-et milyen programmal, égetővel lehet programozni.
(#) watt válasza norglass hozzászólására (») Okt 19, 2009 /
 
:google:
PICAXE
(#) Galdemorph hozzászólása Okt 19, 2009 /
 
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.

(#) icserny válasza watt hozzászólására (») Okt 19, 2009 /
 
Hajmeresztő, ahogy az RS-232 szintillesztés problémáját kezelik!

PICAXE.png
    
(#) Z80 hozzászólása Okt 19, 2009 /
 
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.
(#) watt válasza icserny hozzászólására (») Okt 19, 2009 /
 
Az bizony! A JDM is sírva könyörög receptért!
(#) watt válasza Z80 hozzászólására (») Okt 19, 2009 /
 
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...
(#) icserny hozzászólása Okt 19, 2009 /
 
Az MPASM dokumentációjából másoltam ki ezt a mintapéldát (PIC18-ra mutatná be a fill használatát).
  1. #include p18f452.inc
  2. RST     CODE  0x0000
  3.         goto  start
  4.         fill  0, HI_INT-$
  5. HI_INT  CODE  0x0008
  6.         goto  INTR_H
  7.         fill  (goto start),6  
  8. LO_INT  CODE  0x0018
  9.   goto  INTR_L
  10.   fill  10a9, start-$
  11.         CODE  0x0020
  12. start  
  13.         fill  (nop),  4
  14.         goto  $
  15. INTR_H      
  16.         retfie
  17. INTR_L  
  18.         retfie
  19.         end


Egyetlen szépséghibája van, hogy nem fordul le!
  1. Error[113]   C:\PIC18\CH08\PROBA.ASM 4 : Symbol not previously defined (HI_INT)
  2. Error[151]   C:\PIC18\CH08\PROBA.ASM 4 : Operand contains unresolvable labels or is too complex
  3. Error[151]   C:\PIC18\CH08\PROBA.ASM 10 : Operand contains unresolvable labels or is too complex

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...
(#) Z80 válasza watt hozzászólására (») Okt 19, 2009 /
 
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
(#) Z80 válasza Z80 hozzászólására (») Okt 19, 2009 /
 
Bocsi, de úgy tűnik, hogy a beszúrás még nem megy nekem.
(#) icserny válasza Z80 hozzászólására (») Okt 19, 2009 /
 
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.
(#) Z80 válasza icserny hozzászólására (») Okt 19, 2009 /
 

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
(#) potyo válasza Z80 hozzászólására (») Okt 20, 2009 /
 
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.
(#) watt válasza icserny hozzászólására (») Okt 20, 2009 /
 
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...)
(#) kissi válasza icserny hozzászólására (») Okt 20, 2009 /
 
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
(#) icserny válasza kissi hozzászólására (») Okt 20, 2009 /
 
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...
(#) trudnai válasza icserny hozzászólására (») Okt 20, 2009 /
 
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:
  1. ENDMAIN     fill (GOTO START), akarmi-$
  2. akarmi
  3.             end

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:

  1. (MPASM-105 / 27914)
  2.     The assembler gives an error when the FILL macro is used with Address - $. For example, the following code:
  3.  
  4.             #include <p16f877a.inc>
  5.  
  6.             cfill code 0x7f
  7.             fill (clrf PCLATH), H'4FF'-$
  8.             end
  9.  
  10.     causes the assembler to give this error:
  11.  
  12.             Operand contains unresolvable labels or is too complex

Hat ennyit sikerult kideritenem...
(#) icserny válasza trudnai hozzászólására (») Okt 20, 2009 /
 
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...
(#) frecsko hozzászólása Okt 20, 2009 /
 
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?
(#) icserny válasza frecsko hozzászólására (») Okt 20, 2009 /
 
Első blikkre lefordul, tehát nincs benne hiba - legalábbis szintaktikailag. Hogy működik-e, azt nem tudhatom...
(#) mammut válasza icserny hozzászólására (») Okt 20, 2009 /
 
Nálam a 8.36 MPLab ugat az ilyenekért:
  1. clrf PORTA
  2.                 clrw
  3.                 tris PORTA ; porta all output
  4.                 clrf PORTB
  5.                 movlw 0xf0 ; pb4-7 inputs
  6.                 tris PORTB

de helyreigazítás után már csak a lcdlib.asm-ben levő 2 sorra ír ilyet:
  1. Message[305] C:\DOCUMENTS AND SETTINGS\éN\ASZTAL\PIC OPEN\LCDLIB.ASM 193 : Using default destination of 1 (file).
  2. Message[305] C:\DOCUMENTS AND SETTINGS\éN\ASZTAL\PIC OPEN\LCDLIB.ASM 200 : Using default destination of 1 (file).
(#) Hp41C válasza Z80 hozzászólására (») Okt 20, 2009 /
 
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:
  1. ADDLW -.4
  2. SKPNC
  3. GOTO $ -.2
  4. ADDLW .4
helyett (2099 fele sokkal gyorsabb lesz):
  1. andlw 0x03


Szia
(#) Hp41C válasza mammut hozzászólására (») Okt 20, 2009 /
 
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
(#) trudnai válasza mammut hozzászólására (») Okt 20, 2009 /
 
Mi az a konyvtarnev, hogy "éN" ? Eleve ekezeteseket file nevekben es folder nevekben nem szabad hasznalni (marmint ha jot akar az ember saja maganak!)
(#) mammut válasza trudnai hozzászólására (») Okt 21, 2009 /
 
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/.
(#) lidi válasza trudnai hozzászólására (») Okt 21, 2009 /
 
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
Következő: »»   591 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem