BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   info linguaggio c x pic (https://www.baronerosso.it/forum/circuiti-elettronici/189595-info-linguaggio-c-x-pic.html)

claudio476 18 ottobre 10 12:30

qui un discreto librettino per capire cosa significa programmare in C18:

C18 step by step

Davide B. 18 ottobre 10 12:32

Citazione:

Davide, che sono questi SX??
Dei "PIC Compatibili" che viaggiano a velocità mostruosa...
Ce ne sono 3 modelli e credo siano arrivati ad end of life.
Comunque una buona palestra per imparare, visto il debugger.
Li usavo per fare del superimpose su del segnale video, lavorando a 50MHz, ma possono andare fino a 100 (in realtà qualcosa di più... ma Chip me lo ha fortemente sconsigliato)

MSchiepp 18 ottobre 10 22:22

Citazione:

Originalmente inviato da Davide B. (Messaggio 2266871)
...Almeno, a me è capitato così, quando, all'epoca il buon Ricciardi (il vero guru dell'ARM in Italia) è venuto a trovarmi in ufficio.
In meno di una giornata ho capito quanto avrei potuto fare da solo in mesi da solo...

Non so se lo sai, ma Franco oltre ad essere una delle massime autorità in fatto di architetture ARM, è anche un ottimo modellista, e voliamo insieme tutti i w.e. (o quasi), ovviamente tra una discussino e l'atra su ARM, Cortex, sistemi di sviluppo,...

Michele

Davide B. 19 ottobre 10 00:18

Citazione:

Non so se lo sai, ma Franco oltre ad essere una delle massime autorità in fatto di architetture ARM, è anche un ottimo modellista, e voliamo insieme tutti i w.e. (o quasi), ovviamente tra una discussino e l'atra su ARM, Cortex, sistemi di sviluppo,...
Io sapevo solo che volava con l'aliante motorizzato.
Comunque, quando lo vedi, salutamelo tanto.

elicottero78 21 ottobre 10 02:16

ciao a tutti,pian pianino mi sto leggendo il linguaggio c e contemporaneamente sto leggendo un articolo che spiega alcuni programmi x mikroc

so che ci sono mille codici che possono rendere un programma molto piccolo,ma vorrei capire dove sbaglio qua......programma fatto da me

void main() {

trisb=0b00000011 ;
portb=0;

while(1)

if (portb=0b00000001)
{portb=0b10000000 ;
}

if (portb=0b00000010)
{portb=0b01000000 ;
}

}

in pratica con un pic 16f84a con quarzo da 4 mhz
ho reso rb0 e rb1 entrate collegate a dei tasti e rb7 e rb8 uscite con dei led

io volevo premere rb0 e accendere rb8 fino al rilascio
e volevo premere rb1 e accendere rb7 fino al rilascio

ma succede che se premo rb0 o rb1 si accende solo rb8......dove sbaglio?

MSchiepp 21 ottobre 10 09:28

Prova a riscriverlo così:

void main() {

trisb=0b00000011 ;
portb=0;

while(1){

if (portb=0b00000001){
portb=0b10000000 ;
}

if (portb=0b00000010){
portb=0b01000000 ;
}

}

}

mancava la parentesi dopo il while che definisce il blocco di istruzioni da eseguire in loop. Con mikroc quando hai compilato puoi usare la funzione di debug che ti permette di eseguire passo passo il programma vedendo di volta in volta quali istruzioni vengono eseguite e i valori delle variabili e così puoi capire cosa succede e cosa c'è di sbagliato.

Michele

Davide B. 21 ottobre 10 11:55

Codice:

void main()
{
trisb=0b00000011 ;
portb=0;
while(1)
{
if (portb=0b00000001)
{
portb=0b10000000 ;
}
if (portb=0b00000010)
{
portb=0b01000000 ;
}
}
}

A parte una serie di imprecisioni che ti lascio correggere da solo (se premi i due pulsanti insieme il secondo ti spegne il primo, se premi un pulsante e lo rilasci il codice non lo spegne), c'è un errore grave che ti segnalo.
I confronti si fanno con il ==.
L'uguale singolo (=) è una assegnazione.
Quindi correggi con
if (portb == xxxxxxx) e poi, compito per domani, correggi gli errori che ti ho segnalato.

Davide B. 21 ottobre 10 12:00

Citazione:

Originalmente inviato da Davide B. (Messaggio 2273523)
A parte una serie di imprecisioni che ti lascio correggere da solo (se premi i due pulsanti insieme il secondo ti spegne il primo, se premi un pulsante e lo rilasci il codice non lo spegne)

Rileggendo il programma il codice fa pure di peggio...

Davide B. 21 ottobre 10 12:21

Anche se non è il massimo...
Codice:

#define PULSANTE1 0b00000001
#define PULSANTE2 0b00000010
#define LED1      0b10000000
#define LED2      0b01000000

void main()
{
    trisb=0b00000011 ;
    portb=0;
    while(1)
    {
              // Poichè il solo bit che mi interessa vado a guardare solo
quello
              if ((portb & PULSANTE1) == PULSANTE1)
              {
                // Questa operazione aritmetica setta il solo bit
                // corrispondente a LED1
                portb = portb | LED1;
              }else
              {
                // Questa operazione resetta il solo bit
                // corrispondente a LED2
                portb = portb & (~LED1);
              }
              // Altro modo di vedere se il pulsante è stato premuto
              if ((portb & PULSANTE2) > 0)
              {
                portb = portb | LED2;
              }else
              {
                portb = portb & (~LED2);
                // in pratica, prima inverti L2 e poi fai la AND
              }
    }
}


elicottero78 21 ottobre 10 18:38

grazie davide b.,cavolo,è tutto l opposto di quello che ho scritto io,con mikrobasic,bastava un niente a scrivere questo programma,ma con mikroc è tutta un altra storia


mi puoi spiegare x favore questi simboli?

--if ((portb & PULSANTE1) == PULSANTE1)

--portb = portb | LED1

--portb = portb & (~LED1);

-- |

-- ~


Tutti gli orari sono GMT +2. Adesso sono le 12:40.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2026
www.baronerosso.it - www.toymagazine.it