Prvo moram da ti se izvinim, brzopleto sam otipkao.
Ispitivanje stanja pina mora ići kao:
Code:
if(P1IN & 0x02) k++;
if(P1IN & 0x04) k--;
...
Borise moraš se podhitno pozabaviti osnovama programiranja.
Nađi neku knjigu ili neštio na netu o programiranju na jeziku C.
To su osnove, kako se jedan broj piše u različitim notacijama.
Nas primer broj 33(decimalno) sa dodelivanjem nekoj promenjivoj:
Code:
unsigned char broj
broj=33 ; // Decimalna notacija, broj ima 3 desetice i 1 jedinicu.
broj=0x21 ; // heksadecimalna notacija, ono 0x na početku označava da se radi o heksadecimalnom broju!
// Broj ima dve šesnajstice(zato hexa) i jednu jedinucu -> 33.
broj =0o41 ;// Oktalna notacija, broj ima 4 osmice(zato oktal) i jednu jedinicu.
broj=0b00100001; // Binarna notacija, broj ima jedan bit koji ima težinu 32 i jedan bit sa težinom 1.
//Ova poslednja notacija ne pripada C standardu, ali je neki kompajleri ipak podržavaju(npr AVRGCC).
// Koristi se u Assembleru.
Sad nešto o direkcionom registru.
Direkcioni registar je kod msp430 širok 8 bita.
Ako je njegova vrednost recimo P1DIR=0x00 onda su svi pinovi defini kao ulaz.
Ako je pak P1DIR=0xFF onda su svi pinovi definisani kao izlaz.
Ako se napiše P1DIR|=0x01 onda je to skraceni način pisanja ovoga: P1DIR=P1DIR | 0x01.
To je uobičajni način da se korišćenjem tzv maske i logičke operacije manipuliše
jedan jedini bit. Primeri:
Code:
P1DIR|=0x01; // Postavi bit 0 na 1, stanje ostalih pinova ostaje nepromenjeno jer su oni "maskirani"
//recimo
P1DIR,00101000 // Pre manipulacije
MASK,00000001 // Maska(0x01)
P1DIR,00101001 // Posle manipulacije sa ILI logičkom funkcijom
...
P1OUT&=~0x08; // Postavi bit 3(koji ima težinu 8) na "0" korišćenjem maske i logičke I funkcije.
P1OUT,01101110 // Pre manipulacije
MASKA,11110110 // Maska je operatorom"~" invertovana
P1OUT,01110110 // Posle manipulacije sa I logičkom funkcijom.
...
ispitivanje stanja jednog pina:
if(P1IN & 0x02) // vraća stanje različito od nule(znači true) ako je pin 1 na logičkom "1".
P1IN,00010011
MSK,00000010 // Maska 0x02
VAR,00000010 // Ako je pin1 na jedinici
ili
P1IN,00010001
MSK,00000010 // Maska 0x02
VAR,00000000 // Ako je pin1 na nuli
Malo jasnije?