ΑΣΚΗΣΗ 3 Μηχανικοί ιακόπτες
Σκοπός της άσκησης Εισαγωγή δεδοµένων στο µc από το περιβάλλον µέσω SW (Switch) Είδη SW στο εµπόριο ιασύνδεση SW (κατάσταση ηλ. σήµα) Έλεγχος κατάστασης SW Το πρόβληµα των αναπηδήσεων Απόσβεση αναπηδήσεων µε 1. Τεχνικές hardware 2. Τεχνικές software
Πρόβληµα Στον ακροδέκτη PTC0 του µc είναι συνδεδεµένος ένας διακόπτης τύπου Push-Button, ενώ στον ακροδέκτη PD4 µία δίοδος led. Υποθέστε ότι ο διακόπτης PTC0 είναι η κλειδαριά της πόρτας του οδηγού ενός αυτοκινήτου και ο ακροδέκτης PD4, η έξοδος ενεργοποιεί το κεντρικό κλείδωµα του αυτοκινήτου. Να γραφεί πρόγραµµα που θα ανιχνεύει την κατάσταση του διακόπτη και κάθε φορά που ο χρήστης θα τοποθετεί το κλειδί στην κλειδαριά (διακόπτης σε κατάσταση on) θα αλλάζει κατάσταση η έξοδος PD4 (κλειδώνει ή ξεκλειδώνει το αυτοκίνητο).
Είδη διακοπτών ιακόπτες µανδάλωσης (On/Off, Dip Switch, SCR) ιακόπτες µη µανδάλωσης (Push Button, BJT) On/Off... Push Button Dip Switch 3 θέσεων
Συνδεσµολογία SW VDD Vin Pull-Up R TYP :1Κ VDD R R Vin Θετικής λογικής Pull-Down R TYP :10Κ Αρνητικής λογικής
Κύκλωµα άσκησης VDD PTC0 Internal Pull-up R MCU PTD4 R
Αρχικοποίηση καταχωρητών BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PORT A DATA REGISTER $0000 MEMORY MAP PORT B DATA REGISTER $0001 I/O REGISTER 64 BYTES $0000 $003F PORT C DATA REGISTER PORT D DATA REGISTER $0002 $0003 RAM 512 BYTES $0040 $023F PORT A DIR. REGISTER PORT B DIR. REGISTER $0004 $0005... FLASH MEMORY 32.256 BYTES... $8000 $FDFF PORT C DIR. REGISTER PORT D DIR. REGISTER PORT E DATA REGISTER UNIMPLEMENTED UNIMPLEMENTED 1 0 $0006 $0007 $0008 $0009 $000A RESET VECTOR HIGH BYTE RESET VECTOR LOW BYTE $FFFE $FFFF UNIMPLEMENTED PORT E DIR. REGISTER $000B $000C PORT A PULL UP ENABLE $000D PORT C PULL UP ENABLE PORT D PULL UP ENABLE 1 $000E $000F
Πρόγραµµα PORTC.DATA EQU $0002 PORTD.DATA EQU $0003 PORTC.DIRECTION EQU $0006 PORTD.DIRECTION EQU $0007 PORTC.PullUpEn EQU $000E ROM.START EQU $8000 RESET.VECTOR EQU $FFFE ORG ROM.START MOV #%00010000,PORTD.DIRECTION MOV #%00000001,PORTC.PullUpEn MOV #%11111110,PORTC.DIRECTION
Οι εντολές BRSET & BRCLR Εντολή Σύνταξη Παράδειγµα BRSET (BRanch if n bit SET) BRSET (BRanch if n bit CLeaR) BRSET n, καταχωρητής, Ετικέτα BRCLR n, καταχωρητής, Ετικέτα BRSET 0,PORTC.DATA,KeyNotInserted BRSET 0,PORTC.DATA,KeyInserted Αποτέλεσµα Ανήκουν στην κατηγορία των εντολών που αλλάζουν τη ροή του προγράµµατος, µεταπηδώντας σε κάποιο άλλο, αφού πρώτα επαληθευτεί η ισχύς µιας συνθήκης (το n bit του καταχωρητή = 1 ή 0 ).
Ηλογική πράξη XOR X Y XOR X Y 0 0 0 1 1 0 1 1 XOR 0 1 1 0 1 X XOR= Y X 0 XOR= Y Y Y
Εντολή Ηεντολή EOR EOR (Exclusive OR) Σύνταξη EOR αριθµός Παράδειγµα EOR #%00010000 Αποτέλεσµα Κάνει λογικό XOR στα bit του Accumulator µε τον αριθµό που ακολουθεί
8 8 Ηεντολή EOR 8 ΑΣΚΗΣΗ 3 7 7 6 5 4 3 2 1 0 X X X X X X X X 6 5 4 3 2 1 0 X X X X X X X X 7 6 5 4 3 2 1 0 0 0 0 1 0 0 0 0 RESULT Ac c.
ΗεντολήLDA Εντολή LDA (LoaD Accumulator) Σύνταξη LDA Αριθµός LDA Περιεχόµενο διεύθυνσης Παράδειγµα LDA #%11111111 LDA PORTD.DATA Αποτέλεσµα Μεταφέρει στον Accumulator έναν αριθµό ή το περιεχόµενο µιας διεύθυνσης
ΗεντολήSΤA Εντολή SΤA (STore Accumulator) Σύνταξη SΤA ιεύθυνση Παράδειγµα STA PORTD.DATA Αποτέλεσµα Αντιγράφει το περιεχόµενο του Accumulator σε µια διεύθυνση µνήµης
ΗεντολήLDX Εντολή LDX (LoaD IndeX) Σύνταξη LDX Αριθµός LDX Περιεχόµενο διεύθυνσης Παράδειγµα LDX #%11111111 LDX PORTD.DATA Αποτέλεσµα Μεταφέρει στον IndeX έναν αριθµό ή το περιεχόµενο µιας διεύθυνσης
ΗεντολήSΤX Εντολή SΤX (STore IndeX) Σύνταξη SΤX ιεύθυνση Παράδειγµα STX PORTD.DATA Αποτέλεσµα Αντιγράφει το περιεχόµενο του IndeX σε µια διεύθυνση µνήµης
Πρόγραµµα LDA PORTD.DATA EOR #%00010000 STA PORTA.DATA
Πρόγραµµα PORTC.DATA EQU $0002 PORTD.DATA EQU $0003 PORTC.DIRECTION EQU $0006 PORTD.DIRECTION EQU $0007 PORTC.PullUpEn EQU $000E ROM.START EQU $8000 RESET.VECTOR EQU $FFFE ORG ROM.START BSET 0,$001F MOV #$1F,$003C MOV #%00010000,PORTD.DIRECTION MOV #%00000001,PORTC.PullUpEn MOV #%11111110,PORTC.DIRECTION KeyNotInserted BRSET 0,PORTC.DATA,KeyNotInserted LDA PORTD.DATA EOR #%00010000 STA PORTD.DATA KeyInserted BRCLR 0,PORTC.DATA,KeyInserted JMP KeyNotInserted ΟΧΙ ΟΧΙ ΑΡΧΗ PTD4: ΕΞΟ ΟΣ PTC0: ΕΙΣΟ ΟΣ Pull-up En. ΙΑΚΟΠΤΗΣ On ΑΛΛΑΓΗ ΚΑΤΑΣΤΑΣΗΣ ΣΤΟ LED ΙΑΚΟΠΤΗΣ Off ORG FDB RESET.VECTOR ROM.START
Φαινόµενο Αναπηδήσεων V VDD VDD R Vin T V VDD VDD R Vin T
Hardware VDD VDD R1 V Απόσβεση αναπηδήσεων V = Vo(1 e RC ) t R2 Vin C T ΣΧΕΣΗ ΦΟΡΤΙΣΗΣ ΠΥΚΝΩΤΗ V VDD VDD R1 R2 Vin C T
Hardware Απόσβεση αναπηδήσεων
Απόσβεση αναπηδήσεων LoadX Dec.X Όχι Όχι Accumulator=250 IndeX=199 Μείωση κατά 1 του IndeX Index=0 Μείωση κατά 1 του Acc Acc=0 Ναι Ναι Software Delay To Debounce (50mSec)
Delay To Debounce DEBOUNCE.DELAY LDA #!250 ;2k LOAD.X LDX #!199 ;2k DECREASE.X NOP ;1k NOP ;1k DBNZX DECREASE.X ;3k DBNZA LOAD.X ;3k RTS d1 = (3 DBNZX + 1 NOP + 1 NOP ) X + 2 LDX d = (d1 + 3 DBNZA ) A + 2 LDA 250.002 k 50mSEC
ιάγραµµα ροής ΑΡΧΗ PTD4: ΕΞΟ ΟΣ PTC0: ΕΙΣΟ ΟΣ Pull-up En. ΟΧΙ ΙΑΚΟΠΤΗΣ On DELAY 50mS ΑΛΛΑΓΗ ΚΑΤΑΣΤΑΣΗΣ ΣΤΟ LED ΟΧΙ ΙΑΚΟΠΤΗΣ Off DELAY 50mS
Πρόγραµµα PORTC.DATA EQU $0002 DEBOUNCE.DELAY LDA #!250 PORTD.DATA EQU $0003 LOAD.X LDX #!199 PORTC.DIRECTION EQU $0006 DECREASE.X NOP PORTD.DIRECTION EQU $0007 NOP PORTC.PullUpEn EQU $000E DBNZX DECREASE.X ROM.START EQU $8000 DBNZA LOAD.X RESET.VECTOR EQU $FFFE RTS ORG ROM.START BSET 0,$001F ORG RESET.VECTOR MOV #$1F,$003C FDB ROM.START MOV #%00010000,PORTD.DIRECTION MOV #%00000001,PORTC.PullUpEn MOV #%11111110,PORTC.DIRECTION KeyNotInserted BRSET 0,PORTC.DATA,KeyNotInserted JSR DEBOUNCE.DELAY LDA PORTD.DATA EOR #%00010000 STA PORTD.DATA KeyInserted BRCLR 0,PORTC.DATA,KeyInserted JSR DEBOUNCE.DELAY JMP KeyNotInserted
Ανακεφαλαίωση Χειρωνακτική εισαγωγή δεδοµένων στο µc Είδη & συνδεσµολογίες διακοπτών Ενεργοποίηση εσωτερικών pull-up Έλεγχος ανοικτού / κλειστού διακόπτη από πρόγραµµα Εντολές BRSET,BRCLR,EOR,LDA,STA,LDX,STX Φαινόµενο αναπηδήσεων µηχανικών διακοπτών Εξάλειψη του φαινοµένου (hardware & software) Delay µε τους καταχωρητές της CPU
Εργασία στους Η/Υ Συγγραφή & Προσοµοίωση του προγράµµατος Προγραµµατισµός µc & έλεγχος λειτουργίας του κυκλώµατος Αφαίρεση της υπορουτίνας επαναπρογραµ- µατισµός & έλεγχος λειτουργίας του κυκλώµατος Παρατηρήσεις Μελέτη και υλοποίηση της λειτουργίας CD-ROM (Υλοποίηση µε διάγραµµα ροής)
Εργασία για το σπίτι Στους ακροδέκτες PTC0, PTC1 του µc είναι συνδεδεµένοι δύο διακόπτες τύπου Push-Button, ενώ στον ακροδέκτη PD4 µία δίοδος led. Υποθέστε ότι στη θέση του διακόπτη PTC0 είναι συνδεδεµένη η πόρτα του οδηγού ενός αυτοκινήτου και στη θέση του διακόπτη PTC1 τα φώτα του αυτοκινήτου. Όταν η πόρτα και τα φώτα του αυτοκινήτου είναι κλειστά ο µc λαµβάνει σήµα λογικού «1», ενώ όταν είναι ανοικτά ο µc λαµβάνει σήµα «0» στους αντίστοιχους ακροδέκτες. Να γραφεί πρόγραµµα που θα ελέγχει την κατάσταση των δύο εισόδων και θα ενεργοποιεί µία δίοδο led που είναι συνδεδεµένη στον ακροδέκτης PD4 όταν και οι δύο είσοδοι βρίσκονται σε λογικό «0» (πόρτα και φώτα ανοικτά). Να υλοποιηθεί το πρόγραµµα µε βάση κάποιο διάγραµµα ροής.