Buongiorno a tutti !
Mi sto avvicinando al C per poter programmarmi dei pic (16F84)
Fatte le prime prove funzionanti di accensione led, spegnimento e lampeggio a diverse frequenze ho cercato di buttar giù questo codice, errori non me ne segna, ma penso ci sia qualche problema di "logica", soprattutto per la variabile "molt".
Vorrei sapere da voi se effettivamente, costruito così, quando il main va a eseguire il ciclo "for(z;molt)" riesce a leggere il valore di quante volte è stato eseguito nel primo IF.
Ho cercato di colorarvi i punti in dubbio, così da render più leggibile il codice.
Se ci sono altri errori o avete consigli sulla stesura del programma son naturalmente ben accetti. Perchè sono 3 giorni che mi sono avvicinato all'oscuro mondo della programmazione. Grazie !
codice:#include <htc.h> #include"delay.c" #define Aspetta 250 //definisce la var Aspetta con 250ms void pausa(char ripeti); // void è un puntatore che chiama il ciclo pausa quando viene chiamato dalprogramma principale. void flash(char nvolte); void incremento(char molt); main(void) { TRISA = 1; //setta RA0 in entrata TRISB = 0; //setta RB in uscita { char y; //dichiara y char molt=0; //inizializza "molt" char tot=50; for(y=0;y<=tot;y++) //ripeti per 50 volte { DelayMs(130); if(PORTA==0b00000001) //se viene premuto il bottone { PORTB = 0b00000001; //accendi il led DelayMs(100); //aspetta 100ms PORTB = 0b00000000; //spegni il led DelayMs(130); //aspetta 100ms incremento; //chiama la funzione "incremento" //incrementa molt di 1 } } { char z; for(z=0;z<=molt;z++) //ripeti quante volte è "molt" //il valore di "molt" dovrebbe corrispondere //ad ogni esecuzione vera di IF { pausa(60); //richiama pausa 60 volte, corrisponde a 1 minuto } flash(5); //richiama sequenza flash 5 volte } } } void flash(char nvolte) { char nflash; for (nflash=0;nflash<=nvolte;nflash++) //ripeti quante volte è stato dichiarato //nel main PORTB = 0b00000001; //accendi il led DelayMs(250); //aspetta 250ms PORTB = 0b00000000; //spegni il led DelayMs(250); //aspetta 250ms } void incremento(char molt) { molt++; //incrementa "molt" ogni volta //che viene chiamata la funzione dall'IF } void pausa(char ripeti) //nome assegnato alla funzione del ciclo { //apertura della funzione ciclo char x; //definisce l'esistenza di x for(x=0;x<=ripeti;x++) //il ciclo vero e proprio DelayMs(Aspetta); //ogni ciclo corrisponde a 1 secondo DelayMs(Aspetta); DelayMs(Aspetta); DelayMs(Aspetta); //l'argomento del ciclo (qui finisce il ciclo e ci và il punto e virgola) }