Ένα μικροϋπολογιστικό σύστημα αποτελείται από την κεντρική μονάδα επεξεργασίας CPU, τη μνήμη προγράμματος στην οποία εκχωρείται ο κώδικας της εφαρμογής, τη μνήμη για την αποθήκευση των δεδομένων κατά την εκτέλεση της εφαρμογής και τα κυκλώματα εισόδου – εξόδου με τα οποία το σύστημα επικοινωνεί με τον έξω κόσμο.
Ένας μικροελεγκτής AVR είναι ένα ολοκληρωμένο κύκλωμα σε μορφή τσιπ που φιλοξενεί όλα τα παραπάνω. Ο τρόπος που ο μικροελεγκτής θα εκτελέσει μια εφαρμογή καθορίζεται από τον κώδικα και είναι αποθηκευμένος στη μνήμη προγράμματος, που ονομάζεται κώδικας μηχανής.
Για να αναπτύξουμε προγράμματα σε κώδικα μηχανής χρησιμοποιούμε την γλώσσα Assembly που είναι μια γλώσσα χαμηλού επιπέδου όπως λέγεται. Στη γλώσσα Assembly γίνεται αντιστοιχία εντολών της γλώσσας μηχανής η οποία αποτελείται από ένα σύνολο ψηφίων 0 και 1 σε συμβολικά ονόματα.
Επειδή η ανάπτυξη προγραμμάτων με την γλώσσα Assembly απαιτεί επίπονη προσπάθεια, αναπτύχθηκαν γλώσσες ανώτερου επιπέδου, όπως λέγονται, που έχουν το χαρακτηριστικό να είναι κοντύτερα στην ανθρώπινη ιδιοσυγκρασία.
Σε αυτή τη σειρά μαθημάτων θα περιγράψουμε μια γλώσσα υψηλού επιπέδου για την οικογένεια των μικροελεγκτών AVR και συγκεκριμένα τη γλώσσα C. Αυτή η γλώσσα την συναντάμε και σε άλλα υπολογιστικά συστήματα όπως τους προσωπικούς υπολογιστές PC. Η γλώσσα C έχει αρκετά χαρακτηριστικά που συναντώνται στις γλώσσες χαμηλού επιπέδου και στη γλώσσα μηχανής. Τα χαρακτηριστικά αυτά της προσδίδουν εκπληκτική ευελιξία και τη δυνατότητα χειρισμών χαμηλού επιπέδου. Η C είναι μια λιτή γλώσσα στην οποία το σύνολο των δεσμευμένων λέξεων δεν ξεπερνά τις 30.
Η C έχει το χαρακτηριστικό μιας δομημένης γλώσσας προγραμματισμού, με τη δυνατότητα τμηματικού ή αρθρωτού χειρισμού του προγράμματος, έτσι ώστε κάθε τμήμα (συνάρτηση) να μπορεί να κρύβει από το υπόλοιπο πρόγραμμα τον κώδικα και τις πληροφορίες που περιέχει.
Η C σαν γλώσσα απαιτήσεων, που με την έλλειψη περιορισμών και το μικρό βαθμό ελέγχου λαθών, αναγκάζει τον προγραμματιστή να είναι πολύ προσεκτικός και να ελέγχει τον κώδικα που αναπτύσσει σε σχέση με τις άλλες γλώσσες προγραμματισμού που οι διορθώσεις γίνονται αυτόματα μέσα από το περιβάλλον ανάπτυξης.
Μια γλώσσα προγραμματισμού ανάλογα με τον τρόπο που μεταφράζει τον πηγαίο κώδικα σε γλώσσα μηχανής, χαρακτηρίζεται είτε ως διερμηνευόμενη είτε ως μεταγλωττιζόμενη.
Η C είναι μια μεταγλωττιζόμενη γλώσσα προγραμματισμού. Αφού γράψουμε τον πηγαίο κώδικα σε ένα επεξεργαστή κειμένου ή σε ένα ολοκληρωμένο περιβάλλον ανάπτυξης, τον περνάμε στον μεταγλωττιστή.
Όταν δεν εντοπιστεί κανένα συντακτικό λάθος από τον μεταγλωττιστή, αυτός θα δημιουργήσει ένα αρχείο με τον εκτελέσιμο κώδικα της εφαρμογής. Στην συνέχεια περνάμε αυτόν τον κώδικα στη μνήμη προγράμματος του μικροελεγκτή με τη βοήθεια ενός αναπτυξιακού περιβάλλοντος υπολογιστή και ολοκληρώνουμε την εφαρμογή που θέλουμε.
Ένα πρόγραμμα στη C αποτελείται από μια ή περισσότερες συναρτήσεις, οι οποίες η κάθε μιας τους εκτελεί μια συγκεκριμένη εργασία. Κάθε πρόγραμμα στη γλώσσα C πρέπει να περιέχει τη συνάρτηση main() από όπου ξεκινά από εκεί η εκτέλεση του κώδικα.
Η C χρησιμοποιεί μεταβλητές για την αποθήκευση δεδομένων κατά την εκτέλεση πράξεων. Η μεταβλητή είναι μια θέση μνήμης με καθορισμένο όνομα και έχει συγκεκριμένο τύπο, όπως εκείνου του χαρακτήρα, του ακεραίου, του πραγματικού ή άλλου τύπου δεδομένων. Πριν τη χρήση της μεταβλητής, αυτή θα πρέπει να δηλωθεί και να της εκχωρηθεί αρχική τιμή. Ένα πρόγραμμα μπορεί να χρησιμοποιεί σταθερές, που είναι προκαθορισμένες τιμές που δεν αλλάζουν κατά την εκτέλεση του προγράμματος.
Οι παραστάσεις είναι πράξεις οι οποίες έχουν ένα συγκεκριμένο αποτέλεσμα. Ανάλογα με το είδος της κάθε πράξης, αλλά και από τον τύπο δεδομένων που μετέχουν στην πράξη, οι παραστάσεις μπορεί να είναι ακέραιες, πραγματικές ή άλλου τύπου δεδομένων.
Εντολή στη γλώσσα προγραμματισμού είναι μια έκφραση που αναγκάζει το μικροϋπολογιστικό σύστημα να εκτελέσει μια συγκεκριμένη λειτουργία. Κάθε εντολή σε μια γλώσσα προγραμματισμού έχει μια αυστηρά καθορισμένη διάταξη, η οποία ορίζεται από την ίδια τη γλώσσα. Οι εντολές εκτελούν διάφορες λειτουργίες. Μια εντολή μπορεί να εκτελεί μια απλή πράξη ή ένα έλεγχο, να επιβάλει μια επαναληπτική διαδικασία κ.τ.λ.
Η δομή ενός προγράμματος στη γλώσσα C επιβάλει τον τμηματικό ή αρθρωτό προγραμματισμό.
Κάθε τμήμα του προγράμματος αποτελεί και από μια συνάρτηση. Οι συναρτήσεις καλούνται με τη χρήση του ονόματος τους. Μια συνάρτηση μπορεί να εκτελεί μια απλή ή σύνθετη λειτουργία αλλά και να επιστρέφει κάποια τιμή στον κώδικα που την καλεί.
Αναγνωριστικά ονομάζονται τα ονόματα που χρησιμοποιεί η γλώσσα για να αναφέρεται στα επιμέρους στοιχεία της. Σαν παράδειγμα έχουμε το όνομα μιας μεταβλητής ή το όνομα μιας συνάρτησης, που αποτελούν αναγνωριστικά της γλώσσας. Για την σύνταξη των αναγνωριστικών, η γλώσσα επιβάλει συγκεκριμένους κανόνες. Οι κανόνες αυτοί καθορίζουν το είδος και το πλήθος των επιτρεπτών χαρακτήρων.