AVR- PLC

Ágó István istvan3 at gmail.com
Wed Aug 8 02:29:21 CEST 2007


Szerintem nem bonyolult a kód. asm-ben se lenne egy nagy mutatvány megírni


//Globális változók
unsigned char GOMB_UJ=0, GOMB_REGI=0, szamlalo;

//Megszakítási rutin (2..3ms)
void irq(void)
{
    if (szamlalo)    //ha a szamlalo nem nulla, akkor megnézzük a gombok
állapotát
    {
        if ((PORTA&0x07)^GOMB_UJ) szamlalo--;    //ha nincs változás, akkor
csökkentjük szamlalo értékét
        else GOMB_UJ=(PORTA&0x07), szamlalo=8;    //ha van, akkor eltároljuk
az új állapotot, és visszaállítjuk szamlalot 8-ra
    }
}

//A főprogram:
void main(void)
{
    char j,kod;

    while(1)    //ez a főprogram végtelen ciklusa
    {
        kod=0, j=1;    //j alsó bitjét 1-re állítjuk
        if (!szamlalo)    //ide akkor jön be, ha szamlalo elért 0-ra
        {
            if (GOMB_UJ^GOMB_REGI)    //ide akkor jön be, ha a gombok új és
régi stabil állapota között van eltérés
            {
                while (!kod)    //ismétli, amíg meg nem találja az eltérést
(amíg kod egyenlő 0-val)
                {
                    if ((GOMB_UJ^GOMB_REGI)&j)    //ha változás van azon a
gombon, amelyik bit a j változóban egyes
                    {
                        if (GOMB_UJ&j)    //ha a gomb új állapota egyes
                            kod=j;        //akkor a kod a j értékét megkapja
(tehát kod értéke lehet 1, 2, 4, 8, stb.
                    }
                    j<<=1;                //j-t balra léptetjük 1-el
                }
                GOMB_REGI=GOMB_UJ;        //eltároljuk az új állapotot
            }
        szamlalo=8;    //szamlalot visszaállítjuk 8-ra, hogy a megszakítási
rutin ismét figyelje a gombokat
    }

    switch (kod)
    {
        case 1:         //ha a kód 1 (0. lábon levő gomb lett lenyomva),
akkor ide kerül a kiszolgáló rutin
            balra=!balra;
            break;
        case 2:            //ha a kód 2 (1. lábon levő gomb)
            if (impuls!=50)
                impuls++;
            break;
        case 4:            //ha a kód 4 (2. lábon levő gomb)
            if (impuls!=10)
                impuls--;
            break;
                        //és így tovább, ahány gomb van
    }
}




Szlifka Tibor <eltib at monornet.hu> írta, 2007.08.08.:
>
>
> > Ha érdekel, előkeresem a C kódot...
>
> Ha publikus, köszönettel venném!
> Bár C-ül nagyon gyenge vagyok, de mostanában elég sok C forrást
> nézegettem, hogy talán olvasni fogom tudni.
>
> --
> tib
>
> -----------------------------------------
>           elektro[-flame|-etc]
>


More information about the Elektro mailing list