ΑΣΚΗΣΗ Συγγραφή Προγραµµάτων
Σκοπός της άσκησης Ανάπτυξη κώδικα σε Assembly Ανάπτυξη κώδικα για τον µc Μ68HC98GP32 Κανόνες ορθής ανάπτυξης προγράµµατος µέσα από ένα απλό πρόγραµµα Προσοµοίωση του κώδικα µέσω του περιβάλλοντος WINIDE Εκσφαλµάτωση (Debugging) και επαλήθευση της ορθής λειτουργίας του κώδικα
Πρόβληµα Να γραφεί πρόγραµµα που θα διαβάζει δεδοµένα από τη θύρα Α του µc και θα τα µεταφέρει στη θύρα B
Θύρες - Ακροδέκτες µc 5 Θύρες Α, Β, C, D, E 29 Ακροδέκτες Αµφίδροµοι PTC PTC PTC2 PTC3 PTC4 PTE PTE PTD PTD PTD2 PTD3 PTD4 PTD5 PTA PTA PTA2 PTA3 PTA4 PTA5 PTA6 PTA7 PTB PTB PTB2 PTB3 PTB4 PTB5 PTB6 PTB7
Αρχικοποίηση θυρών Θύρα Α είσοδος Θύρα Β έξοδος PTB PTB DDRB DDRB DDRA DDRA PTA PTA Καταχωρητές κατεύθυνσης PTB2 PTB3 PTB4 DDRB2 DDRB3 DDRB4 DDRA2 DDRA3 DDRA4 PTA2 PTA3 PTA4 (DDRx) PTB5 DDRB5 DDRA5 PTA5 είσοδος έξοδος PTB6 PTB7 DDRB6 DDRA6 DDRB7 DDRA7 PTA6 PTA7
Προσπέλαση θυρών Καταχωρητές δεδοµένων (DRx) PTB= PTB= PTB2= PTB3= PTB4= PTB5= PTB6= PTB7= DRB DRB DRB2 DRB3 DRB4 DRB5 DRB6 DRB7 DDRB DDRB DDRB2 DDRB3 DDRB4 DDRB5 DDRB6 DDRB7 DDRA DDRA DDRA2 DDRA3 DDRA4 DDRA5 DDRA6 DDRA7 DRA DRA DRA2 DRA3 DRA4 DRA5 DRA6 DRA7 PTA PTA PTA2 PTA3 PTA4 PTA5 PTA6 PTA7
Χάρτης Μνήµης BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT BIT PORT A DATA REGISTER $ Μνήµη προγράµµατος PORT B DATA REGISTER PORT C DATA REGISTER PORT D DATA REGISTER PORT A DIR REGISTER PORT B DIR REGISTER PORT C DIR REGISTER PORT D DIR REGISTER PORT E DATA REGISTER UNIMPLEMENTED UNIMPLEMENTED UNIMPLEMENTED PORT E DIR REGISTER PORT A PULL UP ENABLE PORT C PULL UP ENABLE PORT D PULL UP ENABLE UNIMPLEMENTED $ $2 $3 $4 $5 $6 $7 $8 $9 $A $B $C $D $E $F
Ηεντολή MOV Εντολή MOV (MOVe) Σύνταξη MOV (M) Source,(M) Destination Παράδειγµα MOV #$,$4 MOV $,$ Αποτέλεσµα M (M) Source (M) Destination καθαρός αριθµός ή θέση µνήµης
Πρόγραµµα MOV #%,$4 ;Θύρα Α είσοδος MOV #%,$5 ;Θύρα Β έξοδος MOV $,$ ;Θύρα Α Θύρα Β Σύµβολα # Ακολουθεί καθαρός αριθµός Πρόθεµα αριθµού % υαδικό σύστηµα $ εκαεξαδικό σύστηµα! εκαδικό σύστηµα ASCII
Μετάφραση σε Γλώσσα Μηχανής Γλώσσα assembly Γλώσσα µηχανής x6ε MOV #%,$4 x x4 x6ε MOV #%,$5 xff x5 x4ε MOV $,$ x x xdd εκαεξαδική απεικόνιση αριθµού Μεταφραστής Assembler
Η ψευδοεντολή ORG Ψευδοεντολή ORG (ORiGinate) Σύνταξη ORG ADRRESS Παράδειγµα ORG $8 Αποτέλεσµα Επιλογή της διεύθυνσης µνήµης στην οποία θα γραφεί η επόµενη εντολή
Πρόγραµµα ORG $8 ;Αρχή Προγράµµατος MOV #%,$4 ;Θύρα Α είσοδος MOV #%,$5 ;Θύρα Β έξοδος MOV $,$ ;Θύρα Α Θύρα Β
Αποθήκευση στη Μνήµη Προγράµµατος ιευθύνσεις Μνήµ ης Γλώσσα µ ηχανής Γλώσσα assembly $8 6Ε $8 MOV #%,$4 $82 4 $83 6Ε $84 FF MOV #%,$5 $85 5 $86 4Ε $87 MOV $,$ $88 $89 XX XX $8A XX XX
Χάρτης Μνήµης Αποθήκευση στη Μνήµη Προγράµµατος ORG $8 MOV # %,$4 MOV # %,$5 MOV $,$ I/O REGISTER 64 BYTES RAM 52 BYTES x6e x x4 x6e xff x5 x4e x x XX XX XX XX XX RESET VECTOR HIGH BYTE RESET VECTOR LOW BYTE $ $3F $4 $23F $8 $8 $82 $83 $84 $85 $86 $87 $88 $89 $8A $8B $8C $FDFF
Η εντολή JMP Εντολή JMP (JuMP) Σύνταξη JMP ADRRESS Παράδειγµα JMP $86 JMP LOOP Αποτέλεσµα Αλλαγή ροής προγράµµατος
Πρόγραµµα ORG $8 ;Έναρξη προγράµµατος MOV #%,$4 ;Θύρα Α είσοδος MOV #%,$5 ;Θύρα Β έξοδος MOV $,$ ;Θύρα Α Θύρα Β JMP $86
Αποθήκευση στη Μνήµη Προγράµµατος ιευθύνσεις Γλώ σσα Γλώ σσα assem bly Μ ν ή µ ης µ ηχανής $8 6Ε $8 M OV #%,$4 $82 4 $83 6Ε $84 FF M OV #%,$5 $85 5 $86 4Ε $87 M OV $,$ $88 $89 CC $8A 8 JM P $86 $8B 6 $8C XX XX $8D XX XX
Χάρτης Μνήµης ORG $8 Αποθήκευση στη Μνήµη Προγράµµατος MOV # %,$4 MOV # %,$5 MOV $,$ JMP $86 I/O REGISTER 64 BYTES RAM 52 BYTES x6e x x4 x6e xff x5 x4e x x xcc x8 x6 XX XX RESET VECTOR HIGH BYTE RESET VECTOR LOW BYTE $ $3F $4 $23F $8 $8 $82 $83 $84 $85 $86 $87 $88 $89 $8A $8B $8C $FDFF
Πρόγραµµα ORG $8 MOV #%,$4 ;Θύρα Α είσοδος MOV #%,$5 ;Θύρα Β έξοδος LOOP MOV $,$ ;Θύρα Α Θύρα Β JMP LOOP
ιάνυσµα Εκκίνησης MEMORY MAP ORG $8 MOV #%,$4 MOV #%,$5 LOOP MOV $,$ JMP LOOP ιάνυσµα εκκίνησης I/O REGISTER 64 BYTES RAM 52 BYTES FLASH MEMORY 32256 BYTES RESET VECTOR HIGH BYTE= 8 RESET VECTOR LOW BYTE= $ $3F $4 $23F $8 $FDFF $FFFE $FFFF
Η ψευδοεντολή FCB Ψευδοεντολή FCB (Field Constant Byte) Σύνταξη FCB 8 BIT ΑΡΙΘΜΟΣ Παράδειγµα FCB $8 FCB $ ή FCB $8,$ Αποτέλεσµα Αποθήκευση ενός αριθµού σε µία διεύθυνση µνήµης
Πρόγραµµα ORG $8 MOV #%,$4 MOV #%,$5 LOOP MOV $,$ JMP ORG LOOP $FFFE FCB $8 FCB $
ORG $8 ιάνυσµα Εκκίνησης MOV # %,$4 MOV # %,$5 LOOP MOV $,$ JMP LOOP ORG $FFFE FCB $8 FCB $ I/O REGISTER 64 BYTES RAM 52 BYTES x6e x x4 x6e xff x5 x4e x x xcc x8 x6 x8 x $ $3F $4 $23F $8 $8 $82 $83 $84 $85 $86 $87 $88 $89 $8A $8B $8C $FDFF $FFFE $FFFF ιάνυσµα Εκκίνησης
Η ψευδοεντολή FDB Ψευδοεντολή FDB (Field Double Byte) Σύνταξη FDB 6 BIT ΑΡΙΘΜΟΣ Παράδειγµα FDB $8 Αποτέλεσµα Αποθήκευση ενός 6 - bit αριθµού σε δύο συνεχόµενες διευθύνσεις µνήµης
Πρόγραµµα ORG $8 MOV #%,$4 MOV #%,$5 LOOP MOV $,$ JMP ORG LOOP $FFFE FDB $8
Η ψευδοεντολή EQU Ψευδοεντολή EQU (EQUate) Σύνταξη ONOMA EQU ΙΕΥΘΥΝΣΗ Παράδειγµα PortAData EQU $ Αποτέλεσµα ηλώσεις σταθερών
PORTADATA EQU $ PORTBDATA EQU $ PORTADIRECTION EQU $4 PORTBDIRECTION EQU $5 ORG $8 Πρόγραµµα ηλώσεις σταθερών Έναρξη κώδικα στη µνήµη προγράµµατος Ορισµός εισόδων & εξόδων MOV #$,PORTADIRECTION ;A είσοδος MOV #$FF,PORTBDIRECTION ;Β έξοδος LOOP MOV PORTADATA,PORTBDATA JMP LOOP ORG $FFFE FDB $8 ιάνυσµα εκκίνησης Κυρίως πρόγραµµα
Κανόνες Σύνταξης Στήλη ετικετών Στήλη Εντολών PORTADATA EQU $ PORTBDATA EQU $ PORTADIRECTION EQU $4 PORTBDIRECTION EQU $5 ORG $8 Στήλη Ορίσµατος Στήλη Σχόλιων MOV #$,PORTADIRECTION ;A είσοδος MOV #$FF,PORTBDIRECTION ;Β εξοδος LOOP MOV PORTADATA,PORTBDATA JMP LOOP ORG $FFFE FDB $8
ιάγραµµα ροής Αρχή Ορισµός Εισόδων & Εξόδων Ανάγνωση από τη θύρα Α έξοδο στη Β PORTADATA EQU $ PORTBDATA EQU $ PORTADIRECTION EQU $4 PORTBDIRECTION EQU $5 ORG $8 MOV MOV #$,PORTADIRECTION #$FF,PORTBDIRECTION LOOP MOV PORTADATA,PORTBDATA JMP LOOP ORG $FFFE FDB $8
Ανακεφαλαίωση Προσπέλαση θυρών (καταχωρητές κατεύθυνσης & δεδοµένων) Εντολές MOV, JMP Ψευδοεντολές ORG, FCB, FDB, EQU (assembler) Αποθήκευση κώδικα στην µνήµη προγράµµατος ιάνυσµα εκκίνησης Εκτέλεση κώδικα από τον µc Κανόνες σύνταξης προγραµµάτων
Εργασία στους Η/Υ Συγγραφή, µετάφραση & προσοµοίωση του προγράµµατος Άσκηση : Ανάγνωση από τη θύρα Β έξοδο στη θύρα Α (προσοµοίωση) Άσκηση 2: Ανάγνωση δεδοµένων από τη θύρα Β έξοδο στη θύρα Α και ανάγνωση από τη C & έξοδο στη D(προσοµοίωση) Άσκηση 3: Ανάγνωση δεδοµένων από τη θύρα B έξοδο στη θύρα Α µία φορά (προσοµοίωση)
Εργασία για το σπίτι Να γίνουν οι απαραίτητες αλλαγές στον κώδικα του προγράµµατος που αναπτύχθηκε στο µάθηµα ώστε να γίνεται ανάγνωση δεδοµένων από τη θύρα Β και έξοδος δεδοµένων στη θύρα A µία φορά, και διαρκώς ανάγνωση δεδοµένων από τη θύρα C και έξοδος στη θύρα D