Jump to content
PLC Forum


Sign in to follow this  
jolly-pc

In Che Linguaggio C Devo Programmare Un Pic 16F84A?

Recommended Posts

jolly-pc

Salve e buona giornata a tutti,ho una domanda da chiedervi,ma è possibile che ci sono 2 tipi di linguaggio c per programmare un pic?Mi spiego meglio.

Allora per far accendere un led con il pic 18f45k20 ho usato questo programma in c:


#pragma config FOSC = INTIO67

#pragma config WDTEN = OFF, LVP = OFF

/** I N C L U D E S **************************************************/

#include "p18f45K20.h"

/** D E C L A R A T I O N S *******************************************/

void main (void)

{

TRISB = 0b01111111;// PORTD bit 7 to output (0); bits 6:0 are inputs (1)

LATBbits.LATB7 = 1;// Set LAT register bit 7 to turn on LED

while (1);

}

e funziona. Ora se provo a compilare lo stesso codice con il compilatore "HI-TECH ANSI C COMPILER" per programmare un pic 16f84a normalmente cambiando il file include,mi restituisce i seguenti errori: Build C:\Users\jolly\Desktop\aaaaaaa for device 16F84A Using driver C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe Make: The target "C:\Users\jolly\Desktop\aaaaaaaaaa.p1" is out of date. Executing: "C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe" --pass1 C:\Users\jolly\Desktop\aaaaaaaaaa.c -q --chip=16F84A -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" Error [192] C:\Users\jolly\Desktop\aaaaaaaaaa.c; 9.1 undefined identifier "LATBbits" Error [196] C:\Users\jolly\Desktop\aaaaaaaaaa.c; 9.16 struct/union required Per far accendere il led per il pic 16f84a devo usare il seguente codice:

#include<pic16f84a.h>

main(void)

{

TRISB = 0;				 /* setta le porte B come uscite */

PORTB = 0b00001000;	   // attiva RB1 (pin 7 del 16F84)

}

Come mai la sintassi del codice è diversa,non esiste una versione del linguaggio c "universale" che va bene per tutti i pic?

Edited by jolly-pc

Share this post


Link to post
Share on other sites

Livio Orsini

C'è un piccolo particolare non trascurabile: il processore ed i suoi registri.

Il compilatore è "stupido" fa quello che gli si comanda. Il vecchio 16f84a è molto differente dal nuovo 18f45k20.

Non solo, dipende da cosa è scritto nei rispettivi Header files.

Per esempio nei miei header files per il "C" della CCS ho un'equivalenza per poter usare i termini PORTA, PORTB, etc. se non includo un header corretto e uso, ad esempio,

"PORTB" il compilatore mi da errore.

Share this post


Link to post
Share on other sites
jolly-pc

Io vorrei anche imparare l'assembly perchè è la base dei microcontrollori,ma leggendo vari articoli,anche se ad esempio imparassi il funzionamento del pic 16f84a e riesco a programmarlo a meraviglia in assembly,se in futuro cambio microcontrollore sono costretto a imparare tutto da zero e quello imparato per il pic 16f84a non mi è servito a niente....giusto?

Share this post


Link to post
Share on other sites
Livio Orsini
se in futuro cambio microcontrollore sono costretto a imparare tutto da zero e quello imparato per il pic 16f84a non mi è servito a niente....giusto?

No. Se stai sempre nella scia Microchip è tutto collegato e non perdi nulla; al più devi aggiungere nuove conoscenze. Il 16F84 oltre ad essere uno dei più vecchi è uno dei più piccoli, però tutto quello che vale per questo processore vale anche, ad esempio per 16F877, salvo che quest'ultimo ah un po di funzioni in più che vanno studiate.

Io sostengo che da sempre cje conoscere l'assembler è fondamentale per chi traffica con i micro. Conoscerlo non significa doverlo usare per forza. Io non lo uso quasi mai; però qaundo ho necessità di capire come funziona veramente una periferica del micro, o un funzione particolare, faccio delle prove veloci in asm, così quando ho necessità di stressare al massimo al velocità o il codice.

Share this post


Link to post
Share on other sites
jolly-pc

Premetto che imparo anche le basi dell'assembly Livio ne approfitto per domandarti un'altra cosa,hai detto che il pic 16f84 è molto vecchio ed anche molto limitato,ovvero come velocità memoria e porte,ed io per questo l'ho scelto come punto di inizio.

Mi puoi consigliare un pic di fascia "media" nel senso non vecchio e limitato come il 16f84 ma neanche uno troppo complesso,sempre della famiglia Microchip...un pic che posso usare per un po di tempo,magari che posso collegarci un display alfa-numerico,grazie.

Ritornando sul linguaggio c,purtroppo non ho capito,cioè non esiste una sintassi unica? Come faccio a scegliere quella giusta,mi collego ai due esempi di codice che ho scritto nel primo post?

Vorrei approfondire molto questo argomento solo che mi sono bloccato sul linguaggio,cioè è "impensabile" programmare per sempre con l'assembly giusto?

Share this post


Link to post
Share on other sites
Livio Orsini

Per imparare va anche bene 16f84, oppure un 16f876 abbastanza vecchio ma con molta più memoria e che può lavorare con quarzo da 20 MHz.

Il "C" ha una sua sintassi unica. Le differenze che trovi sono nelle funzioni specifiche per i controllori come i PIC.

Un linguaggio ad alto livello come il "C" deve essere tradotto in istruzioni in esadecimale (.hex) che è il codce che riconosce il processore. Ogni processore ha i suoi codici e la sua organizzazione di registri e operazioni. Ogni compilatore risolve in modo differente questo tipo di interfacciamento con quelle che vengono denominate "Built in function" che sono vere e proprie istruzioni specifiche per quel processore, una specie di macro istruzione assembler (lo dico solo per cercare di spiegare il concetto).

La sintassi del "C" rimane identica, i cicli di for, while, if, etc. sono sempre identici con qualunque compilatore impiegato.

Il guaio è che si cercano sempre scorciatoie per imparare le cose nuove; ad esempio si reclamizzano corsi che insegnano a suonare al chitarra in un giorno!

Non è possibile. Non esistono scorciatoie. Bisogna fare le cose con metodo. Quindi si deve partire con il conoscere il micro dalle basi, cioè dallo Hw: registri, periferia, organizzazione della memoria, etc. Poi bisogna studiare il linguiaggio partendo dalle sue basi.

Ti consiglio di seguire il vechio ma bellissimo corso di Sergio Tanzilli, è scaricabile in modo gratuito ed usa proprio il 16f84. Se lo segui passo passo alla fine avrai capito come si usa un PIC.

Per il "C" ti consiglio vivamente di leggerti la vera bibbia del linguaggio. E' un piccolo testo fondamentale "Linguaggio C" di Brian W. Kernighan e Dennis M. Ritchie. Non costa molto ma non dovrebbe mai mancare nella biblioteca di chi programma.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...