# data[].attributes.headline
Il linguaggio C è ancora uno standard nell'informatica, usato per la sua efficienza e controllo totale del computer. È fondamentale per imparare linguaggi specialistici. Anche se impegnativo, offre vantaggi come compattezza e velocità del codice. Permette di programmare sia ad alto che basso livello e di sfruttare appieno le capacità dei microcontrollori. Tuttavia, i programmi devono essere compilati prima di essere eseguiti.

# data[].attributes.subject
Il linguaggio C è ancora uno standard nell'informatica, usato per la sua efficienza e controllo totale del computer. È fondamentale per imparare linguaggi specialistici. Anche se impegnativo, offre vantaggi come compattezza e velocità del codice. Permette di programmare sia ad alto che basso livello e di sfruttare appieno le capacità dei microcontrollori. Tuttavia, i programmi devono essere compilati prima di essere eseguiti.

# data[].attributes.headline
L'assembly è utile per comprendere le relazioni tra software e hardware nei microcontrollori, ottimizzando lo spazio del codice per programmi semplici. Tuttavia, diventa complesso e produce programmi molto grandi per progetti più complessi. È consigliabile passare a linguaggi di alto livello come mikroC, mikrobasic o mikropascal.

# data[].attributes.subject
L'assembly è utile per comprendere le relazioni tra software e hardware nei microcontrollori, ottimizzando lo spazio del codice per programmi semplici. Tuttavia, diventa complesso e produce programmi molto grandi per progetti più complessi. È consigliabile passare a linguaggi di alto livello come mikroC, mikrobasic o mikropascal.

# data[].attributes.headline
I linguaggi di alto livello semplificano la programmazione, consentendo l'uso di costrutti logici standard e strutture dati come vettori. Grazie a librerie dedicate, offrono accesso diretto alle funzionalità del microcontrollore, indipendentemente dal tipo. Le case produttrici forniscono compilatori integrati per convertire il codice sorgente in codice macchina.

# data[].attributes.subject
I linguaggi di alto livello semplificano la programmazione, consentendo l'uso di costrutti logici standard e strutture dati come vettori. Grazie a librerie dedicate, offrono accesso diretto alle funzionalità del microcontrollore, indipendentemente dal tipo. Le case produttrici forniscono compilatori integrati per convertire il codice sorgente in codice macchina.

# data[].attributes.headline
1. E’ sempre buona norma salvare periodicamente i programmi e soprattutto conservare una copia del programma quando si effettua qualche modifica per poter sempre tornare allaversione precedente

# data[].attributes.subject
1. E’ sempre buona norma salvare periodicamente i programmi e soprattutto conservare una copia del programma quando si effettua qualche modifica per poter sempre tornare allaversione precedente

# data[].attributes.headline
2. Creare sempre una cartella in cui inserire il progetto e tutti i file collegati: non lasciare file sparpagliati e controllare con attenzione dove sono salvati.

# data[].attributes.subject
2. Creare sempre una cartella in cui inserire il progetto e tutti i file collegati: non lasciare file sparpagliati e controllare con attenzione dove sono salvati.

# data[].attributes.headline
3. Tutte le istruzioni in mikroC, come in tutte le versioni di C o di C++ devono terminare

# data[].attributes.subject
3. Tutte le istruzioni in mikroC, come in tutte le versioni di C o di C++ devono terminare

# data[].attributes.body
sempre con il punto e virgola ‘’ ; ‘’

# data[].attributes.headline
4. I commenti in MikroC sono utilizzati per migliorare la leggibilità del codice. Possono essere su più righe, iniziando con /* e terminando con */, oppure su una sola riga, utilizzando //. I commenti non influenzano lo spazio o la velocità di esecuzione del programma. È importante terminare correttamente i commenti per evitare errori nel codice.

# data[].attributes.subject
4. I commenti in MikroC sono utilizzati per migliorare la leggibilità del codice. Possono essere su più righe, iniziando con /* e terminando con */, oppure su una sola riga, utilizzando //. I commenti non influenzano lo spazio o la velocità di esecuzione del programma. È importante terminare correttamente i commenti per evitare errori nel codice.

# data[].attributes.headline
Per convenzione, le istruzioni che fanno parte di una funzione sono indentate, cioè spostatea destra di un certo spazio (una tabulazione). Ciò migliora la leggibilità del programma.

# data[].attributes.subject
Per convenzione, le istruzioni che fanno parte di una funzione sono indentate, cioè spostatea destra di un certo spazio (una tabulazione). Ciò migliora la leggibilità del programma.

# data[].attributes.headline
5. Codici ASCII per ottenere alcuni caratteri speciali (premere ALT + il codice sul tastierinonumerico; rilasciare il tasto ALT)Selezionare Tools->ASCII Chart per vedere i caratteri associati ai numeri del codice ASCII

# data[].attributes.subject
5. Codici ASCII per ottenere alcuni caratteri speciali (premere ALT + il codice sul tastierinonumerico; rilasciare il tasto ALT)Selezionare Tools->ASCII Chart per vedere i caratteri associati ai numeri del codice ASCII

# data[].attributes.headline
Esadecimale il numero è preceduto da 0x oppure 0X: o Esempio 0x3f oppure anche 0X3f

# data[].attributes.subject
Esadecimale il numero è preceduto da 0x oppure 0X: o Esempio 0x3f oppure anche 0X3f

# data[].attributes.headline
Decimale il numero non è preceduto da alcuna annotazione: o Esempio 50

# data[].attributes.subject
Decimale il numero non è preceduto da alcuna annotazione: o Esempio 50

# data[].attributes.headline
Ottale si mette uno zero prima del numero: o Esempio 050

# data[].attributes.subject
Ottale si mette uno zero prima del numero: o Esempio 050

# data[].attributes.headline
Binario si mette 0b oppure 0B prima del numero: o Esempio 0b00110011 anche 0B00110011

# data[].attributes.subject
Binario si mette 0b oppure 0B prima del numero: o Esempio 0b00110011 anche 0B00110011

# data[].attributes.headline
La funzione main() è il punto di inizio del programma e viene eseguita per prima. Ogni funzione, inclusa main(), è racchiusa tra parentesi graffe e contiene le istruzioni per svolgere il lavoro della funzione. 

# data[].attributes.subject
La funzione main() è il punto di inizio del programma e viene eseguita per prima. Ogni funzione, inclusa main(), è racchiusa tra parentesi graffe e contiene le istruzioni per svolgere il lavoro della funzione. 

# data[].attributes.headline
Le librerie non devono essere definite nel codice, mikroC le include automaticamente. Si consiglia di includere tutte le librerie all'inizio del progetto per facilitare lo sviluppo iniziale, ma successivamente è preferibile non includerne alcuna per rendere il progetto più leggero e la compilazione più veloce. È possibile aggiungere librerie manualmente tramite il Library Manager. L'accesso ai singoli bit di un registro è utile per settare/reset o leggere lo stato di un pin.

# data[].attributes.subject
Le librerie non devono essere definite nel codice, mikroC le include automaticamente. Si consiglia di includere tutte le librerie all'inizio del progetto per facilitare lo sviluppo iniziale, ma successivamente è preferibile non includerne alcuna per rendere il progetto più leggero e la compilazione più veloce. È possibile aggiungere librerie manualmente tramite il Library Manager. L'accesso ai singoli bit di un registro è utile per settare/reset o leggere lo stato di un pin.

# data[].attributes.headline
1. Formato binario per accedere ai singoli bit; si modificano tutti i bit contemporaneamente: PORTB=0b00000001; //setta bit 0 di PORTB e resetta contemporaneamente // tutti gli altri bit all’interno del registro PORTB 

# data[].attributes.subject
1. Formato binario per accedere ai singoli bit; si modificano tutti i bit contemporaneamente: PORTB=0b00000001; //setta bit 0 di PORTB e resetta contemporaneamente // tutti gli altri bit all’interno del registro PORTB 

# data[].attributes.headline
2. Accesso diretto al bit di una porta: PORTB.B0=1; per settare il bit 0 di PORTB

PORTB.B0=0; per resettare il bit 0 di PORTB.

In versioni precedenti si usava la ‘’F’’ al posto della B. Si possono usare entrambi i metodi. Per leggere lo stato di un bit si può scrivere ad esempio ingresso= PORTB.B0

# data[].attributes.subject
2. Accesso diretto al bit di una porta: PORTB.B0=1; per settare il bit 0 di PORTB

PORTB.B0=0; per resettare il bit 0 di PORTB.

In versioni precedenti si usava la ‘’F’’ al posto della B. Si possono usare entrambi i metodi. Per leggere lo stato di un bit si può scrivere ad esempio ingresso= PORTB.B0

# data[].attributes.headline
3. Nome del bit: RB0_bit=1; o RB0_bit=0;

Per leggere lo stato di un bit si può scrivere ad esempio ingresso= RB0_bit

Esempio1: lampeggio di un led posto su RB0

Al posto del classico “Hello world!” realizziamo un programma che faccia lampeggiare un LED utilizzando un PIC 16F84A.

# data[].attributes.subject
3. Nome del bit: RB0_bit=1; o RB0_bit=0;

Per leggere lo stato di un bit si può scrivere ad esempio ingresso= RB0_bit

Esempio1: lampeggio di un led posto su RB0

Al posto del classico “Hello world!” realizziamo un programma che faccia lampeggiare un LED utilizzando un PIC 16F84A.

# data[].attributes.headline
Ad ogni bit nel registro di una PORT corrisponde uno specifico bit nel registro direzione TRIS. ∙ Zero imposta il bit corrispondente sulla porta come uscita; ∙ Uno imposta il bit corrispondente sulla porta come ingresso.

# data[].attributes.subject
Ad ogni bit nel registro di una PORT corrisponde uno specifico bit nel registro direzione TRIS. ∙ Zero imposta il bit corrispondente sulla porta come uscita; ∙ Uno imposta il bit corrispondente sulla porta come ingresso.

# data[].attributes.headline
La struttura while crea un ciclo infinito che contiene istruzioni da eseguire continuamente. All'interno del ciclo while, il livello di RB0 viene portato alto e successivamente viene chiamata una routine che genera un ritardo di 500 millisecondi (mezzo secondo).

# data[].attributes.subject
La struttura while crea un ciclo infinito che contiene istruzioni da eseguire continuamente. All'interno del ciclo while, il livello di RB0 viene portato alto e successivamente viene chiamata una routine che genera un ritardo di 500 millisecondi (mezzo secondo).

# data[].attributes.body
* moltiplicazione

/ divisione

% resto divisione intera Es. 9 % 3; //risultato è 0 Es. 7 % 3; //risultato è 1 + somma

- differenza

= assegnazione

++ incremento; aggiunge uno all’operando.

Es. a++; equivale ad a=a+1;

- - decremento; sottrae uno all’operando.

Es. a- -; equivale ad a=a-1;

# data[].attributes.body
x+=2; equivale a x=x+2;

x-=3; equivale a x=x-3;

x*=2; equivale a x=x*2;

x/=3; equivale a x=x/3;

x%3; equivale a x=x%3;

# data[].attributes.body
Scrivendo x << y;

Il valore di x viene ottenuto facendo scorrere di y posizioni verso sinistra i bit di x; y deve essere un numero positivo. I bit che escono dall'estremo sinistro vengono persi e viene aggiunto uno zero sul lato destro per ogni bit che esce.

Esempio: PORTB = PORTB << 1 // Scorrimento a sinistra di un bit

Prima: PORTB = 0b00000001

Dopo: PORTB = 0b00000010

# data[].attributes.body
Scrivendo x >> y;

Il valore di x viene ottenuto facendo scorrere di y posizioni verso destra i bit di x; y deve essere un numero positivo. I bit che escono dall'estremo destro vengono persi. Se x è di tipo unsigned, viene aggiunto uno zero sul lato sinistro per ogni bit che esce; se x è di tipo signed, viene aggiunto un bit uguale al segno (0 per positivo, 1 per negativo).

Esempio: PORTB = PORTB >> 1 // Scorrimento a destra di un bit

Prima: PORTB = 0b10000000

Dopo: PORTB = 0b01000000

# data[].attributes.body
AND logico

(espressione_logica1)&& (espressione_logica2)

restituisce vero se entrambi gli operandi sono veri, restituisce falso in caso contrario

# data[].attributes.body
OR logico

(espressione_logica1) ||

(espressione_logica2)

restituisce vero se almeno una delle espressioni è vera;

restituisce falso in caso contrario

# data[].attributes.body
NOT logico

! espressione_logica

restituisce vero se espressione_logica è 0 (falso) restituisce falso se espressione_logica è 1 (vero)