Home Pic in Greek Οδηγός χρήσης Pic Εξομοίωση


 

Εξομοίωση


Η εξομοίωση χρησιμεύει στο να βρίσκονται τα σφάλματα του κώδικα και να διορθώνονται πριν τον προγραμματισμό του μικροεπεξεργαστή.

Παρακάτω θα δείτε εξομοίωση βήμα - βήμα, δηλαδή ανά εντολή και εξομοίωση με σημεία διακοπής (Breakpoints), δηλαδή το PC (ο υπολογιστής σας) "τρέχει" τον κώδικα που έχετε ελέγξει γρήγορα, και σταματά στο σημείο που έχετε δηλώσει σαν breakpoint, για να κάνετε εξομοίωση βήμα - βήμα.

Εξομοίωση βήμα - βήμα 

Η εξομοίωση βήμα - βήμα είναι ο καλλίτερος τρόπος για να βρείτε και να διορθώσετε τα λάθει του κώδικα που γράψατε. Θα  μπορούσε κάποιος να σκεφτεί πως αν είναι έτοιμο το κύκλωμα μπορεί να προγραμματίζει τον PIC και να τον δοκιμάζει απευθείας. Σκεφτείτε όμως πως ο PIC με χρονισμό 4MHz εκτελεί κάθε εντολή ανά 1 μSec, με αποτέλεσμα να "κολλάει" ή να κάνει λάθει που δεν υπάρχει περίπτωση ποτέ να τα αντιληφθείτε. Συνεπώς καταλαβαίνετε ότι η εξομοίωση βήμα - βήμα σας δίνει την δυνατότητα να βλέπετε και να ελέγχετε, το τι συμβαίνει όταν εκτελείται κάθε εντολή. 

Προετοιμασία

    Ξεκινήστε το MPLAB, και ανοίξτε το Project που έχετε δημιουργήσει π.χ το Test.mcp.
    Κάντε κλικ στο Project > Make.
    Αφού γίνει η μεταγλώττιση με επιτυχία, κάντε κλικ στο View και διαλέξτε Watch, Hardware stack, Special Function Registers.
    Κάντε κλικ στο Debugger και διαλέξτε Stopwatch, τώρα τα βασικά παράθυρα που χρειάζονται για την εξομοίωση υπάρχουν στην οθόνη.

    Παρατηρήστε πώς το παράθυρο με τις εντολές του κώδικα έχει αποκτήσει ένα πράσινο βέλος στο αριστερό περιθώριο. 

    Αυτό το βέλος κάθε φορά που θα κάνετε κλικ στο πλήκτρο F7 ή στο κουμπί βήμα     (Step into) θα μετακινείται στην επόμενη εντολή που πρόκειται να εκτελεστεί.

    Εάν θέλετε να δείτε την λίστα του κώδικα που δημιουργήθηκε μετά την μεταγλώττιση (Test.lst) κάντε κλικ στα:

    File > Open > Αρχεία Τύπου: All Files (*.*) > Test.lst

     
     
     
     


    Εξομοίωση βήμα - βήμα

    (1) Μηδενισμός (Reset)

      Κάντε κλικ στα Debugger > Reset > Prossesor Reset ή πατήστε το κουμπί F6

      Μπορείτε αν θέλετε για συντομία να πατήσετε το κουμπί    (Reset), μετά από αυτή την ενέργεια ο εξομοιωτής βρίσκεται στην ίδια κατάσταση με εκείνη που βρίσκεται ο PIC μετά την εφαρμογή της τάσης τροφοδοσίας.

    Τα ψηφία (Bit) TO (Time Out) και PD (Power Down) του καταχωρητή Status έχουν την τιμή 1, είναι η αρχική κατάσταση του καταχωρητή μετά το μηδενισμό (Reset). 
    Ο καταχωρητής OPTION_REG έχει πάρει την τιμή 255
    Ο καταχωρητής TRISA έχει πάρει την τιμή 31
    Ο καταχωρητής TRISB έχει πάρει την τιμή 255
    Παρατηρείστε τις αλλαγές που έχουν γίνει στο παράθυρο Special Function Registers. (Οι αλλαγές φαίνονται με κόκκινο χρώμα)

    2) Εξομοίωση Βήμα - Πρώτο

      Κάντε κλικ στο κουμπί  .
      Το πράσινο βελάκι θα δείξει την διεύθυνση 1.
      Δείτε τους καταχωρητές που αλλάζουν.

      02h (PC) 00 > 01 Ο μετρητής προγράμματος (program counter) δείχνει την διεύθυνση 1.
      03h (STATUS)
      18 > 1C
      Μετά την εκτέλεση της εντολής  CLRF, το ψηφίο Z του STATUS γίνεται "1".

    (3) Εξομοίωση Βήμα - Δεύτερο

      Κάντε κλικ στο κουμπί  .
      Το πράσινο βελάκι θα δείξει την διεύθυνση 2.
      Δείτε τους καταχωρητές που αλλάζουν.

      02h (PC) 01 > 02 Ο μετρητής προγράμματος ( program counter) δείχνει την διεύθυνση 2.
      03h (STATUS)
      1C > 18
      Το αποτέλεσμα από την εκτέλεση της εντολής  INCF Δεν είναι 0, άρα το ψηφίο Z γίνεται "0".
      0Ch

      00 > 01
      Ο καταχωρητής 0Ch αυξάνει το περιεχόμενο του κατά 1.

    (4) Εξομοίωση Βήμα - Τρίτο

      Κάντε κλικ στο κουμπί  .
      Το πράσινο βελάκι θα δείξει την διεύθυνση 1.
      Δείτε τους καταχωρητές που αλλάζουν.

      02h (PC) 02 > 01 Μετά την εκτέλεση της εντολής GOTO, ο μετρητής προγράμματος (PC) δείχνει την διεύθυνση 1.

    (5) Εξομοίωση Βήμα - Τέταρτο

      Κάντε κλικ στο κουμπί  .
      Το πράσινο βελάκι θα δείξει την διεύθυνση 2.
      Δείτε τους καταχωρητές που αλλάζουν.

      02h (PC) 01 > 02 Ο μετρητής προγράμματος ( program counter) δείχνει την διεύθυνση 2.
      0Ch

      01 > 02
      Ο καταχωρητής 0Ch αυξάνει το περιεχόμενο του κατά 1.

    Από εδώ και στο εξής κάθε φορά που κάνετε κλικ στο κουμπί    (Step) ο μετρητής προγράμματος θα αλλάζει την διεύθυνση που δείχνει από 1 σε 2 και αντίστροφα. 
    Κάθε φορά που θα εκτελείται η εντολή INCF η οποία βρίσκεται στην διεύθυνση 1, ο καταχωρητής 0Ch θα αυξάνει το περιεχόμενο του κατά 1.

    Εξομοίωση με σήμανση διακοπής (breakpoint)

    Παρακάτω θα δείτε την διαδικασία εξομοίωσης με σημάνσεις διακοπής.
    Η εκτέλεση των εντολών του κώδικα σταματά αυτόματα στην εντολή που έχει σημανθεί με διακοπή.

    Breakpoint setting - Τρόπος ορισμού σήμανσης διακοπής 

    ( Τρόπος 1 )
    Πηγαίνετε τον δείκτη του ποντικιού σας στο σημείο που θέλετε να ορίσετε διακοπή και κάντε διπλό κλικ (π.χ στην εντολή INCF).
    Παρατηρήστε στο αριστερό γκρίζο περιθώριο ότι εμφανίζεται η σήμανση της διακοπής με ένα κεφαλαίο  Β .
    Για να αφαιρέσετε την σήμανση διακοπής κάντε στο ίδιο σημείο διπλό κλικ ξανά.

( Τρόπος 2 )
Κάντε κλικ στα: Debugger > Breakpoints ή πατήστε το κουμπί F2
Θα εμφανιστεί το ακόλουθο παράθυρο με ονομασία Breakpoints
Πληκτρολογήστε την τιμή 0x1 για να δηλώσετε διακοπή στην εντολή INCF και κάντε κλικ στο ΟΚ. 
(Πρέπει να γνωρίζετε την δεκαεξαδική διεύθυνση της εντολής που θέλετε να ορίσετε breakpoint, την οποία μπορείτε να βρείτε μέσα στο αρχείο Test.lst)

Παρατηρήστε στο αριστερό γκρίζο περιθώριο ότι εμφανίζεται η σήμανση της διακοπής με ένα κεφαλαίο  Β .
Για να αφαιρέσετε την σήμανση διακοπής κάντε στο σημείο   Β  διπλό κλικ.

Εξομοίωση με σήμανση διακοπής

(1) Μηδενισμός (Reset)

    Κλαντε κλικ στο κουμπί μηδενισμού    (Reset), μετά από αυτή την ενέργεια ο εξομοιωτής βρίσκεται στην ίδια κατάσταση με εκείνη που βρίσκετε ο PIC μετά την εφαρμογή της τάσης τροφοδοσίας.
    Το πράσινο βελάκι θα δείξει την διεύθυνση 0.
    Δείτε τους καταχωρητές που αλλάζουν.

      02h (PC) 00   
      03h (STATUS)
      18



(2) Ορισμός διακοπής  (breakpoint)

    Κάντε διπλό κλικ στην εντολή GOTO.
    Παρατηρήστε στο αριστερό γκρίζο περιθώριο ότι εμφανίζεται η σήμανση της διακοπής με ένα κεφαλαίο  Β .


(3) Διαδικασία εξομοίωσης

    κάντε κλικ στο κουμπί εκκίνησης  (Run) ή κάντε κλικ στα:  Debugger > Run ή πατήστε το κουμπί F9.
    Το πράσινο βελάκι θα δείξει την διεύθυνση 2.
    Δείτε τους καταχωρητές που αλλάζουν.

      02h (PC) 00 > 02 Ο μετρητής προγράμματος (program counter) δείχνει την διεύθυνση 2.
      0Ch

      00 > 01
      Ο καταχωρητής 0Ch αυξάνει το περιεχόμενο του κατά 1.



(4) Διαδικασία εξομοίωσης

    κάντε κλικ στο κουμπί εκκίνησης  (Run)
    Το πράσινο βελάκι θα δείξει την διεύθυνση 2.
    Δείτε τους καταχωρητές που αλλάζουν.

      0Ch

      01 > 02
      Ο καταχωρητής 0Ch αυξάνει το περιεχόμενο του κατά 1.


Κάθε φορά που κάνετε κλικ στο κουμπί εκκίνησης  (Run) το περιεχόμενο του καταχωρητή 0Ch αυξάνει κατά 1.

(5) Τερματισμός εξομοίωσης

    Για να τερματίσετε την εξομοίωση πατήστε το κουμπί  (Halt the processor) ή κάντε κλικ στα: Debug > Halt ή πατήστε το κουμπί F5.