Sari la conținut
ELFORUM - Forumul electronistilor

Nelamuriri in linii de cod!!!


Vizitator Pasha

Postări Recomandate

Vizitator Pasha

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
  • Răspunsuri 11
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    3

  • kit

    1

  • Eugen_B

    1

Top autori în acest subiect

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

"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

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

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

Si cum stii care bit e 0 si care e 1 cand testezi 3 o data? :nas: 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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări