Sari la conținut
ELFORUM - Forumul electronistilor

probleme comanda motor cu PIC


Myhayxx

Postări Recomandate

  • Răspunsuri 23
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • UDAR

    7

  • Myhayxx

    7

  • Liviu M

    3

  • Mircea

    3

Top autori în acest subiect

N-am stat sa numar toate acoladele, da' in principiu are cate un break in fiecare while, asa ca ar trebui sa si iasa din cand in cand din ele.PS @Myhayxx: incearca sa incadrezi codul intre tag-urile [ code] & [/code ] (fara pauze intre paranteze si cuvantul code).

Link spre comentariu

Nu cred ca iese din while.Structura mi se pare de genul

while(1){    while(1){        break;    }}
cu break o sa iasa doar din al doilea while.Asa ca o sa ruleze la infint primul while.
ciudat!programul executa primul while apoi al doilea while si-l ruleaza la infinit pe al doileaoricum va multumesc tuturor (in special lui "UDAR" sper sa ma ierte ca l-am judecat gresit :jytuiyu ) pentru ajutorul acordat.o sa mai modific si-l incerc pana o sa mearga cum vreau eu. am mai citit pe ici pe colo....ma mai chinui singur si unde ma impotmolesc o sa va cer ajutorul dar deocamdata vreau sa inteleg programul pana aici pas cu pas...
Link spre comentariu

0 - False

orice alta valoare fie de tip int , char , etc este considerat logical TRUE , concluzie while(2) este perfect corect.

 

Mai pune si tu un space/tab(automat 5 space uri) , si aranjeaza codul ala un pic sa fie usor de corectat / urmarit.

 

Dupa ce am facut putine ordine am gasit "buba" , primul "while(2)" nu are nici un break , mai a 2 while uri inauntru cu 2 break - uri. asa ca primul while(2) este rulat la infinit.

 

Si asa ceva nu exista ca un while este executat cand intalneste un break, daca da atunci inseamna ori ca break ul ala are ca pereche un alt while , ori un "if" pe parcurs unde se afla break nu este executat.

 

void main() { // programul principalADCON1 = 0x07; // dezactivez intrarile analogiceTRISA = 0;TRISB = 0X07; // 0 ,1 si 2 intrariTRISC = 0;TRISD = 0;TRISE = 0;PORTA = 0; // starea initiala zeroPORTB = 0;PORTC = 0;PORTD = 0;PORTE = 0;INTCON = 0; // dezactivez intreruperilewhile (1) { // bucla principala a programuluiwhile (1) { 	if (PORTB.B0)stare = 1; // s-a apasat STARTDelay_ms(50) ; // astept 50 ms	if (PORTB.B0 && stare) { 	if ( PORTB.B2) PORTB.B3 = 1; // caruciorul este la extrema dreapta, pleaca spre stanga	else PORTB.B4 = 1; // daca nu va porni spre dreapta	break; // ies din bucla}	else stare = 0; // resetezDelay_ms (10); // Incetinim bucla}// In acest interval motorul merge in unul din sensuriwhile (1) { if( PORTB.B1 ) { PORTB.B3=0;PORTB.B4=0;break; }Delay_ms(10); // Incetinim bucla}while (2) {      // asta nu area break nici unde.while (2) {	if (PORTB.B0) stare = 1;Delay_ms(50) ;	if (PORTB.B0 && stare) {	if ( PORTB.B1) PORTB.B2 = 1;	else PORTB.B3 = 1;	break;}	else stare = 0;Delay_ms (10);}	while (2) {	if( PORTB.B2 ) {PORTB.B3=0;PORTB.B4=0; 	break;}Delay_ms(10);}}}}
Link spre comentariu
Vizitator onica_marian

Salut. E foarte ambiguu codul. Ar trebui structurat sa fie cat mai inteligibil si usor de depanat. Pentru mai multa claritate, poti defini pinii de pe portul B mai elegant (ex. #define START PORTB.B0 ). Instalatia ar putea functiona si mai bine cu intreruperi setate corespunzator.

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