Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   575 / 1319
(#) icserny válasza robing16 hozzászólására (») Szept 19, 2009 /
 
Keressetek, és találni fogtok!
Bővebben: Link
(#) NickE válasza trudnai hozzászólására (») Szept 19, 2009 /
 
Hát nem tudom, nem győztél meg. Egy negyed órát sasoltam ezt az 1 sort, mire kezdem kapisgálni, hogy ki-kivel van és miért...

Akkor szép egy kód, ha ránézek és értem, hogy mi akar lenni, nem kell gondolkozni. Lehet, hogy a hiba bennem van.
(#) potyo válasza trudnai hozzászólására (») Szept 19, 2009 /
 
Ennek azért hosszabb a futásideje, mint annak, amit NickE és én beírtunk. Vagy tévedek?
(#) trudnai válasza potyo hozzászólására (») Szept 19, 2009 /
 
Idézet:
„Ennek azért hosszabb a futásideje, mint annak, amit NickE és én beírtunk. Vagy tévedek?”


Igen, egy csomo fel es le konverzio van benne... Csak probaltam matematikai uton megkozeliteni
(#) trudnai válasza NickE hozzászólására (») Szept 19, 2009 / 1
 
Idézet:
„Akkor szép egy kód, ha ránézek és értem, hogy mi akar lenni, nem kell gondolkozni. Lehet, hogy a hiba bennem van.”


Nem benned van a hiba, hanem bennunk, emberekben. Amugy a megertest nagyban segitette volna ha kikommentezem ill. leirom az algoritmus lenyeget. Azonkivul lehetne optimalizalni, seged valtozokat bevezetni hogy ne legyen felesleges konverzio benne, es kulon valasztani az elemeket hogy szepen nezzen ki. Pl:
  1. l = f;          // implicit castinggal lekonvertaljuk az egesz reszet
  2. n = l           // az egesz reszhez ...
  3.   + (long)(     // ... hozzaadjuk ...
  4.       f - l     // ... a tort reszt ...
  5.         + 0.5F  // ... + meg egy felet ...
  6.     );          // (ill. annak is csak az egesz reszet)

Aztan az egeszbol csinalhatunk makrot is:
  1. #define round(f)  ( \
  2.     (long)(f)             /* explicit castinggal lekonvertaljuk az egesz reszet */ \
  3.       + (long)(           /* ... majd az egesz reszhez hozzaadjuk ...  */ \
  4.           (f) - (long)(f) /* ... a tort reszt ... */ \
  5.             + 0.5F        /* ... + meg egy felet ... */ \
  6.         )                 /* (ill. annak is csak az egesz reszet) */ \
  7. )
  8.  
  9. // utana...
  10.  
  11. n = round(f);
  12. n = round(3.1415926);
(bar itt megint elveszitjuk a temp valtozo deklaralasi lehetoseget, ugyhogy egy inlne funkcio jobb lenne, ill. a potyo fele megoldast lemakrozni -- lehetosegek vegtelenek)
(#) NickE válasza trudnai hozzászólására (») Szept 19, 2009 /
 
Oké, kösz!
(#) robing16 válasza potyo hozzászólására (») Szept 20, 2009 /
 
Köszönöm Potyo!

Sajnos még nem tudom, hogy is kell a Timer megszakítást használni, ennek hamarosan utánna fogok nézni!
A Timer az valójában a Bitváltás közötti időt határozza meg?
És pontosan miért kell 4X-ével figyelni a lábat?

Valójában azért szeretném így megoldani, hogy ne kelljen a Manchester kódolás miatt 2db 8Bit-es átalakítást, és vissza alakítást csinálnom!!
Egy IR távirányító lenne majd

Mégegyszer köszi!
(#) potyo válasza robing16 hozzászólására (») Szept 20, 2009 /
 
A lényeg, hogy a bejövő jelszintet periódikusan meg kell nézned, hogy azután ki tudd elemezni. Nézzük azt az esetet, hogy a periódusidő azonos a bitidővel. Ezesetben ha épp elkaptuk, hogy közvetlenül a lefutó él után vettük a jelet, majd utána mindig a szintváltás után nézzük, akkor jók vagyunk, mert minden egyes vizsgálatnál egy bitet kaptunk el. Igenám, de mivan, ha a periódusidőnk egy kicsivel kisebb, mint a bitidő. Ezesetben ha épp a startbit lefutó éle után közvetlenül vizsgáltunk, akkor a következő vizsgálat szélsőséges esetben még mindig a startbit idejébe esik, vagyis nem az adatbitet vizsgáltuk ott, ahol már azt hisszük, hogy azt. Tehát ez így nem megfelelő. Nézzük a bitidő felét periódusnak. Ha épp a lefutó él után közvetlenül vizsgáltuk, akkor a következő periódusban még a start bitben vagyunk, valahol annak közepénél. Ha innen kezdve minden második periódusban nézzük a bejövő jelet, akkor jók vagyunk. Igenám, de most jön az a probléma, hogy mivan, ha a legelső vizsgálat épp a startbit közepe előtt volt, a periódusunk pedig egy kicsit hosszabb, mint a fél bitidő, akkor már a következő vizsgálat, amikor még a start bitben kellene lennünk, már beleesik a nulladik adatbitbe. Vagyis ez sem járható út. Ami már járható az az, ha a periódusidő a bitidő harmada. Ekkor ugye az észlelés a startbit első harmadába esik, vagyis a következő vizsgálat még mindig valahol a startbit középső harmadában, vagy annak határától csak kis távolságra található. Innen ha a peridósuidő nemis pontosan a bitidő harmada, akkor is minden harmadik vizsgálat kellően beleesik az adatbitbe, és így nem detektálunk hibásan semmit (persze bizonyos határok között). Tehát a háromszoros sebességű figyelés az már működik. Innen a négyszeres az úgy jön, hogy a négy az egy szép kerek szám Ennek az az előnye, hogy a soros küldés is megy egyidőben a fogadással, mivel minden harmadik vagy negyedik megszakításban kiteszünk egy újabb bitet a kimenetre.

Lehet olyasmivel játszani, hogy kétszeres sebességgel figyeled a lábat, majd a startbit észlelése után negyed bitidő múlva nézed újra, ekkor a startbit második vagy harmadik negyedében vagy, vagy annak a határához közel, és innen bitidőnyi időnként nézed a lábat. Ennek az előnye, hogy ha nincs adatátvitel, akkor feleakkora a kontroller "üresjárati" terhelése, cserébe viszont változó periódusidőd van, ami hátrányos lehet, ha valami ezzel van szikronizálva, illetve így nem lehet a soros küldést ugyanezzel a timerrel megoldani a fogadással egyidőben - nem egyidőben természetesen semmi gond, minden második megszakításban kirakunk egy bitet. Csak ugye ki tudja, mikor jön adat, és mivan, ha épp akkor esik be, miközben küldés van folyamatban. Tehát bizonyos feltételek között a módszer jól használható.

Egyéb módszer még, hogy ne foglald a kontrollert, hogy külső megszakításlábra kötöd a bemenő jelet. Alaphelyzetben engedélyezed a megszakítást. Ha jött megszakítás, vagyis elkezdődött a start bit, akkor tiltod a külső megszakítást, timert elindítod, hogy másfél bitidő múlva okozzon megszakítást, ekkor beolvasod a nulladik bitet, timert átállítod, hogy egy bitidő múlva okozzon megszakítást, és így beolvasod a többi biteket. Stopbit érkezése után tiltod a timert, újra engedélyezed a külső megszakítást, és kezdődik minden előlről. Talán ez a legjobb módszer, ha csak fogadni kell, nem kell adatot küldeni.
(#) szkrep hozzászólása Szept 20, 2009 /
 
Sziasztok!
Van nekem egy ilyenem:
  1. //B0-RS
  2. //B1-E
  3. //C4,C5,6C,C7-LCD
  4. //D0,D1,D2,D3-motor
  5. //A0, A1-gombok  
  6.  
  7. #include <16f877a.h>
  8. #fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP
  9. #device ADC=10
  10. #use delay(CLOCK = 4000000)              
  11. #use fast_io(B)                          
  12. #use fast_io(C)
  13.  
  14. #define mode       0                    
  15. #define input_x    input_C                  
  16. #define output_x   output_C
  17. #define set_tris_x set_tris_C
  18. #define stb        PIN_B1                  
  19. #define rs         PIN_B0
  20. #include <lcd_lib.c>                  
  21. #define FOUR_PHASE TRUE
  22.  
  23.  
  24.  
  25. void main() {
  26.  
  27. int s;
  28.  
  29.  
  30. set_tris_b(0);                        
  31.   output_B(0);                    
  32.   set_tris_c(0);
  33.   output_C(0);
  34.   set_tris_d(0);
  35.   set_tris_a(1);
  36.  
  37. //LCD
  38.   lcd_init();
  39.   lcd_clear();
  40.   delay_ms (50);
  41.   printf(lcd_data,"Motorvezerlo");  
  42.   lcd_cmd (0xC0);
  43.   printf (lcd_data,"Vezetek koteg");
  44.  
  45.  
  46.  
  47.    while(1) {
  48.  
  49.     if (!input(PIN_A0))
  50. {
  51. s=s-1;
  52. lcd_clear();    
  53. printf(lcd_data,"IRANY:");  //Majd ide fogja írni azt is, merre forog, de egyelőre forogjon...
  54. lcd_cmd (0xC0);  
  55. printf (lcd_data, "SEBESSEG:%d", s);
  56. }
  57.  
  58.     if (!input(PIN_A1))
  59. {
  60. s=s+1;
  61. lcd_clear();    
  62. printf(lcd_data,"IRANY:");  
  63. lcd_cmd (0xC0);  
  64. printf (lcd_data, "SEBESSEG:%d", s);
  65. }
  66.  
  67. }
  68.  
  69. //Motorvezérlés
  70.  
  71. while(1) {
  72.  
  73.     if(s<128)
  74. {
  75. bal:;
  76. output_D (0b0011);  
  77. delay_ms(s);
  78. output_D (0b0110);
  79. delay_ms(s);
  80. output_D (0b1100);
  81. delay_ms(s);
  82. output_D (0b1001);
  83. delay_ms(s);
  84. goto bal;
  85. }
  86.  
  87.     else if(s>128)
  88. {      
  89. jobb:;
  90. output_D (0b1100);  
  91. delay_ms(s);
  92. output_D (0b0110);
  93. delay_ms(s);
  94. output_D (0b0011);
  95. delay_ms(s);
  96. output_D (0b1001);
  97. delay_ms(s);
  98. goto jobb;
  99. }
  100. }
  101. }




Az LCD működik szépen, kiír mindent, de a motor nem forog.
Ha kikommentelem az LCD részét, és simán megadom a végén, hogy s=50 (vagy akármi), akkor forog a motor.
Tehát nem olvassa be az előzőleg "kiszámolt" s változót?
Mi lehet a hiba?
(#) vicsys válasza szkrep hozzászólására (») Szept 20, 2009 /
 
Lehet, hogy figyelmetlen vagyok, de s kezdőértéke mennyi? (és mennyi lesz ha abból elveszel egyet?) Illetve látok egy üres #define sort is...
(#) trudnai válasza szkrep hozzászólására (») Szept 20, 2009 /
 
Nem vagy eleg turelmes, hogy a vegtelen ciklus lefusson, mi?

A while(1)-bol valahogy ki kellene jonni ha azt szeretned, hogy a motor vezerlesre ra csorogjon a program szal... Azonkivul ahogy most csinalod a motor vezerles ha elindul soha tobbet nem lehet majd a billentyuvel allitani a fordulatot (bar lehet epp ez volt a szandek, ezt nem tudom).

Meg egy aprosag (vicsys megjegyzesen tul) hogy a goto helyett tegyel be szinten egy ciklust, mert ez se nem basic se nem asm, itt nem illik gotozgatni... (kernel fejlesztesnel megvan annak is a szerepe, de ne menjunk most ebbe bele)
(#) szkrep válasza trudnai hozzászólására (») Szept 20, 2009 /
 
Különösebben célom nincs vele, csak gyakorlás -gondolom látszik, hogy elég ködös nekem ez a programozás dolog
Próbáltam úgy is, hogy egy while-on belül van az lcd és a motor is, de akkor sem forgatta. Elvileg akkor eljutott a motorig a program, nem?
Amúgy eleinte ott volt, hogy s=0; ,de mikor kivettem onnan, akkor is 0-ról kezdte.
A hiányos #include pedig nem tudom, hogy itt miért lett hiányos, a programban benne van; lényegében az az lcd vezérlője.
Csatolom a programot, hogy látszódjon rendesen...

mot_lcd.c
    
(#) trudnai válasza szkrep hozzászólására (») Szept 20, 2009 /
 
Latom meg nem javitottad a vegtelen ciklusos dolgot, sem az inicializalatlan 's' valtozo ugyet. Az inicializalas (mikor kezdo erteket adsz neki) az nagyon fontos. Ellenkezo esetben a kezdo ertek nem garantalt. Lehet debug kornyezetben nulla lesz, elesben nem annyi, az is lehet hogy ha a Hold eppen C alaku es az Nagymedve epp lebukik a horizonton akkor nem nulla lesz hanem 63, de mikor a halak jobbra usznak a Dunan akkor 72.

A billentyu figyelest amugy nem is annyira egyszeru megoldani egy ilyen motor vezerles eseteben. Pl. a mostani programban egyaltalan nincs perges mentesites -- vagy van hardveres perges mentesito?

Az elegans billentyu ill. motor vezerles interrupt vezerelt, de lehet nem kellene meg ennyire elore szaladnod. A lenyeg, hogy a kenyszer varakozasba kellene valahogy beillesztened a billentyu lekerdesetet, ill. az LCD-re torteno kiirast, csakhogy kozben a leptetesek kozotti idonek sem szabadna elcsusznia. Ez nem is annyira egyszeru feladat! Legtobbszor (mint minden mas mernoki teruleten) csak elfogadhato megoldasok vannak annak elonyeivel es hatranyaival.
(#) wolf_y hozzászólása Szept 20, 2009 /
 
Sziasztok. Először is köszönöm a válaszokat amiket kaptam pic beszerzés ügyben. Másodszor felmerült bennem egy új kérdés egy pic 16f84-el kapcsolatban. Szóval a kapcsolásban a picnek egy 10MHz-es kristály adja az órajelet. A kérdésem az lenne hogy kicserélhetem e ezt a picet 20MHz-s vagy 4Mhz változatra vagy a kapcsolás szempontjából nem mindegy? Ugyanis ezt a két típust viszonylag könnyen be tudnám szerezni de ez a 10MHz-s kicsit bonyi. Ha tud valaki akár használt 10Mhz-est megvenném. Előre is köszi a válaszokat.
Üdv
(#) Norberto válasza wolf_y hozzászólására (») Szept 20, 2009 /
 
Mindenképpen ajánlatos a 20 MHz-eset beszerezned. A 4 MHz-esnek nincs a specifikációjában a túlhajtási lehetőség (10 MHz), ezért csak külön öröm, vagy sikerélmény, ha 10 MHz-et teljesíteni tud (persze páran sikerrel próbálták már a világon...). De az már nem tartozik bele a gyári működési tartományba.
(#) wolf_y hozzászólása Szept 20, 2009 /
 
Köszönöm a gyors választ Szóval a pic-eknek ezek a megadott órajelei azt a maximumot jelentik amit bír? Tehát a 20Mhz-est én hajthatom 10 Mhz-en a kapcsolási rajt változtatása nélkül? Amúgy szerintetek ha a pic égetőmre az van írva, hogy 16f84A típust éget akkor ezzel a /P jellel elboldogul majd?
(#) potyo válasza wolf_y hozzászólására (») Szept 20, 2009 /
 
A P betű a tokozást jelenti. Ha viszont az égető 16F84A-t tud, és nincs ott a 16F84 a listában, akkor már nem biztos, hogy tudja égetni...
(#) peti13 hozzászólása Szept 20, 2009 /
 
Sziasztok! Biztosra veszem, hogy már elhangzott jópárszor, de nem volt kedvem visszaolvasni 1151 oldalt pedig lehet csak pár oldallal ezelőtt hangzott el... Szóval a kérdésem a következő. Amikor MPLAB IDE ben csinálok egy programot, PIC18F877-nek akkor úgy kell kezdődnie a programnak, hogy:

  1. list   p=16f877    
  2. #include <p16f877.inc>    
  3.        
  4. __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_ON & _CPD_OFF
  5.  
  6. ORG   0
  7.    
  8. bcf STATUS,RP1
  9. bsf STATUS,RP0
  10.  
  11. movlw b'000000'
  12. movwf TRISA
  13.  
  14. bcf STATUS,RP1
  15. bcf STATUS,RP0
(#) gulasoft válasza peti13 hozzászólására (») Szept 20, 2009 /
 
Hol itt a kérdés?
Ez egy program rész a config sorral. A config leíréat nézd meg, megtudod mit csinál ez a config.
De nem kell így kezdődni, ez csak egy eset a több száz variációs lehetőség közül.
(#) trudnai válasza peti13 hozzászólására (») Szept 20, 2009 /
 
Idézet:
„Szóval a kérdésem a következő. Amikor MPLAB IDE ben csinálok egy programot, PIC18F877-nek akkor úgy kell kezdődnie a programnak, hogy:”


Eloszor is az, hogy MPLAB IDE az nem jelent semmit sem. Abban lehet Assemblerben is dolgozni vagy C-ben, es ezek kozul is lehet tobb fajta forditot talalni. Az Assemblerhez legtobbszor az MPASM-et szoktak hasznalni amit az MPLAB alap installalcioja mar tartalmaz.

Masodszor: Az MPASM-ben a direktivak nem kezdodhetnek a programsor legelso karakter helyen. Minimum egy TAB vagy egy SPACE-nek kell lennie elotte. Cimkeknek es valtozo neveknek azonban csak es kizarolag az elso helyen szabad szerepelniuk. MPASM sajnos egyike azoknak a nyelveknek amelyik erzekeny az indentalasra.

Harmadszor: Nyisd meg a "C:\Program Files\Microchip\MPASM Suite\Template\Code\16F877TEMP.ASM" -et, ill. a 16F877ATEMP.ASM-et ugyanonnan, majd mentsd el magadnak egy masik neven a sajat fejlesztesi konyvtaradba.
(#) watt válasza trudnai hozzászólására (») Szept 20, 2009 /
 
Idézet:
„majd mentsd el magadnak egy masik neven a sajat fejlesztesi konyvtaradba.”

A legfontosabban nem említetted! El is kell olvasni!
(#) trudnai válasza watt hozzászólására (») Szept 20, 2009 /
 
Ooooo, tul sokat feltetelezek emberekrol, mi?
(#) bubu hozzászólása Szept 20, 2009 /
 
Sziasztok!

Lenne egy gondom.
Egy hőmérő szenzorról akarom leolvasni az értékeket SPI-n keresztül, de nem tudom megirni a szoftvert mert a close-ba beleköt, hogy valami bővítmény hiányzik.
A forráskód az MCC18 doksikból való.

Ha valaki tud akkor kérlek titeket segítsetek!
Előre is köszönök mindent!


  1. #include "p18f45k20.h"
  2. #include "spi.h"
  3.  
  4.  
  5. /** D E C L A R A T I O N S *******************************************/
  6. #pragma udata   // declare statically allocated uinitialized variables
  7. #define   SPI_FOSC_64   0b00000010
  8.  
  9. unsigned char SPI_data;
  10. unsigned char SPI_Read[5];
  11. unsigned char SPI_Write[10] = "MICROCHIP";
  12.  
  13. char TC77;
  14.  
  15. unsigned char DATARdySPI(void);
  16.  
  17. void CloseSPI(void);
  18.  
  19. void getsSPI(   unsigned char *rdptr,
  20.                                 unsigned char length);
  21. void OpenSPI(   unsigned char sync_mode,
  22.                                 unsigned char bus_mode,
  23.                                 unsigned char smp_phase);
  24. unsigned char ReadSPI (void);
  25. unsigned char getcSPI (void);
  26.  
  27.  
  28.  
  29. void main (void)
  30. {
  31.         TRISD = 0b00000000;                     // port D kimenet-> LED-ek miatt
  32.         TRISAbits.TRISA0 = 0;           // TRISA0 output
  33.  
  34.         while (1)
  35.         {      
  36.                 OpenSPI(SPI_FOSC_4,MODE_10,SMPMID);
  37.                 SSPCON |= SPI_FOSC_64;
  38.                 getsSPI(SPI_Read,5);
  39.                 TC77= ReadSPI();
  40.                 DataRdySPI();
  41.                 CloseSPI();
  42.  
  43.         }
  44.  
  45. }


Az SPI kiiratást kihagytam, mert nekem az most nem kell blőle, csak az olvasás.
(#) trudnai válasza bubu hozzászólására (») Szept 21, 2009 /
 
Pontosan melyik doksibol valo, es mi a hibauzenet?
(#) bubu válasza trudnai hozzászólására (») Szept 21, 2009 /
 
Szia!

A C:\MCC18\doc\periph-lib könyvtár SPI dokumentuma.
A végén található egy example és azt variáltam , de nem megy nekem sehogysem.
A hiba:
Idézet:
„----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\MCC18\bin\mcc18.exe" -p=18F45K20 /i"C:\MCC18\h" "SPI.c" -fo="SPI.o" -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
D:\...\SPI\SPI.c:62:Error [1032] ')' expected in expansion of macro 'CloseSPI'
Halting build on first failure as requested.
----------------------------------------------------------------------
Release build of project `D:\...\SPI\SPI.mcw.mcp' failed.
Language tool versions: mpasmwin.exe v5.31, mplink.exe v4.31, mcc18.exe v3.31
Sun Sep 20 23:28:09 2009
----------------------------------------------------------------------
BUILD FAILED”
(#) trudnai válasza bubu hozzászólására (») Szept 21, 2009 /
 
Ja, latom mar. Nekem az spi.h -bol ugy tunik, hogy nem kellenek a programodba kulon funkcio deklaraciok. Probaldd meg kiszedni...
(#) watt válasza bubu hozzászólására (») Szept 21, 2009 /
 
Szerintem is az a baj, hogy az spi.h headerben már deklarált CloseSPI rutin mégegyszer deklarálva lesz.
(#) icserny válasza bubu hozzászólására (») Szept 21, 2009 /
 
Na, akkor gomboljuk újra a mellényt! Ez az eredeti mintaprogram:
  1. #include <p18cxxx.h>
  2. #include <spi.h>
  3.  
  4. unsigned char SPI_data;
  5. unsigned char SPI_Read[5];
  6. unsigned char SPI_Write[10] = "MICROCHIP";
  7.  
  8. void main()
  9. {
  10. while(1)
  11.       {
  12.         OpenSPI(SPI_FOSC_4,MODE_01,SMPMID);
  13.         SSPCON |= SPI_FOSC_64;
  14.         WriteSPI(0x55);
  15.         while(0 != (WriteSPI(0x55)));
  16.         SPI_data = ReadSPI();
  17.         getsSPI(SPI_Read,5);
  18.         DataRdySPI();
  19.         putsSPI(SPI_Write);
  20.         CloseSPI();
  21.      }
  22. }


Most akkor azt kellene tisztázni, hogy mit és miért akarsz megváltoztatni benne?

Az alábbi két sort és a függvény(újra)deklarációkat hagyd ki!
  1. #pragma udata   // declare statically allocated uinitialized variables
  2. #define   SPI_FOSC_64   0b00000010


  1. getsSPI(SPI_Read,5);
  2.     TC77= ReadSPI();
  3.     DataRdySPI();
  4.     CloseSPI();


A függvények: getsSPI egy stringet olvas, ReadSPI egy karaktert olvas, DataRdySPI megvizsgálja, hogy van-e olvasható adat. A fenti hívássorozatnak így nem sok értelme látszik lenni... Szerintem előbb kellene a rendelkezésre állást vizsgálni (a visszatérési érték 1 vagy 0), utána olvasni. Vagy rosszul gondolom?
(#) bubu válasza icserny hozzászólására (») Szept 21, 2009 /
 
Sziasztok!

Köszönöm mindenkinak aki segített, főleg icserny-nek, mert mihejst kiszedtem a fölösleges deklarációkat, stb linkelési probléma volt már csak!

De most szépen látom mit mér, vagyis abból 8 bitet.

Mégegyszer köszönöm a gyors válaszokat!

üdvözlettel: bubu
(#) icserny válasza bubu hozzászólására (») Szept 21, 2009 /
 
Most mi maradt a while ciklusban?
Következő: »»   575 / 1319
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