Hirdetés

Keresés

Új hozzászólás Aktív témák

  • dabadab
    titán

    Az a baj, hogy alig másfél hónapja kezdtem el a C-ét és a C18-at vagy is a PIC programozást egyszerre így sajnos nem tudok még rendesen érthetően megfogalmazni a kérdéseimet.

    "SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) );"
    Gyakorlatilag, ha két >> jelet teszünk az azt jelenti, hogy a 2 hatványával léptetjük a változó értékét a megadott irányban? (Ha igen akkor már is tanultam ismét valamit, vagy is tanultam már csak nem értettem meg ezek szerint)

    "int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };"
    Hogy ez is tiszta legyen:
    "PORT_B4" egyenlő a következővel : PORTBbits.RB4
    Gyakorlatilag ez egy (port) regiszter mellyel a chip egy adott porton adott láb állapotát tudjuk lekérdezni, hogy az 1 vagy 0.
    Ha 1 akkor annak állapota magas szintű, értelemszerűen a 0 = alacsony szinttel.
    A portok nekem egy header állományban külön definiálva vannak, pl. így:
    #define PORT_B4 PORTBbits.RB4

    "#define NO_KEY 0"
    Teljesen igazad van.
    Jobb rászokni az olvasható kód írásra...

    Ezt a részt nem igazán értem: "Viszont a getchar() egyaltalan nem egy bit allasat adja vissza, hanem egy karakterkodot, ami logikailag abszolút más dolog."
    Vagy itt elírás történt és valójában getchar() az get_key() akart lenni?
    Ha igen akkor ő nem a bit állással kell vissza jöjjön hanem a beolvasott karakterrel ami 1,2,3...16-ig.

    "A ciklus végtelen pergésben van"
    while(1){

    bill_ertek = get_key();

    Delay10TCYx(10);
    }//while()

    Ez egy végtelen ciklus nem?
    Ebben minden ciklusnál újratöltődik a bill_ertek változó még ha egyelőre nem is jól van megadva.

    "Ha arra gondoltál, hogy a getchar()-t kívülről végtelen ciklusban hívod, az meg nem számít, mert azzal kezdődik, hogy lenullázod a k-t"
    Feltételezem, hogy itt is get_key()-re gondolsz.
    Igen igazad van mert ha vége a ciklusnak akkor az újra meghívásnál nullázódik alapból is a k.
    Próbálkozom erősen, de kellenek a szakik tanácsai és gondos szemei ;)

    Ja, igen, get_key() helyett konzekvensen getchar()-t irtam, felig mar autopiloton volt az agyam :)

    ""PORT_B4" egyenlő a következővel : PORTBbits.RB4"

    Ja, akkor az egy bitfield lesz, azon meg meg sokkal egyszerubb vegigmenni, tomb se kell hozza:

    #define SOROK_SZAMA 4
    #define NO_KEY 0
    #define FIRST_ROW_BIT_POSITION 4

    #define FIRST_COL_BIT_POSITION 4
    #define NO_OF_COLS 4

    int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };

    unsigned char get_key()
    {
    unsigned int i, k=0;
    for( i=0; i < SOROK_SZAMA ; i++ )
    {
    SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) ); //Léptetjük a sorok szintjét
    for ( j = FIRST_COL_BIT_POSITION ; j < FIRST_COL_BIT_POSITION + NO_OF_COLS ; j++ )
    {
    k++;
    if( PORTBbits & (1 << j) )
    {
    while( PORTBbits & (1 << j) ); //Várakozunk a gomb felengedéséig
    return k;
    }
    }
    }
    return NO_KEY;
    }

    "Ha igen akkor ő nem a bit állással kell vissza jöjjön hanem a beolvasott karakterrel ami 1,2,3...16-ig."

    Igen, pont ezert mondtam, hogy ott nem jo az, hogy azt adod vissza, hogy ALACSONY, mert az nem karakter :)

    "Ez egy végtelen ciklus nem?"

    De, ez az, errol irtam, hogy ez nem szamit, mert a k-t ezen belul inicializaljuk.

Új hozzászólás Aktív témák