Interrupt-Driven keypress για 8051

Q

qbcs

Guest
Hi All,

Έχω αναπτύξει ένα 8051 με βάση ελεγκτή.Ο ελεγκτής έχει μια σειρά από περιφερειακά.Ένας από αυτούς είναι ένα σύνολο 7 κλειδιά.Μετά το πάτημα ενός πλήκτρου, ορισμένες λειτουργία (ες) θα πρέπει να εκτελούνται.Η ρουτίνα πάτημα των πλήκτρων ελπίζεται να διακόψει με γνώμονα όχι πρότυπο σάρωση κλειδί.Όταν έχω προσπαθήσει να κάνει χρήση των διαθέσιμων ρουτίνες, όπως KeyRead_Int.asm από τον J. Flanagan (http://www.8052.com/codelib/KeyRead_Int.asm) και Buttons.asm από Dave Fletcher (http:// www.8052.com/codelib/buttons.asm), έχω αποτύχει να συντονίσει το κύριο πρόγραμμα με τη διακοπή ρουτίνας υπηρεσία.Όταν προσπάθησα να δοκιμάσετε το πρόγραμμά μου με προσομοιωτή 8051, όλα φαίνονται καλά.Όταν το υλικό χρησιμοποιείται, δεν είναι όλα τα πατήματα πλήκτρων μπορεί να αναγνωριστεί.Οι περισσότερες από διαδοχικές πάτημα αγνοήθηκαν.Για παράδειγμα, πιέζοντας προς τα κάτω για πρώτη φορά δεν έχει κανένα πρόβλημα, αλλά πατώντας το ξανά αποδόσεις δεν απαντά.
Θα έχετε την καλοσύνη προσπαθείτε να ρίξετε μια ματιά στα προγράμματα δοκιμής μου, χρησιμοποιώντας την παραπάνω ρουτίνες, και να βοηθήσει να λυθεί το πρόβλημα να σας ευχαριστήσω εκ των προτέρων.

Ευχαριστώ
Λυπούμαστε, αλλά θα πρέπει να συνδεθείτε για να δείτε το συνημμένο

 
Μπορείτε να προσθέσετε το πλήρες υλικό σχηματικό;

 
Ευχαριστώ για την προσοχή σας.Θα ήταν χαρά μου να στείλει το σχετικό διάγραμμα.

Ευχαριστώ και πάλι
Λυπούμαστε, αλλά θα πρέπει να συνδεθείτε για να δείτε το συνημμένο

 
Απαλλάξει από το επιπλέον υλικό και να διαβάσετε τα κλειδιά από ένα χρονόμετρο διακοπή.Αυτό θα σας δώσει μια debounce καθυστέρηση και την απλοποίηση κύκλωμα σας.1ms θα είναι η κατάλληλη στιγμή.

 
Hi Davidgrm,
Ευχαριστώ για την παρατήρησή σας.Τα κλειδιά θα πρέπει να χρησιμοποιείται σπάνια.Αυτά είναι σχεδιασμένα για να χρησιμοποιούνται για την αρχική ρύθμιση και τον έλεγχο, εφόσον απαιτείται, για μεγάλα διαστήματα.Ως εκ τούτου, δεν θα ήταν φρόνιμο να τις χρησιμοποιήσουν για το χρονόμετρο διακοπή.
Ευχαριστώ και πάλι.

 
Είναι μια κακή ιδέα να χρησιμοποιήσετε ένα επίπεδο-ευαίσθητο διακόπτω, αλλά αυτό δεν είναι το κύριο πρόβλημα.

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

JWPS.Γιατί δεν έρχεστε να το 8052.com φόρουμ για να συζητήσει το θέμα με μια ομάδα ατόμων που διατίθενται στο 8052;

 
Νομίζω ότι τα προβλήματα οφείλονται στο υλικό.
Λιμάνι P0, καρφίτσες 32 με 39, χρειάζονται pull-up αντιστάσεις (10k ή λιγότερο).
Αντίσταση RX 100k και διόδους CE1 ..CE7 πρέπει να εξαλειφθούν (RX 100k αντικαταστήσει με ένα σύντομο).Επιπλέον, θα πρέπει να αντικαταστήσει τα τσιπ 7430, 74LS04 και 74LS138 με χαμηλότερη κατανάλωση chips.

 
Λιμάνι P0 έχει pull-up αντιστάσεις των 10k.Αντίσταση RX και διόδους CR1 να CR7 δεν χρησιμοποιούνται σήμερα.Ωστόσο, αυτές θα μπορούσαν να εξαλειφθούν.Δυστυχώς, το διάγραμμα δεν αντικατοπτρίζει ασήμαντες λεπτομέρειες.
Χαμηλή κατανάλωση ισχύος τσιπ θα χρησιμοποιηθεί για 7430, 74LS04 και 74LS138.
Edge ευαίσθητες διακοπή ορίζεται επίσης.
Το κύριο πρόβλημα είναι, με απλά λόγια, στην ISR.Το ΔΑΜ προορίζεται να πάρει πατημένο και να επιστρέψει το αντίστοιχο bit στο κύριο πρόγραμμα.Debounce και πιέζοντας για μεγάλο χρονικό διάστημα θα πρέπει να αποφεύγεται και / ή να επιλυθούν από τη ρουτίνα.Η χρησιμοποιούμενη υπορουτίνες θα μπορούσε να βρεθεί εύκολα σε μία από τις σημαντικές περιοχές του 8051 (www.8052.com).Εξακολουθώ να ελπίζω ότι θα μπορούσε κανείς να πάει κατευθείαν στην ISR, για να ελέγξετε τι θα μπορούσε να λείπει εκεί, ή τι θα μπορούσε να λείπει το κύριο κωδικό μου να κάνουν χρήση της ρουτίνας.Μια εναλλακτική ISR που θα κάνει την εργασία θα μπορούσε να γίνει δεκτή.
Ευχαριστώ.

 
qbcs έγραψε:

Edge ευαίσθητες διακοπή ορίζεται επίσης.
 
Γεια σου,
WEK, αυτός θα είναι σε θέση να επιστρέψει στο κύριο πρόγραμμα του μόνο αφού είναι το κουμπί απελευθερώνεται λόγω του επιπέδου αισθητήρια.Επίσης θεωρώ ότι η αρχικές τιμές των μητρώων αποθήκευσης δεν ορίζονται ως 0X0ff.Θα προτιμούσα μάλλον ένα χρονόμετρο που βασίζεται κλειδί σάρωσης, ίδιο χρονόμετρο διακόπτουν που χρησιμοποιούνται για άλλες διεργασίες, συνδέστε τα LED με τον ίδιο λιμένα ως διακόπτες, χρησιμοποιήστε ένα 4bit διεπαφή LCD και να θέσουν εκτός όλων των άλλων περιφερειακών ICs εκτός από το MAX232 και ADC (Just a δυνατά σκέψης.).

Χαιρετισμοί,
Laktronics

 
Γεια σου,
WEK, ευχαριστώ για τις πολύτιμες παρατηρήσεις σας.

.

Έχω αναφέρει ότι: "Edge ευαίσθητο διακόπτουν ορίζεται επίσης« στην ενημερωμένη έκδοση του κώδικα μου.

Kindly, ανακοίνωση και πάλι ότι έχω αναφέρει πολλές φορές ότι η ISR λαμβάνεται από τους πόρους του 8052.com!Εξακολουθώ να ελπίζω ότι θα μπορούσε κανείς να ελέγξετε και πάλι ότι η τακτική που θα μπορούσε να βρεθεί εκεί.Θα προσπαθήσω να ενταχθούν 8052 φόρουμ.Ευχαριστώ και πάλι.
LAKTRONICS, ευχαριστώ για τις παρατηρήσεις σας.Ελπίζω ότι θα μπορούσαμε να συζητήσουμε το θέμα των μητρώων αποθήκευσης.Έχω παρατηρήσει δεν αλλάξει σε αυτό το θέμα.
Timer κλειδί με βάση τη σάρωση δεν θα πρέπει να προτιμάται λόγω του γεγονότος ότι τα κλειδιά θα πρέπει να χρησιμοποιείται μόνο για δύο περιπτώσεις: (1) για να ρυθμίσετε την αρχική εγκατάσταση των παραμέτρων και (2) να αναθεωρήσει την τρέχουσα κατάσταση του συστήματος.Οι δύο περιπτώσεις δεν θα μπορούσε να χρησιμοποιηθεί για μεγάλο χρονικό διάστημα.Αυτός είναι ο κύριος λόγος πίσω από αυτή τη χρήση ρουτίνας με την εξωτερική διακοπή.Θα προσπαθήσω να λάβει υπόψη τις προτάσεις σας.Ευχαριστώ και πάλι.

 
qbcs έγραψε:

.
Έχω αναφέρει ότι: "Edge ευαίσθητο διακόπτουν ορίζεται επίσης« στην ενημερωμένη έκδοση του κώδικα μου.

 

Welcome to EDABoard.com

Sponsor

Back
Top