Προγραμματισμός σε C και προγραμματισμός Μακροεντολών με τον ΕΖ430

Σχετικά έγγραφα
Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

2. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΩΝ ΘΥΡΩΝ ΕΙΣΟ ΟΥ/ΕΞΟ ΟΥ ΤΟΥ PIC16F877-ΑΡΙΘΜΗΤΙΚΕΣ ΕΝΤΟΛΕΣ

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αρχιτεκτονική υπολογιστών

Αρχιτεκτονική Υπολογιστών

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

Ερωτήσεις θεωρίας MY. Μέρος Α. Υλικό.

ΗΜΥ 213. Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Τμήματα ΚΜΕ (CPU) Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (Ι)

Οργάνωση Υπολογιστών (Ι)

Στοιχεία από Assembly Γιώργος Μανής

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Τελική Εξέταση, Απαντήσεις/Λύσεις

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΗΜΥ 213. Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών week 5. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

ΜΕΡΟΣ 1. Διακοπές (Interrupts)

Εισαγωγή στον Προγραμματισμό

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

ίοδοι Εκποµπής Φωτός

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 3: Εντολές λογικών πράξεων και εντολές κλήσης ρουτινών

Αρχιτεκτονική υπολογιστών

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

Εισαγωγή στην πληροφορική -4

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

1 η Ενδιάμεση Εξέταση Απαντήσεις/Λύσεις

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

Αρχιτεκτονικές Συνόλου Εντολών

Εντολές PIC16F rrf <όνομα καταχωρητή>,a a=f ή a=w H εντολή πραγματοποιεί ολίσθηση προς τα δεξιά του καταχωρητή που ακολουθεί μέσω κρατουμένου

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Εργαστήριο Αρ. 2

Εφαρμογές μικροελεγκτών

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Άσκηση 1 (α) Άσκηση 1 (γ) Άσκηση 1 (β) Παραδείγματα Assembly. Άρα με έλεγχο στον $t1 αποφασίζω αν είναι 0 ή 1.

(Ιούνιος 2001 ΤΕΕ Ηµερήσιο) Σε κάθε µία από τις παρακάτω περιπτώσεις, να

Αρχιτεκτονική Υπολογιστών

«ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ» ΕΣΩΤΕΡΙΚΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Δομημένος Προγραμματισμός

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm("r3");

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Ανάπτυξη και Σχεδίαση Λογισμικού

Εικονική Μνήμη (Virtual Μemory)

Αρχιτεκτονική Eckert-von Neumann. Πως λειτουργεί η ΚΜΕ; Κεντρική μονάδα επεξεργασίας [3] ΕΠΛ 031: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΑΠΑΝΤΗΣΕΙΣ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

Συναρτήσεις-Διαδικασίες

10. Πληκτρολόγιο matrix 4x4

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Τρίτη (3 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Αρχιτεκτονική υπολογιστών

ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αρχιτεκτονικη υπολογιστων

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

MIPS functions and procedures

Καταχωρητές & τμήματα μνήμης του Ματθές Δημήτριος Καθηγητής Πληροφορικής

Αρχιτεκτονική Επεξεργαστών Ψ.Ε.Σ

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

ΠΕΡΙΕΧΟΜΕΝΑ 1. Υπορουτίνες Μαθηµατικών Πράξεων 1.1. Προσηµασµένοι και απροσήµαστοι αριθµοί 1.2. Μετατροπές προσηµασµένων και απροσήµαστων αριθµών

Παραδείγματα Προγραμματισμού σε Assembly του TRN

Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου. Ενδέκατη (11 η ) δίωρη διάλεξη.

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Εφαρμογές Σειριακής Επικοινωνίας

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Μάθημα 4 ο Πράξεις με bits. Δρ.

Βασική δοµή και Λειτουργία Υπολογιστή

Transcript:

Προγραμματισμός σε C και προγραμματισμός Μακροεντολών με τον ΕΖ430 Άσκηση 1. Πολλαπλασιασμός και διαίρεση με ολίσθηση bits. Οι πολλαπλασιασμοί και οι διαιρέσεις είναι περίπλοκες διαδικασίες για υλοποίηση σε οποιονδήποτε μικροεπεξεργαστή. Αυτές οι πράξεις πρέπει να αποφεύγονται αν είναι δυνατό, ή να αντικαθίστανται με απλούστερες, ισοδύναμες πράξεις. Ποια είναι η λειτουργία των τελεστών << και >>; Πως μπορούν να χρησιμοποιηθούν αυτοί οι τελεστές για να πραγματοποιήσουμε πολλαπλασιασμό και διαίρεση με δυνάμεις του 2 στο ρόλο του πολλαπλασιαστή ή του διαιρέτη; Υλοποιείστε παραδείγματα με C. 1

Άσκηση 2. Δημιουργία και κλήση συναρτήσεων στη C. Εξετάστε το παράδειγμα tutor.c που περιέχεται στον υποκατάλογο με τα παραδείγματα του IAR του MSP430. Παρατηρείστε τον τρόπο με τον οποίο δηλώνουμε, ορίζουμε και καλούμε μια συνάρτηση στη C. Να γραφεί η συνάρτηση multiply(int x, int y) που δέχεται ως παράμετρο το x και το πολλαπλασιάζει με το y χρησιμοποιώντας τη διαδικασία ολίσθησης bit. Πρέπει να επιστρέφει int. Για απλούστευση ας υποτεθεί ότι το y είναι δύναμη του 2. Στη συνέχεια να υλοποιηθεί συνάρτηση divide(int x, int y) που δέχεται παράμετρο x και τη διαιρεί με το y χρησιμοποιώντας και πάλι την τεχνική ολίσθησης ψηφίου. Και αυτή θα πρέπει να επιστρέφει ακέραιο. 2

Άσκηση 3. Καταχωρητές Ψηφιακής Εισόδου/Εξόδου Ανοίξτε το αρχείο msp430x20x3.h. Το αρχείο αυτό περιέχει τα ονόματα των καταχωρητών και τους ορισμούς τους για τον ez430. Κάνοντας χρήση του σχηματικού του ez430, του προηγούμενου αρχείου κεφαλίδας και το αρχείο ez430 s User Guide, να απαντηθούν τα εξής: Ο Watchdog Timer αυτόματα επαναθέτει (reset) το υλικό του μικροελεγκτή αν αυτός δεν επανατίθεται περιοδικά ή αν βγει εκτός λειτουργίας. Συνήθως τον απενεργοποιούμε. Για να γίνει αυτή η απενεργοποίηση γράφουμε στο WDTPW (Watchdog Timer Password) και στο WDTHOLD (Watchdog Timer Hold) τμήμα του WDTCTL (Watchdog Timer Control Register). Ψάξτε στο εδάφιο 7.3 του User s Guide για περισσότερες πληροφορίες. Βρείτε τα ονόματα για αυτόν τον καταχωρητή στο αρχείο κεφαλίδας. Πώς διαφοροποιούνται σε σχέση με την περιγραφή τους στον User s Guide. Γράψτε κώδικα σε C για να τον απενεργοποιήσετε. 3

Ποιες είναι οι διαφορές μεταξύ των P1DIR, P1SEL, P1OUT, P1IN; Μερικές επαφές (pins) έχουν πολλές εφαρμογές εξόδου (δείτε το σχηματικό) και άρα θα πρέπει ο προγραμματιστής να επιλέξει το κατάλληλο σήμα. Καταγράψτε τις λειτουργίες αυτές. Γράψτε κώδικα που θα επιλέγει εναλλακτικές λειτουργίες για τον P2.2. (Eπαφή2.Θύρα 2). Ποια τα αποτελέσματα σε επίπεδο υλικού; 4

Άσκηση 4. Προγραμματισμός Ψηφιακών Εισόδων/Εξόδων. Γράψτε ένα πρόγραμμα για να αναβοσβήνει SOS σε κώδικα Morse συνεχώς. Στον κώδικα Morse το SOS είναι: S =, O =, S=, όπου η κάθε τελεία (.) είναι ένα σύντομο αναβόσβησμα και κάθε παύλα ( ) είναι ένα χρονικά μεγαλύτερο αναβόσβημα του LED. Ο χρόνος για μια παύλα είναι ίσος με τον αντίστοιχο τριών τελειών. Ο χρόνος ανάμεσα σε κάθε γράμμα αντιστοιχεί στο χρόνο μιας τελείας. Ο χρόνος ανάμεσα σε διαδοχικές λέξεις αντιστοιχεί στο χρόνο πέντε τελειών. Σημείωση: Να απενεργοποιήσετε τον WDTCTL στην αρχή του προγράμματος. 5

Εισαγωγή στον Προγραμματισμό Ενσωματωμένων Συστημάτων με την Assembly H assembly είναι μια γλώσσα προγραμματισμού σε επίπεδο γλώσσας μηχανής, κατανοητή σχετικά εύκολα από τον προγραμματιστή. Η γλώσσα μηχανής είναι η ακολουθίες 0 και 1 των bits που κωδικοποιούν τις λειτουργίες του επεξεργαστή. Η assembly απλά αντικαθιστά αυτές τις δυσανάγνωστες λειτουργίες με πιο εύληπτα σύμβολα που καλούνται μνημονικά (mnemonics). Για παράδειγμα η ακόλουθη εντολή είναι σε γλώσσα μηχανής 0001110010000110 Ενώ σε assembly η ίδια εντολή είναι ADD R6,R2,R6 ; Add $R2 to $R6 store in $R6 Και σημαίνει πρόσθεσε τα περιεχόμενα των καταχωρητών R6 και R2 και αποθήκευσε το αποτέλεσμα στον καταχωρητή R6. Οτιδήποτε ακολουθεί μετά το ερωτηματικό ; είναι σχόλιο και δε χρησιμοποιείται για τον προγραμματισμό του συστήματος. Η assembly διατηρεί μια 1 1 αντιστοιχία με τη γλώσσα μηχανής. Δηλαδή, κάθε γραμμή assembly αντιστοιχεί σε μια λειτουργία που μπορεί να ολοκληρωθεί από τον επεξεργαστή. Αυτό δε συμβαίνει στις ανώτερου επιπέδου προγραμματισμού γλώσσες. Η αντίστροφη λειτουργία πραγματοποιείται από τον dissasebler. Οι εντολές της assembly είναι πολύ απλές σε αντίθεση με τις εντολές των υψηλού επιπέδου γλωσσών προγραμματισμού. Οι εντολές τις υλοποιούν συνήθως μια λειτουργία, ενώ λειτουργίες που είναι περιπλοκότερες θα πρέπει να σχηματιστούν από απλούστερες εντολές. Ακολουθούν παραδείγματα συνηθισμένων εντολών: Μετακινήσεις δεδομένων : Τοποθέτηση μιας σταθερής τιμής σε έναν καταχωρητή. Μεταφορά δεδομένων από μια θέση μνήμης σε έναν καταχωρητή (αλλιώς λέγεται και φόρτωση του καταχωρητή) ή μετακίνηση δεδομένων από έναν καταχωρητή σε μια θέση μνήμης. Όλα τα δεδομένα πρέπει να τραβηχτούν από τη μνήμη πριν γίνει κάποιος υπολογισμός. Αντίστοιχα, τα αποτελέσματα αποθηκεύονται στη μνήμη αφού γίνει πρώτα ο υπολογισμός τους. Ανάγνωση και εγγραφή δεδομένων από συσκευές υλικού και περιφερειακά. Υπολογισμοί: Πρόσθεση, αφαίρεση, πολλαπλασιασμός και διαίρεση. Συνήθως οι τιμές δύο καταχωρητών χρησιμοποιούνται ως παράμετροι και το αποτέλεσμα τοποθετείται σε κάποιον καταχωρητή. Υλοποίηση διεργασιών σε επίπεδο bit. Εφαρμογή του AND και του OR των αντίστοιχων bits ενός ζεύγους καταχωρητών, ή υλοποίηση της άρνησης (NOT) κάθε bit ενός καταχωρητή. Σύγκριση των τιμών δύο καταχωρητών (>, <, >=. <=). 6

Έλεγχος ροής: Μεταπήδηση σε μια άλλη θέση του προγράμματος και εκτέλεση των εντολών από το σημείο αυτό και κάτω. Μεταπήδηση σε μια άλλη θέση του προγράμματος αν ισχύει μια συγκεκριμένη συνθήκη. Μεταπήδηση σε μια άλλη θέση του προγράμματος αλλά διάσωση της επόμενης εντολής ως σημείο αναφοράς επιστροφής. Πλεονεκτήματα της Assembly Το μεγαλύτερο πλεονέκτημά της είναι η ταχύτητα εκτέλεσης. Ένας καλός προγραμματιστής πρέπει να βελτιστοποιεί τον κώδικα του παράγοντας τα αποτελέσματα με το ελάχιστο απαιτούμενο πλήθος εντολών. Ωστόσο, στις περισσότερες περιπτώσεις χρειάζεται εις βάθος γνώση του συνόλου εντολών του επεξεργαστή για να παραχθεί καλύτερος κώδικας από αυτόν που παράγει ο μεταγλωττιστής. Ο προγραμματισμός σε χαμηλό επίπεδο είναι βολικότερος με τη χρήση της assembly. Π.χ. η assembly χρησιμοποιείται συχνά για να γράψουμε οδηγούς συσκευών (device drivers), δηλαδή των κώδικα χαμηλού επιπέδου για την αλληλεπίδραση μεταξύ του λειτουργικού συστήματος και του υλικού. Οι επεξεργαστές στον ενσωματωμένο χώρο, όπως ο ez430, έχουν τη δυνατότητα μέγιστης απόδοσης με τη χρήση assembly. Επειδή τα συστήματα αυτά έχουν περιορισμένες υπολογιστικές δυνατότητες, η assembly τους επιτρέπει τη μέγιστη λειτουργικότητα. Ωστόσο, όπως βελτιώνεται η τεχνολογία, ακόμα και ο πιο απλός μικροελεγκτής μπορεί να έχει σημαντικές υπολογιστικές δυνατότητες. Η Δομή ενός Προγράμματος Assembly Το πρόγραμμα assembly ξεκινά εκτέλεση στον reset interrupt. Το reset interrupt είναι το πρώτο πράγμα που γίνεται όταν παρέχεται στον επεξεργαστή ισχύς λειτουργίας. Εξορισμού, στα αρχεία στο Workbench, o reset interrupt φορτώνεται για να σταλεί η εκτέλεση του προγράμματος, στην αρχή του κώδικα. Αν το πρόγραμμα δεν επιστρέψει πίσω σε ένα προηγούμενο σημείο και να συνεχίσει επαναλήψεις, τελικά η εκτέλεση του προγράμματος θα φτάσει την τελευταία από τις έγκυρες εντολές στη μνήμη και θα προσπαθήσει να εκτελέσει τις «εντολές» στις επόμενες θέσεις μνήμης οι οποίες δεν είναι έγκυρες για το πρόγραμμα. Δεν πρέπει να επιτρέψουμε ποτέ να συμβεί κάτι τέτοιο. Ο έλεγχος της εκτέλεσης του προγράμματος ονομάζεται έλεγχος ροής και επιτυγχάνεται με τις διαδικασίας της διακλάδωσης, της μεταπήδησης, της κλήσης συναρτήσεων και των διακοπών (interrupts). Η διακλάδωση και η μεταπήδηση προκαλούν αλλαγή της επόμενης εντολής που θα εκτελεστή από αυτή που ακολουθεί με μια άλλη που είναι σε άλλο σημείο του προγράμματος. Κάνοντας διακλάδωση παραπάνω από την εντολή που βρίσκεται το πρόγραμμα μπορεί να προκληθεί ατέρμονος βρόγχος του προγράμματος. Αυτός είναι ένας βασικός βρόγχος σε ένα πρόγραμμα assembly. Οι διακλαδώσεις μπορεί να συμβούν και υπό συνθήκη. Στην αρχιτεκτονική MSP, οι υπό συνθήκη διακλαδώσεις εξαρτώνται από το bit του καταχωρητή κατάστασης (SP, status register) και αποφασίζουν αν θα εκτελεστεί η επόμενη εντολή μετά τη διακλάδωση, ή η εντολή που η διακλάδωση ικανοποιεί. Υπάρχουν πολλές αριθμητικές και λογικές πράξεις που μπορούν να αλλάξουν την τιμή του καταχωρητή κατάστασης. 7

Για να αποθηκεύσουμε τιμές με σκοπό την εκτέλεση πράξεων θα πρέπει να χρησιμοποιήσουμε τους καταχωρητές του ez430. Ο μικροελεγκτής αυτός έχει 16 καταχωρητές για τη CPU. Από αυτούς οι 12 ανώτεροι είναι γενικών λειτουργιών και έχουν 16bit ο καθένας (R4 R15). Οι 4 που βρίσκονται πιο κάτω στις διευθύνσεις είναι: Ο R0 ή Program Counter (PC). Ελέγχει την επόμενη εντολή που θα εκτελεστεί από τον πυρήνα. Γενικά, αυτός ο καταχωρητής αυξάνεται αυτόματα κατά τη διάρκεια της εκτέλεσης του προγράμματος. Μπορεί απλά να χρησιμοποιηθεί ως πηγή στις πράξεις. Ο R1 ή Stack pointer (SP). Χρησιμοποιείται για να παρακολουθεί τρόπους προηγούμενης εκτέλεσης και για την επιστροφή από διακοπές. Μπορεί να αναγνωστεί ως ένας κανονικός καταχωρητής. Ο R2, ή Status Register (SR). Μπορούμε να γράψουμε σε αυτόν για να αλλάξουμε τον τρόπο λειτουργίας του επεξεργαστή. Όταν χρησιμοποιείται για ανάγνωση λειτουργεί ως παραγωγός σταθερών τιμών. Ανάλογα με την επιλογή του κώδικα εντολής, αυτός ο καταχωρητής μπορεί να αναγνωστεί ως κανονικός καταχωρητής, 0x0000, 0x0004, ή 0x0008, ανάλογα με τα bits του A. O R3, ή Constant Generator II. Δε μπορούμε να γράψουμε σε αυτόν τον καταχωρητή. Όταν τον διαβάζουμε δίνει 0x0000, 0x0001, 0x0002 ή 0xFFFF ανάλογα με την τιμή των bits του Α. Οι υπόλοιποι καταχωρητές συμπεριφέρονται σαν να ήταν μέρος της μνήμης. Στις περισσότερες περιπτώσεις οι καταχωρητές γενικών καθηκόντων μπορούν να αναγνωστούν ή να γραφούν, αλλά να έχουμε υπόψη μας ότι αυτό επηρεάζει τη συμπεριφορά των αντίστοιχων συστημάτων. Άσκηση 1 Τι αποθηκεύεται στη «Μνήμη κώδικα» (code memory)? Άσκηση 2 Δημιουργήστε ένα καινούργιο project για assembly στον workspace. Αντικαταστήστε τον αρχικό κώδικα με τον επόμενο. Κάντε τις κατάλληλες αλλαγές για τον 430 2013. Παρατηρήστε τις διαφορές στη θέση των εντολών και των ταμπελών. Οι ταμπέλες που υποδεικνύουν τις διεργασίες που πρέπει να γίνουν, στοιχίζονται αριστερά όπως στην περίπτωση της RESET που φαίνεται στη συνέχεια. Οι εντολές είναι στοιχισμένες με το tab. Να θυμάστε να ακολουθείτε αυτή τη σύμβαση, γιατί διαφορετικά ο μεταγλωττιστής θα νομίζει οτιδήποτε είναι τέρμα αριστερά ότι είναι ταμπέλα. ; Listing 4.3: Program ledsasm.s43 in assembly language to light LEDs with a constant pattern. ; ledsasm.s43 simple program to light LEDs, absolute assembly ; Lights pattern of LEDs, sets pins to output, then loops forever ; Olimex 1121 STK board with LEDs active low on P2.3,4 ; J H Davies, 2006 05 17; IAR Kickstart version 3.41A 8

#include <msp430x11x1.h> ; Header file for this device ORG 0xF000 ; Start of 4KB flash memory Reset: ; Execution starts here mov.w #WDTPW WDTHOLD,&WDTCTL ; Stop watchdog timer mov.b #00001000b,& P2OUT ; LED2 (P2.4) on, LED1 (P2.3) off (active low!) mov.b #00011000b,& P2DIR ; Set pins with LEDs to output InfLoop: ; Loop forever... jmp InfLoop ;... doing nothing ORG 0xFFFE ; Address of MSP430 RESET Vector DW Reset ; Address to start execution END Ποια η λειτουργία της mov.w? Ποια η λειτουργία της mov.b? Ποια η λειτουργία της mov? Ποια η λειτουργία της mov.w #WDTPW WDTHOLD,&WDTCTL? Ποια η χρήση των χαρακτήρων #, & και R? 9

Ποια η λειτουργία της mov.b #00001000b,&0 x0029 ; LED2 (P2.4) on, LED1 (P2.3) off? Πώς θα μπορούσε να γραφεί ισοδύναμα με σύμβολα για τις αριθμητικές τιμές? Πως ο μεταγλωττιστής καταλαβαίνει την αντιστοιχία ανάμεσα στα σύμβολα και τις αριθμητικές τους τιμές? Ποια η λειτουργία της ORG 0xF000? Ποια είναι η διεύθυνση στον MSP430 όπου αποθηκεύεται η πρώτη εντολή που θα εκτελεστεί και πως ονομάζεται; Ποια η λειτουργία της DW Reset? Ελέγξτε τα περιεχόμενα της μνήμης Flash στο παράθυρο του Disassembly. Βεβαιωθείτε ότι τα βλέπετε ως λέξεις και όχι ως bytes/ Σημειώστε δίπλα από τα «;» τις τιμές που βλέπετε. Τι είναι οι τιμές αυτές; mov.w #WDTPW WDTHOLD,&WDTCTL ; mov.b #00001000b,& P2OUT ; mov.b #00011000b,& P2DIR ; Ποιο μειονέκτημα της assembly διαπιστώνετε στην προηγούμενη ερώτηση? Άσκηση 3 Να γράψετε εντολές που να υλοποιούν τα επόμενα: Θέστε το bit3 στην τιμή 1 στη θέση μνήμης 0xd340, ενώ ταυτόχρονα να μείνουν ανεπηρέαστα τα bits 0 2 και 4 16. Μεταπηδήστε στην οδηγία που ονομάζεται POINT αν το carry bit έχει τεθεί. 10

Ολισθήστε τον καταχωρητή R6 κατά μία θέση διατηρώντας το πρόσημο. Άσκηση 4 Γράψτε ένα πρόγραμμα σε assembly για να αναβοσβήνει SOS σε κώδικα Morse συνεχώς. Στον κώδικα Morse το SOS είναι: S =, O =, S=, όπου η κάθε τελεία (.) είναι ένα σύντομο αναβόσβησμα και κάθε παύλα ( ) είναι ένα χρονικά μεγαλύτερο αναβόσβημα του LED. Ο χρόνος για μια παύλα είναι ίσος με τον αντίστοιχο τριών τελειών. Ο χρόνος ανάμεσα σε κάθε γράμμα αντιστοιχεί στο χρόνο μιας τελείας. Ο χρόνος ανάμεσα σε διαδοχικές λέξεις αντιστοιχεί στο χρόνο πέντε τελειών. Σημείωση: Να απενεργοποιήσετε τον WDTCTL στην αρχή του προγράμματος. Χρησιμοποιήστε ως οδηγό το επόμενο πρόγραμμα και κάντε κατάλληλες τροποποιήσεις στον κώδικα του. ; morsasm2.s43 sends dots and dashes ; Software delay subroutine with down loop for 0.1s ; Bug: gives very brief flash between letters ; Message stored as string in ROM with loop in main routine ; Registers in main routine: R5 used as loop counter, ; R12 to pass delay to subroutine ; Olimex 1121STK, LED1,2 active low on P2.3,4 ; J H Davies, 2006 06 20; IAR Kickstart version 3.41A #include <msp430x11x1.h> ; Header file for this device ; Pins for LED on port 2 LED1 EQU BIT3 ; Iterations of delay loop for about 0.1s (3 cycles/iteration) DELAYLOOPS EQU 27000 ; Durations of symbols for morse code in units of 0.1s ; LETTER gives gap between letters; ENDTX terminates message DOT EQU 2 DASH EQU 6 SPACE EQU 2 LETTER EQU 0 ENDTX EQU 0xFF RSEG CSTACK ; Create stack (in RAM) RSEG CODE ; Program goes in code memory Reset: ; Execution starts here mov.w #SFE(CSTACK),SP ; Initialize stack pointer main: ; Equivalent to start of main() in C mov.w #WDTPW WDTHOLD,& WDTCTL ; Stop watchdog timer bis.b #LED1,& P2OUT ; Preload LED1 off bis.b #LED1,& P2DIR ; Set pin with LED1 to output 11

clr.w R5 ; Initialize counter to step through message jmp MessageTest ; Jump to test so it is evaluated first MessageLoop: bic.b #LED1,& P2OUT ; LED1 on mov.b Message(R5),R12 ; Load duration of delay as parameter call #DelayTenths ; Call subroutine: don't forget the # bis.b #LED1,& P2OUT ; LED1 off mov.w #SPACE,R12 ; Load duration of delay (space) call #DelayTenths ; Call subroutine inc.w R5 ; Next symbol to send MessageTest: cmp.b #ENDTX,Message(R5) ; Reached end of message? jne MessageLoop ; No: continue around loop InfLoop: ; Yes: loop forever jmp InfLoop ; around infinite, empty loop ; Subroutine to give delay of R12 *0.1s ; Parameter is passed in R12 and destroyed ; R4 is used for loop counter but is not saved and restored ; Works correctly if R12 = 0: the test is executed first as in while (){} DelayTenths: jmp LoopTest ; Start with test in case R12 = 0 OuterLoop: mov.w #DELAYLOOPS,R4 ; Initialize loop counter DelayLoop: ; [clock cycles in brackets] dec.w R4 ; Decrement loop counter [1] jnz DelayLoop ; Repeat loop if not zero [2] dec.w R12 ; Decrement number of 0.1s delays LoopTest: cmp.w #0,R12 ; Have we finished number of 0.1s delays? jnz OuterLoop ; No: go around delay loop again ret ; Yes: return to caller RSEG DATA16_C ; Segment for constant data in ROM Message: ; Message to send (dots and dashes) DB DOT,DOT,DOT,LETTER DB DASH,DASH,DASH,LETTER DB DOT,DOT,DOT,ENDTX RSEG RESET ; Segment for reset vector DW Reset ; Address to start execution END 12