PDA

Επιστροφή στο Forum : προγραμματιστης , κυκλωμα και κωδικας (AVR)



ki_ha1984
20-09-06, 15:05
για σε ολουσ ειμαι αρχαριως και λεω να ξεκινησω με AVR

σχεδιασα ενα προγραμματιστι ενα κυκλωμα και εγραψα των κωδιακα για 8 LED
αλλα δεν ξερω αν θα λειτουργισουν μηπωσ ξερει κανεισ και μπορει να τα ελεξει
αν ειναι σωτα?
Απλα στων κωδικα δεν μπορω να βαλω χρονοκαθιστεριση πωσ γραφεται σε assembly η χρονοκαθιστεριση?
θελει υπορουτινα?

Επιστήμων
20-09-06, 15:42
Σίγουρα θέλεις χρονοκαθυστέρηση .Δές παρακάτω σου δίνω μια εκδοχή
σε assembly.



delay : ldi helper,255
out_loop : ldi helper1,255
in_loop : dec helper1
brne in_loop
dec helper
brne out_loop

ret &#40;<-- το "ret" σημαίνει επιστροφή,στο κυρίως πρόγραμμα, απο υπορουτίνα &#41;
Δηλαδή το "ret" θα μπέι αν καλείς τη "delay" με 'rcall delay'.

Αν νομίζεις ότι κάτι τέτοιο είναι πολύ αργό μπορείς να παίξεις με τις τιμές (255).
Αν πάλι νομίζεις ότι είναι πολύ γρήγορο :shock: μπορείς να παρεμβάλεις ακόμα ένα loop
ή να βάλεις μια υπορουτίνα που θα καλεί την υπορουτίνα "delay" πολλές φορές.

Η καθυστέρηση αυτή να ξέρεις ότι εξαρτάται απο τη συχνότητα ρολογιού του μικροελεγκτή.

ki_ha1984
21-09-06, 13:50
Ευχαριστώ Επιστήμων αλλα δεν θα επρεπε να κανεις μια συγκριση εκει κατω


delay &#58; ldi helper,255
out_loop &#58; ldi helper1,255
in_loop &#58; dec helper1
CPI HELPER1,0 <------------
brne in_loop
dec helper
CPI HELPER,0 <------------
brne out_loop
ret

οσο για τα υπολοιπα πώς σου φανηκαν (προγραμματιστης,κυκλωμα με led)

ki_ha1984
21-09-06, 14:14
οταν ετρεξα των κωδια αυτο


.include"m8515def.inc"
.org $000
rjmp RESET

RESET &#58; ldi r16,low&#40;RAMEND&#41;
out SPL,r16
ldi r16,high&#40;RAMEND&#41;
out SPH,r16

ldi r16,$ff
out DDRB,r16

ldi r23,0
loop &#58; out PORTB,r23
rcall delay
inc r23
rjmp loop

delay &#58; ldi helper,255 <==== ενα εδω

out_loop &#58; ldi helper1,255 <==== ενα εδω

in_loop &#58; dec helper1 <==== ενα εδω
brne in_loop

dec helper <==== ενα εδω
brne out_loop
ret



μου εβγαλε 4 λαθη που λενε
illegal argument of type
γιατη το κανει αυτο δε το καταλαβα?

Επιστήμων
21-09-06, 15:56
Θα πρέπει να δηλώσεις στην αρχή-αρχή του κώδικα σου τις μεταβλητές :helper,helper1.
Δηλαδή γράφεις , πριν απο όλα :


.def helper=r16
.def helper1=r17

και είσαι έτοιμος ! (Προσοχή ! Να βάλεις και την τελεία )

Όσο για το αν χρειάζεται σύγκριση , σωστή η ερώτηση σου.
Είχα και εγώ κάποτε την ίδια απορία . Αλλά ... η εντολή 'brne' ή οποιαδήποτε εντολή
του στύλ 'br**' ελέγχει την προηγούμενη πράξη που εκτελέστηκε στο πρόγραμμα
και κάνει τη σύγκριση μόνη της με το μηδέν.

Όσο για το κύκλωμα σου δυστυχώς δεν μπόρεσα να το ανοίξω οπότε δεν μπορώ να σου πω
τη γνώμη μου.

Αυτα και καλή συνέχεια στον μαγικό κόσμο των μικροελεγκτών ! :D

Υ.Γ. : Για οποιαδήποτε ερώτηση εδώ είμαστε.

ki_ha1984
21-09-06, 20:47
σε ευχαρηστω παρα πολλυ θα το δοκιμασω αμεσωσ τωρα θ ξανα ανεβασψ τα αλλα

ki_ha1984
21-09-06, 20:48
και ο προγραμματιστης

gsmaster
22-09-06, 18:45
Offtopic
Καλό είναι όταν βάζετε κώδικα να χρησιμοποιείτε τα tags


&#91;code&#93;
κώδικας
&#91;/code&#93;

για να μην χάνει την μορφοποίηση ο κωδικας και να είναι πιο ευανάγνωστος. ΕΠίσης πρέπει να έχετε ξε-τικάρει την επιλογή "Απενεργοποίηση BBCode σ' αυτή τη δημοσίευση" απο το προφίλ σας.