Vizitator Pasha Postat Martie 27, 2011 Partajează Postat Martie 27, 2011 for (;;) { if((PORTBbits.RB0==0)&&(oldPortb&0x01)) PORTD += 1; if((PORTBbits.RB1==0)&&(oldPortb&0x02)) PORTD = PORTD>>1; if((PORTBbits.RB2==0)&&(oldPortb&0x04)) PORTD -= 1; if((PORTBbits.RB3==0)&&(oldPortb&0x08)) PORTD = PORTD<<1; oldPortb=PORTB; DelayMs(10); }Nu mii clar carei faza cu oldPortb&0x01 oldPortb&0x02 oldPortb&0x04 oldPortb&0x08 Link spre comentariu
Eugen_B Postat Martie 27, 2011 Partajează Postat Martie 27, 2011 oldPortb&0x01 oldPortb&0x02 oldPortb&0x04 oldPortb&0x08 reprezinta bitii 1,2,3 respectiv 4 din oldPortb, deci echivalent cu valorile RB0 RB1 RB2 RB3 anterioare.Mai exact , se intreaba pentru fiecare RB0..3 , valoarea curenta este 0 ? si valoarea anterioara a fost 1 ? (front descrescator). Link spre comentariu
Vizitator Pasha Postat Martie 27, 2011 Partajează Postat Martie 27, 2011 "oldPortb&0x01 oldPortb&0x02 oldPortb&0x04 oldPortb&0x08 reprezinta bitii 1,2,3 respectiv 4 din oldPortb" ok reprezinta RB0:RB4 nu mii clar de ce se numeroteaza 0x01 0x02 0x04 0xo8 Link spre comentariu
Liviu M Postat Martie 27, 2011 Partajează Postat Martie 27, 2011 Nu se numeroteaza, se "mascheaza",& e "AND" ("SI") logic.X & 0x01 testeaza daca bitul 0 al lui X e 0 sau 1. 0x01 e notatia hexazecimala; notatia binara e 00000001.Daca-l notezi pe X in binar cu xxxxxxxxx, X & 0x01 = xxxxxxxx & 00000001 = 0000000x. Daca rezultatul final e 0, bitul testat (0, in cazul nostru) e zero, daca rezultatul e diferit de zero bitul e 1.La fel cu 2 - testezi bitul 1 :xxxxxxxx & 00000010 = 000000x0;Cu 4 - bitul 2: xxxxxxxx & 00000100 = 00000x00;Cu 8 - bitul 3: xxxxxxxx & 00001000 = 0000x000;Urmeaza 16, 32, 64, 128 - puterile corespunzatoare ale lui 2.PS Am folosit conventia de notare: bitul 0 LSB, bitul 7 MSB. Link spre comentariu
Vizitator Pasha Postat Martie 27, 2011 Partajează Postat Martie 27, 2011 aha am prins ideia dar notatia hexazecimala nu e de patru combinatii de biti adica xxxx 1111=16=F ca sa fiu sigur?Multumesc pt ajutor am prins ideia Link spre comentariu
Vizitator Pasha Postat Martie 27, 2011 Partajează Postat Martie 27, 2011 si inca o intrebare daca mai am citeva Rb de exemplu 4 5 6 pt RB4 va fi 0x10pt RB5 va fi 0x11pt RB6 va fi? 0x100????daca am inteles corect Link spre comentariu
kit Postat Martie 28, 2011 Partajează Postat Martie 28, 2011 0x00=000000000x01=000000010x02=000000100x03=000000110x04=000001000x05=00000101si tot asa.rb7 este aferent bitului MSB (cel mai semnificativ)rb0 este aferent bitului LSB (cel mai putin semnificativ)rb7-rb6-rb5-rb4-rb3-rb2-rb1-rb0rb4 are pozitia a cincea, adica00010000, adica 0x10rb5 are pozitia a sasea (numerotarea rb-urilor incepe de la zero), adica00100000, adica 0x20asa ca ghici, cat e rb6? sa vedem daca ai inteles corect. Link spre comentariu
Vizitator Pasha Postat Martie 28, 2011 Partajează Postat Martie 28, 2011 RB6 0x00000110RB6 0x00000111Ms Link spre comentariu
Vizitator Pasha Postat Martie 28, 2011 Partajează Postat Martie 28, 2011 am vrut sa spun RB7 111 Link spre comentariu
Liviu M Postat Martie 28, 2011 Partajează Postat Martie 28, 2011 Si cum stii care bit e 0 si care e 1 cand testezi 3 o data? Ideea e sa activezi cate un singur bit, astfel incat sa stii sigur care e "vinovatul".Vezi ca in rapunsul meu anterior ziceam ceva de puterile lui 2 (2^n). Ia incearca sa le reprezinti in binar pe cele pentru n = 0..7. ;) Link spre comentariu
Vizitator Pasha Postat Martie 30, 2011 Partajează Postat Martie 30, 2011 RB0 0000.0001 0x01RB1 0000.0010 0x02RB2 0000.0100 0x04RB3 0000.1000 0x08RB4 0001.0000 0x10RB5 0010.0000 0x20RB6 0100.0000 0x40RB7 1000.0000 0x800x00 ->x reprezinta ??? Link spre comentariu
Liviu M Postat Martie 30, 2011 Partajează Postat Martie 30, 2011 Sorry, daca la exemplul meu de sus te-ai referit, mi-am ales prost notatia, trebuia sa folosesc nnnnnnn in loc de xxxxxxx (n=0 sau 1) pentru numerele scrise in binar, respectiv 0xnn (n=0..F) pentru cele hexazecimale.0x00 = 0 scris hexazecimal.RB0..RB7 ti-ai iesit bine de data asta. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum