παρακαλώ βοηθήστε με Timer0 pic16F877A

M

mickbristol

Guest
Γεια σας, είμαι νέος στο ΣΜΕ.Προσπαθώ να ενεργοποιήσετε LEDs στην θύρα Δ χρησιμοποιώντας το timer0 και PRESCALER να φτάσουν στο 1 δευτερόλεπτο.

Διορθώστε με εάν im λάθος.
Χρησιμοποιώ ένα 8MHz κρύσταλλο.
έτσι τον κύκλο διδασκαλίας είναι 1 / (8000000 / 4) = 500ns,
χρησιμοποιώντας PRESCALER στα 256.κύκλος μου γίνεται 500ns x 256 = 128us
Θα κάνω 235 κύκλους σχετικά με τη δοκιμή του INTCON, 2
και 235 x 2 για τις ακόλουθες GOTO
θα κάνω το LOOP 11 φορές και συν τις λίγες Additionnal θ οδηγίες θα πρέπει να έχουν
(235x2) (235) 10 = 715
Loops 715x11 = 7865 κύκλοι
7865x128us = 1,00672 δευτερόλεπτα

αλλά για την ανάπτυξη του σκάφους μου .. είναι πολύ πιο γρήγορα!Θα έλεγα 0,5 sec
μπορεί κανείς να διορθώσει όπου είναι δικό μου λάθος;

σε ευχαριστώ πάρα πολύ

εδώ είναι ο κωδικός

p = κατάλογο 16F877A
# include P16F877A.inc

__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _PWRTE_OFF & _BODEN_OFF & _WDT_OFF & _HS_OSC

org 0x0000
LOOP EQU 0x20
goto κύρια
κύριος
banksel PORTD
clrf PORTD? σαφές λιμάνι Δ

banksel TRISD? τράπεζα 1
movlw b'00000000 '? φορτίο 0000 0000
movwf TRISD? οδήγησε portD εξόδου

BCF OPTION_REG, 5? εσωτερικό ρολόι
BCF OPTION_REG, 3? prescale να TMR0

BSF OPTION_REG, 0? PRESCALER σε 1:256
BSF OPTION_REG, 1
BSF OPTION_REG, 2
L1
banksel LOOP
movlw d'11 '
movwf LOOP

L2
banksel TMR0? bank0
movlw d'20 '? φορτιστή 0001 0100
movwf TMR0? στο TMR0
BCF INTCON, 2? σαφή τη σημαία

L3 btfss INTCON, 2? Δοκιμή της σημαίας timer0
goto L3

decfsz LOOP, 1? Δεκέμβριο LOOP από 1 και παραλείψτε επόμενη instr αν LOOP = 0
goto L2

comf PORTD? συμπληρώνουν PORTD
L1 goto? go to LOOP
τέλος

 
Timer0 είναι φορτωμένο με 20 και θα μετρήσουν 235 x 128 = 30080 εμάς μας (διακοπή θα γίνονται κάθε 30,08 ms).Έτσι για να πάρετε 1-α, θα πρέπει να χρησιμοποιήσετε 1s / 30.08ms = aprox 33 φορές δεν είναι 11 όπως χρησιμοποιείται στο βρόχο.

 
δεν χρησιμοποιούν tmr0 διακόπτουν ...
απλά χρήση καθυστέρηση υπορουτίνα ..........<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Χαμόγελο" border="0" />
 
Thanks rkodaira
οπότε αν κατάλαβα, εσείς πολλαπλασιάστε το 235 μετρά από το χρονόμετρο δεν τη φροντίδα των κύκλων του Δεκέμβρη και GOTO;
Νόμιζα ότι αν χρησιμοποιείτε PRESCALER υπολογίζετε νέος χρόνος κύκλου σας, και σας παραπέμπω όλες τις οδηγίες σε αυτό το νέο κύκλο του χρόνου ...?

Ευχαριστώ xylynn πάρα πολύ, εγώ είμαι απλώς μάθηση έτσι είναι ακριβώς να πρακτική σχετικά με την timer0 αυτή τη στιγμή, αλλά είμαι ακόμα ενδιαφέρει, τι εννοείτε την υπορουτίνα καθυστέρηση;

Ευχαριστώ

 
Παράθεση:

οπότε αν κατάλαβα, εσείς πολλαπλασιάστε το 235 μετρά από το χρονόμετρο δεν τη φροντίδα των κύκλων του Δεκέμβρη και GOTO;

Νόμιζα ότι αν χρησιμοποιείτε PRESCALER υπολογίζετε νέος χρόνος κύκλου σας, και σας παραπέμπω όλες τις οδηγίες σε αυτό το νέο κύκλο του χρόνου ...
?

 
Είναι εργασίας και καταλαβαίνω

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Χαμόγελο" border="0" />

σε ευχαριστώ

ναι Ihave έχουν γίνει κάποια πρακτική με κάποια βρόχους πολύ: p

ευχαριστώ και πάλι,, θα συνεχίσω να μου μάθηση έτσι κι αλλιώς μπορείτε να δημοσιεύσετε κάποια μηνύματα αρκετά συχνά lol

Αντίο σας ευχαριστώ τόσο

 

Welcome to EDABoard.com

Sponsor

Back
Top