button_durum ne tutuyor? for(;;) içini anlamadım ?

Başlatan ali_san, 23 Mart 2014, 17:18:34

ali_san

arkadaslar burdaki button_durum ne tutuyor? for(;;) içini anlamadım yardım eder misiniz?

kmst

#define _XTAL_FREQ 4000000
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

#define DEBOUNCE_TIME 100

#define BUTON_YUKARI_PORT RA1
#define BUTON_ASAGI_PORT RA0

#define BUTON_YUKARI 0x01
#define BUTON_ASAGI 0x02

unsigned char buton_port;
unsigned char buton_test;
unsigned char buton_durum;
unsigned char debounce;

unsigned char sayac;

unsigned char segment[10] =
{
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};

// her 1 milisaniyede calisir
void interrupt kesme()
{
    if(T0IF==1)
    {
        T0IF=0;

        buton_port=0;
        if(BUTON_YUKARI_PORT == 0) buton_port |= BUTON_YUKARI;

        //buton_port=0000-0001

        if(BUTON_ASAGI_PORT == 0) buton_port |= BUTON_ASAGI;

       //buton_port=0000-0011

        if(buton_test != buton_port)
        {
            buton_test = buton_port;
            debounce = 0;
        }

        if(debounce < DEBOUNCE_TIME) debounce++;
        if(debounce == DEBOUNCE_TIME)
        {
            buton_durum = buton_test;
            debounce++;
        }
    }
}

int main(int argc, char** argv) {

    TRISA = 0b00000011;
    TRISB = 0b00000000;

    OPTION_REG = 0b00000001;
    INTCON = 0b10100000;

    sayac = 0;

    for(;;) // Sonsuz Dongu
    {
        if((buton_durum & BUTON_YUKARI) == BUTON_YUKARI)
        {
            //buton_port=0000-0011
                        // 0000-0001

            if(sayac<9) sayac++;
            buton_durum = 0;
        }

        if((buton_durum & BUTON_ASAGI) == BUTON_ASAGI)
        {
            if(sayac>0) sayac--;
            buton_durum = 0;
        }

        PORTB = segment[sayac];

    }
    return (EXIT_SUCCESS);
}

Burak B

button_durum sürekli olarak timer kesmesi içerisinde yapılan keypad IO taraması değerini tutar. for(;; ) içerisinde keypadden neye basıldığını öğrenmek için button_statusu okumak ve karşılaştırmak yeterlidir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle