![]() |
![]() |
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Home
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
;********************************************************************** ; * ; Πινακίδα μηνυμάτων Ι * ; * ; Author : Seiichi Inoue Ελληνική απόδοση : Παναγιώτης Πανταζόπουλος * ;********************************************************************** Ο
τίτλος και τα σχόλια του προγράμματος πρέπει υποχρεωτικά να έχουν μπροστά
το σύμβολο ( ; ).
list p=pic16f84a
include p16f84a.inc
Ο τύπος του μικροεπεξεργαστή δηλώνεται με την
ψευδοεντολή List. Τα include αρχεία συνήθως βρίσκονται στον
κατάλογο: ; P16F84A.INC Standard Header File, Version 2.00'(Διόρθωση) TRISA EQU H'0085' -> H'0005' TRISB EQU H'0086' -> H'0006' Μπορείτε επίσης να χρησιμοποιήσετε την
ψευδοεντολή ERRORLEVEL για να απενεργοποιήσετε την εμφάνιση
του μηνύματος. Με το Configuration
Word
ενημερώνεται
ο
Assembler για τις
ρυθμίσεις των ‘σημαιών’ διαμόρφωσης του μικροεπεξεργαστή όπως, αν θα
χρονίζει με κρύσταλλο, αν θα ενεργοποιήσουμε το Watchdog
timer, αν θα
προστατεύσει το πρόγραμμα από αντιγραφή κ.λ.π . __config _hs_osc & _wdt_off & _pwrte_on & _cp_off Το Configuration Word μπορείτε να το δηλώσετε μέσα από το λογισμικό της συσκευής προγραμματισμού, ή να δηλωθεί αυτόματα χρησιμοποιώντας την ψευδοεντολή CONFIG. Παρατηρήστε πώς υπάρχουν δύο underscore (Κάτω παύλες),
πριν από την ψευδοεντολή. _CP_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _WDT_OFF EQU H'3FFB' _HS_OSC EQU H'3FFE' Επειδή οι τιμές των δηλώσεων προστίθενται, η τελική
τιμή του Configuration Word θα είναι όπως παρακάτω:
Την ψευδοεντολή CONFIG μπορείτε να την γράψετε όπως παρακάτω: __config h'3ff2' ή __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC Δείτε στον πίνακα που ακολουθεί αναλυτικά τις ρυθμίσεις
για το συγκεκριμένο Configuration Word.
;**************** Label Definition ********************
;************************ ;* Time adjust * ;************************ ;Σε αυτό το σημείο αντιστοιχίζετε η ταχύτητα σάρωσης των Led με την τιμή 0ch (12). Σάρωση ανά 26msec. tm_adj equ 0c ;Time adjust(26msec x 12) ;************************ ;* EEPROM data size * ;************************ ;Το e_size αντιστοιχίζεται με την τιμή 32, δηλαδή το μέγεθος των δεδομένων θα είναι ίσο με 32 ψηφιολέξεις (Bytes). e_size equ d'32' ;EEPROM data size
;*************** EEPROM Data Definition ***************
org h'2100'
de b'11111111'
;**************** Program Start ***********************
;**************** Initial Process *********************
;************** Screen Load Process *******************
;************ Begin Interruption Process **************
;************ END of Interruption Process ************** Μόλις ολοκληρωθεί η ρουτίνα διακοπής (interruption), ο
μετρητής προγράμματος επιστρέφει και εκτελεί τον κώδικα από το σημείο
που είχε σταματήσει όταν συνέβη η διακοπή. Επειδή το περιεχόμενο του STATUS αλλάζει εάν επαναφέρετε
το W με την εντολή MOVF, η επαναφορά πρέπει να γίνει με την χρήση
της εντολής SWAPF, έτσι το περιεχόμενο που μόλις πριν επαναφέρθηκε στον
STATUS παραμένει αναλλοίωτο. Παρατηρήστε πώς για την επαναφορά του W η
εντολή SWAPF χρησιμοποιείται δύο φορές.
;*********** Time-out interruption Process ************ Ο μέγιστος χρόνος που μπορεί να μετρηθεί από τον χρονομετρητή του PIC, ακόμα και με την χρήση προδιαιρέτη (Prescaler), είναι περίπου 26mSec (milliseconds), με κύκλωμα χρονισμού 10-MHz. Στη διάρκεια αυτού του χρόνου το μήνυμα ολισθαίνει (κυλάει) επάνω στην οθόνη. Εάν υποτεθεί πως χρησιμοποιούμε τα 26 mSec, τότε η ταχύτητα ολίσθησης του μηνύματος θα είναι, 16 κολώνες x 26mSec = 416mSec, η οποία είναι υπερβολικά γρήγορη (Θα μοιάζει σαν να ανάβουν όλα τα Led ταυτόχρονα). Στο παράδειγμα μας μετρούνται οι φορές που υπερχειλίζει (Time-out) ο χρονομετρητής (TMR0) και πολλαπλασιάζεται με τα 26mSec. Οι φορές που χρειάζεται να υπερχειλίσει ο χρονομετρητής (TMR0) μπορεί να ρυθμιστεί αλλάζοντας τιμή στην ετικέτα : tm_adj. Εάν η tm_adj έχει την τιμή 6 τότε το μήνυμα για να κυλήσει επάνω στην οθόνη θα κάνει χρόνο ίσο με 16 κολώνες x 26mSec x 6 interrupt time-outs= 2,496mSec, δηλαδή περίπου 2,5 δευτερόλεπτα. Το ψηφίο T0IF του καταχωρητή INTCON γίνεται '1'
(παράγεται interrupt) κάθε φορά που υπερχειλίζει ο χρονομετρητής.
Προσέξτε, πως εάν δεν μηδενίσετε το ψηφίο T0IF εσείς μέσα από το
πρόγραμμα, την επόμενη φορά που θα υπερχειλίσει ο χρονομετρητής
δεν θα δημιουργηθεί interrupt. Για χρονισμό 10-MHz, ο κύκλος μηχανής είναι 0,4μSec, εάν
δηλωθεί τιμή προδιαιρέτη (prescaler) ίση με 256 ο μέγιστος χρόνος για
μια υπερχείλιση θα είναι 256 μετρήσεις x 0.4 κύκλος μηχανής = 102.4
µsec. Για να μην μπερδεύεστε με πράξεις και κάνετε λάθος
μπορείτε να χρησιμοποιήσετε το ΔΩΡΕΑΝ
προγραμματάκι PIC
TIMER που έχω φτιάξει. Aπλά εισάγετε τη συχνότητα του κυκλώματος
χρονισμού (π.χ κρυστάλλου), και τον επιθυμητό χρόνο, πατήστε το κουμπί
υπολογισμός και θα σας δείξει αμέσως την τιμή εκκίνησης του TMR0, την
τιμή του προδιαιρέτη (prescaler), και των καταχωρητών πολλαπλασιασμού
εάν χρειάζονται.
;************ Screen data shift Process *************** Σε κάθε υπερχείλιση του χρονομετρητή δημιουργείται μία
διακοπή προγράμματος (Interrupt time-out), και γίνεται μία ολίσθηση του
μηνύματος της οθόνης, από δεξιά προς αριστερά.
;************** New data write Process **************** Μετά τις 15 ολισθήσεις έχει ολοκληρωθεί η απεικόνιση του μηνύματος. Το πρόγραμμα διαβάζει πάλι δεδομένα από την μνήμη EEPROM και ξεκινά την εμφάνιση του μηνύματος από την πρώτη δεξιά κολώνα ολισθαίνοντας προς την επόμενη αριστερά.
;********************************************************
; END of signboard control processing
;********************************************************
end
Στο τέλος του κώδικα πάντα πρέπει να υπάρχει η ψευδοεντολή END, προσέξτε εάν λείπει δεν θα γίνει η μεταγλώττιση.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Projects-Lab.com | Circuits-Lab.com | Elektrotekno.com | Free Schematics Search Engine | Electronic Kits | Mobile Phones |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||