LCD_LINE0 equ 0x000 ; Διεύθυνση της γραμμής 0 του LCD LCD_LINE1 equ 0x040 ; Διεύθυνση της γραμμής 1 του LCD

Σχετικά έγγραφα
; Έλεγχος σημαίας λήψης (RCIF=0: άδειος buffer)

Εντολές PIC16F rrf <όνομα καταχωρητή>,a a=f ή a=w H εντολή πραγματοποιεί ολίσθηση προς τα δεξιά του καταχωρητή που ακολουθεί μέσω κρατουμένου

Καταχωρητής STATUS. IRP: Bit επιλογής περιοχής μνήμης (Bank) για την έμμεση διευθυνσιοδότηση 1= Bank2, Bank3 0= Bank0, Bank1

Οδηγώντας μια οθόνη υγρών κρυστάλλων Liquid Crystal Display

2. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΩΝ ΘΥΡΩΝ ΕΙΣΟ ΟΥ/ΕΞΟ ΟΥ ΤΟΥ PIC16F877-ΑΡΙΘΜΗΤΙΚΕΣ ΕΝΤΟΛΕΣ

ΔΙΑΚΟΠΕΣ PΙC16F887(INTERRUPTS) Όταν σηματοδοτηθεί μια διακοπή στον PIC16F887, ο έλεγχος του προγράμματος μεταφέρεται στο τμήμα κώδικα που βρίσκεται

Πανεπιστήμιο Θεσσαλίας- Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΗΥ430- Εργαστήριο Ψηφιακών Κυκλωμάτων

ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΕΡΓΑΣΤΗΡΙΑΚΟΥ ΜΑΘΗΜΑΤΟΣ «ΣΥΣΤΗΜΑΤΑ ΨΗΦΙΑΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ» ή ΠΡΟΓΡΑΜΜΑΤΙΖΟΝΤΑΣ ΤΟΝ ΜΙΚΡΟΕΛΕΓΚΤΉ PIC16F877 ΤΗΣ MICROCHIP TECHNOLOGY INC

Εντολές PIC16F887. Reg1=b' ' b' '

Αυτή η άσκηση έχει σαν σκοπό, να δείξει τον τρόπο με τον οποίο τίθεται σε λειτουργία η οθόνη LCD του αναπτυξιακού.

Εφαρμογές μικροελεγκτών

Χ. Σωτηρίου. Σχήμα 1: 2 16 LCD πίνακας της πλακέτας Spartan 3E

Αρχιτεκτονική και προγραμματισμός του μικροελεγκτή PIC 16F877

Εισαγωγή στους μικροελεγκτές PIC

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

1. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΟΥ ΜΙΚΡΟΕΛΕΓΚΤΗ PIC16F877

Σχεδίαση και υλοποίηση συστήματος συναγερμού με. μικροελεγκτή PIC. Πτυχιακή Εργασία του

Σπύρος Καζαρλής, Χειμώνας

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

10. Πληκτρολόγιο matrix 4x4

ΕΡΓΑΣΤΗΡΙΟ 6 ΟΔΗΓΗΣΗ ΑΠΕΙΚΟΝΙΣΕΩΝ SSD ΚΑΙ LCD

ΠΕΡΙΦΕΡΕΙΑΚΑ ΤΟΥ PIC16F887

Αρχές Προγραμματισμού Πραγματικού Χρόνου

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Είναι το πρωτόκολλο RS232 που χρησιμοποιείται στις σειριακές θύρες COM με τη διαφορά ότι εκτελείται σε επίπεδο τάσεων TTL. 2

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

ΕΙΣΑΓΩΓΗ. 1. Το λογισμικό MPLAB. 2. Υλικό προγραμματισμού και αποσφαλμάτωσης

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 3: Εντολές λογικών πράξεων και εντολές κλήσης ρουτινών

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 4: Ρουτίνες καθυστέρησης. [Συγγραφή ρουτίνας καθυστέρησης]

Σκοπόςτης Διάλεξης. Εφαρμογή των χρονιστών για την ακριβή μέτρηση του χρόνου με την υλοποίηση του προγράμματος Real_Time_Clock.

ΑΣΚΗΣΗ 1 ΑΣΚΗΣΗ 1. Συγγραφή. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

WDT και Power Up timer

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

ΕΝΟΤΗΤΑ 6 LCD ΟΘΟΝΕΣ

για τις ρυθμίσεις LabView μέσα από το κανάλι και του καλωδίου USB.

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 5: Εξωτερικές διακοπές του 8051

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

ΕΛΕΓΧΟΣ ΚΑΥΣΤΗΡΑ ΠΕΤΡΕΛΑΙΟΥ & ΠΕΡΙΒΑΛΛΟΝΤΟΣ ΧΩΡΟΥ

ίοδοι Εκποµπής Φωτός

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Περιεχόµενα. I Βασικές Γνώσεις 1

12. Διακοπές Interrupts (IRQ)

ΑΝΑLOG TO DIGITAL CONVERTER (ADC)

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

Συστήματα Μικροϋπολογιστών

ΗΜΥ 213. Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών week 5. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

Electronics μαζί με τα συνοδευτικά καλώδια και το αισθητήριο θερμοκρασίας LM335 που περιέχονται

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

; Οι HL δείχνουν την επόµενη θέση µνήµης MVI A, 38H CMP H JNZ DO_FLMEM ; POP B. ; Ανάκτηση καταχωρητών απο το σωρό.

ΘΕΜΑΤΑ & ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ DB -10

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Αρχιτεκτονική-Ι. Ενότητα 1: Εισαγωγή στην Αρχιτεκτονική -Ι

Εγχειρίδιο χρήσης του Άβακα

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία

Εφαρμογές Σειριακής Επικοινωνίας

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

Αρχιτεκτονική Υπολογιστών

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

Έλεγχος της Σειριακής Θύρας

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΑΣΚΗΣΕΙΣ ΠΟΛΛΑΠΛΗΣ ΕΠΙΛΟΓΗΣ ΓΙΑ ΤΗ ΘΕΩΡΙΑ

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Θέμα 1ο (3 μονάδες) Υλοποιήστε το ακoλουθιακό κύκλωμα που περιγράφεται από το κατωτέρω διάγραμμα

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. ΚΕΦΑΛΑΙΟ 4ο ΜΝΗΜΕΣ. (c) Αμπατζόγλου Γιάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ΠΕ17

ΜΑΘΗΜΑ: ΜΙΚΡΟΕΛΕΓΚΤΕΣ

Αναπαράσταση Δεδομένων. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Γ ΕΠΑΛ 14 / 04 / 2019

Αρχιτεκτονική Υπολογιστών

Οργάνωση και Αρχιτεκτονική Υπολογιστών. Κεφάλαιο 7.4

Οργάνωση Υπολογιστών (IΙI)

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 5 - Editor

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 15: Καταχωρητές (Registers)

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

«ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ» ΕΣΩΤΕΡΙΚΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

8051 Interrupt Ports. Name Alternate Function

ΑΣΚΗΣΗ 3 ΑΣΚΗΣΗ 3. Μηχανικοί ιακόπτες. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

Αρχιτεκτονική Υπολογιστών

7 η Θεµατική Ενότητα : Καταχωρητές, Μετρητές και Μονάδες Μνήµης

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τα επιμέρους τμήματα Η ΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ. Αναπαράσταση μεγεθών. Αναλογική αναπαράσταση ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ ΜΟΝΑ Α ΕΛΕΓΧΟΥ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

Transcript:

**************************************************************************** *Πρόγραμμα μέτρησης θερμοκρασίας με το LM335 και απεικόνιση σε οθόνη LCD * *2x16, που βασίζεται στο HD44780 της Hitachi. * * * * Όνομα αρχείου : templcd.asm * * Δημιουργία : Νοέμβριος 2004 * *Τελευταία ενημέρωση: Μάρτιος 2005 * * Συγγραφέας : Α.Μαρμαρινός * **************************************************************************** #include "p16f877.inc" Συμπεριέλαβε το αρχείο δηλώσεων του επεξεργαστή **************************************************************************** *CONFIG: Ρύθμιση διαφόρων παραμέτρων του μικροελεγκτή * * CP: Code Protect - Προστασία κώδικα * * DEBUG: In Circuit Debugger Mode - Κατάσταση εκσφαλμάτωσης * * WRT: FLASH Program Memory Write Enable - Επίτρεψη εγγραφής στη μνήμη * * CPD: EE Memory Code Protect - Προστασία κώδικα στη μνήμη EEPROM * * LVP: Low Voltage Programing - Προγραμματισμός με χαμηλή τάση * * BODEN: Brown out Detect * * PWRTE: Power up timer Enable * * WDT: Watchdog timer * * RC_OSC: RC Oscilator - Ταλαντωτής RC * * HS_OSC: High speed crystal Oscilator - Ταλαντωτής υψηλής συχνότητας * * XT_OSC: Crystal Oscilator - Κρυσταλλικός ταλαντωτής * * LP_OSC: Low Power Crystal Oscilator - Ταλαντωτής χαμηλής ισχύος * **************************************************************************** CONFIG h'3d39' _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC Δηλώσεις Καταχωρητών - Μεταβλητών του προγράμματος Για τη μονάδα LCD LCD_DATA equ PORTB Θύρα στην οποία συνδέονται οι γραμμές data του LCD LCD_DATA_TRIS equ TRISB Καταχωρητής ελέγχου της θύρας που συνδέονται οι γραμμές data LCD_CTRL equ PORTC Θύρα στην οποία συνδέονται οι γραμμές control του LCD LCD_LINE0 equ 0x000 Διεύθυνση της γραμμής 0 του LCD LCD_LINE1 equ 0x040 Διεύθυνση της γραμμής 1 του LCD PORTC bits LCD_E equ 2 Γραμμή ελέγχου Ε του LCD LCD_RW equ 1 Γραμμή ελέγχου R/W του LCD LCD_RS equ 0 Γραμμή ελέγχου RS του LCD PORTB bits DB7 equ 7 LCD dataline 7 (MSB) DB6 equ 6 LCD dataline 6 DB5 equ 5 LCD dataline 5 DB4 equ 4 LCD dataline 4 DB3 equ 3 LCD dataline 3 DB2 equ 2 LCD dataline 2 DB1 equ 1 LCD dataline 1 DB0 equ 0 LCD dataline 0 (LSB) Διάφοροι καταχωρητές LCD_TEMP equ 0x020 Εσωτερική χρήση στις ρουτίνες του LCD TABLE_INDEX equ 0x021 Δείκτης για τους πίνακες COUNT equ 0x022 Χρήση στη ρουτίνα DELLONG DELAY equ 0x023 Χρήση στη ρουτίνα DELAY500 X_DELAY equ 0x024 Χρήση στη ρουτίνα X_DELAY500 ADRES equ 0x025 Για την αποθήκευση του αποτελέσματος της μετατροπής A/D Καταχωρητές για τη μετατροπή από δυαδικό σε BCD BCD100 equ 0x030 Για την αποθήκευση των εκατοντάδων BCD10 equ 0x031 Για την αποθήκευση των δεκάδων BCD1 equ 0x032 Για την αποθήκευση των μονάδων Για την επιλογή των μηνυμάτων MESG equ 0x028 Εδώ αποθηκεύεται ο κωδικός κάθε μηνύματος MESG0 equ B'00000001' Κωδικός του μηνύματος 0 MESG1 equ B'00000010' Κωδικός του μηνύματος 1 MESG2 equ B'00000100' Κωδικός του μηνύματος 2

MESG3 equ B'00001000' Κωδικός του μηνύματος 3 MESG4 equ B'00010000' Κωδικός του μηνύματος 4 MESG5 equ B'00100000' Κωδικός του μηνύματος 5 MESG6 equ B'01000000' Κωδικός του μηνύματος 6 Έναρξη προγράμματος ORG 0x0000 Θέση του RESET vector RESET goto START Ρουτίνα εξυπηρέτησης διακοπών ORG 0x0004 Θέση του Interrupt vector INTERRUPT goto INTERRUPT Αρχικοποίηση καταχωρητών του επεξεργαστή. Aρχικοποίηση μονάδας A/D START POWER_ON Reset (Αρχή του προγράμματος) BANKSEL PORTD Επιλογή τμήματος μνήμης 0 clrf STATUS Εκκαθάριση του Status clrf INTCON Εκκαθάριση σημαιών διακοπών, απενεργοποίηση διακοπών clrf PCLATH Χρήση του χαμηλότερου μέρους της μνήμης 2KByte clrf PORTB Οι θύρες εξόδου Β και C, σε κατάσταση Low. clrf PORTC movlw B'01000001' Ρολόι μετατροπής:fosc/8, Ενεργοποίηση A/D,... movwf ADCON0...δειγματοληψία από το κανάλι 0 BANKSEL TRISC Επιλογή τμήματος μνήμης 1 (εκεί βρίσκεται ο TRISC) movlw 0x0F8 RC2-0 έξοδοι, RC7-3 είσοδοι movwf TRISC movlw 0x000 RB7-0 έξοδοι movwf TRISB movlw B'00001111' Αριστερή στοιχιση, 1 αναλογική είσοδος... movwf ADCON1...RA3(=5V) και RA2(=2.45V) τάσεις αναφοράς bcf STATUS, RP0 Επιλογή τμήματος μνήμης 0 call LCDINIT Αρχικοποίηση LCD Απεικόνιση εισαγωγικών μυνημάτων movlw LCD_LINE0 Απεικόνιση στη γραμμή 0 Τοποθέτησε τον κέρσορα στο αριστερο άκρο της γραμμής movlw MESG5 Φόρτωσε τον κωδικό του μηνύματος 5 (1ο ΤΕΕ) Απεικόνισε το μήνυμα movlw LCD_LINE1 movlw MESG6 Απεικόνιση στη γραμμή 1 το μύνημα 6 (3ο ΣΕΚ) call DELLONG Καθυστέρηση movlw LCD_LINE0 movlw MESG2 movlw LCD_LINE1 movlw MESG4 Απεικόνιση στη γραμμή 0 το μύνημα 2 (Σχεδίαση) Απεικόνιση στη γραμμή 1 το μύνημα 4 (Α.Μαρμαρινός) call DELLONG Καθυστέρηση movlw LCD_LINE0 movlw MESG3 Απεικόνιση στη γραμμή 0 το μύνημα 3 (Κατασκευή) call DELLONG Καθυστέρηση

movlw LCD_LINE0 movlw MESG0 Απεικόνιση στη γραμμή 0 το μύνημα 0 (Εργαστήριο ΣΜΕΔ) movlw LCD_LINE1 Απεικόνιση στη γραμμή 1 το μύνημα 1 (Θερμ/σία: οc) movlw MESG1 **** Διαδικασία A/D μετατροπής επεξεργασίας και απεικόνισης των μετρήσεων **** BANKSEL PORTB Επιλογή της περιοχής μνήμης 0 Loop bsf ADCON0,GO Έναρξη μετατροπής A/D στο κανάλι 0 Wait btfss PIR1,ADIF Αναμονή για την ολοκλήρωση της μετατροπής goto Wait movf ADRESH,W Διάβασε το αποτέλεσμα της μετατροπής... movwf ADRES...και αποθήκευσέ το στον καταχωρητή ADRES bcf STATUS, C ΜΗΔΕΝΙΣΜΌΣ C movlw h'1c' - subwf ADRES, F ΑΦΑΙΡΕΣΗ (ADRES-1C) (δηλ d'28') btfss STATUS, C - (2.73-2.45)*(255/2.55)=28 goto NEGATIVE Αν ο αριθμός είναι αρνητικός πήγαινε στην κατάλληλη ρουτίνα movf ADRES,W Μεταφορά του ADRES στον W call bin2bcd8 Κλήση της υπορουτίνας μετατροπής από δυαδικό σε BCD Απεικόνιση εκατοντάδων movlw LCD_LINE1 + 0x0B Σε ποια θέση θα απεικονιστεί? Τοποθέτησε τον κέρσορα σε αυτή τη θέση movf BCD100, W Ανάγνωση της BCD τιμής των εκατοντάδων addlw H'30' Πρόσθεση της ASCII τιμής του αριθμού 0 call LCDPUTCHAR Απεικόνιση του αριθμού Απεικόνιση δεκάδων DISP movlw LCD_LINE1 + 0x0C Σε ποια θέση θα απεικονιστεί? Τοποθέτησε τον κέρσορα σε αυτή τη θέση movf BCD10, W Ανάγνωση της BCD τιμής των δεκάδων addlw H'30' Πρόσθεση της ASCII τιμής του αριθμού 0 call LCDPUTCHAR Απεικόνιση του αριθμού Απεικόνιση μονάδων movlw LCD_LINE1 + 0x0D Σε ποια θέση θα απεικονιστεί? Τοποθέτησε τον κέρσορα σε αυτή τη θέση movf BCD1, W Ανάγνωση της BCD τιμής των μονάδων addlw H'30' Πρόσθεση της ASCII τιμής του αριθμού 0 call LCDPUTCHAR Απεικόνιση του αριθμού movlw h'ff' call X_DELAY500 Καθυστέρηση μέχρι την επόμενη μέτρηση call X_DELAY500 Συνολικά (255*0.5)+3*(165*0.5)=375 msec call X_DELAY500 call X_DELAY500 bcf PIR1,ADIF Εκκαθάριση της σημαίας ολοκλήρωσης της μετατροπής goto Loop Επανάληψη της διαδικασίας NEGATIVE movlw LCD_LINE1 + 0x0B Σε ποια θέση θα απεικονιστεί το '-' Τοποθέτησε τον κέρσορα σε αυτή τη θέση movlw '-' call LCDPUTCHAR Απεικόνιση του '-' movf ADRES, W Μεταφορά του ADRES στον W sublw H'FF' Αντιστροφή του αριθμού:αφαίρεση FF-W -> W addlw H'1' πρόσθεση W+1 -> W movwf ADRES Μεταφορά στον ADRES call bin2bcd8 Κλήση της υπορουτίνας μετατροπής από δυαδικό σε BCD goto DISP Η συνέχεια είναι όπως και στους θετικούς TABLE_MSG

Αποστολή μηνύματος χρησιμοποιώντας πίνακα TABLE_MSG movwf MESG movlw 0 Δείκτης αρχής του πίνακα μηνύματος DISP_MSG movwf TABLE_INDEX Αποθήκευση του δείκτη btfsc MESG,0 - call MSG0 btfsc MESG,1 call MSG1 btfsc MESG,2 call MSG2 Εύρεση του τρέχοντος μηνύματος από την τιμή btfsc MESG,3 του καταχωρητή MESG call MSG3 btfsc MESG,4 call MSG4 btfsc MESG,5 call MSG5 btfsc MESG,6 call MSG6 - andlw 0x0FF Έλεγχος αν έφθασε στο τέλος του μηνύματος btfsc STATUS, Z (στο τέλος του μηνύματος ενεργοποιείται η σημαία Ζ) goto TABLE_MSG_END Αν έφθασε στο τέλος, επέστρεψε call LCDPUTCHAR Απεικόνιση χαρακτήρα movf TABLE_INDEX, W Επόμενος χαρακτήρας addlw 1 goto DISP_MSG TABLE_MSG_END Πίνακες μηνυμάτων για απεικόνιση MSG0 Μήνυμα "ΕΡΓΑΣΤΗΡΙΟ ΣΜΕΔ" Πήγαινε στον χαρακτήρα που περιέχεται στον W retlw.212 retlw 'A' retlw 'T' retlw 'H' retlw 'I' retlw 'O' retlw.213 MSG0_END MSG1 Μήνυμα "ΘΕΡΜ/ΣΙΑ : oc" retlw.214 retlw '/' retlw 'I' retlw 'A' retlw ':' Πήγαινε στον χαρακτήρα που περιέχεται στον W

MSG1_END retlw.178 retlw 'C' MSG2 Μήνυμα "Σχεδίαση" retlw 'x' retlw.227 retlw.226 retlw.231 retlw.239 retlw.229 MSG2_END Πήγαινε στον χαρακτήρα που περιέχεται στον W MSG3 Μήνυμα "Κατασκευή" Πήγαινε στον χαρακτήρα που περιέχεται στον W retlw 'K' retlw.240 retlw.239 retlw.232 retlw.227 retlw.241 retlw.229 MSG3_END MSG4 Μήνυμα "Α. Μαρμαρινός" Πήγαινε στον χαρακτήρα που περιέχεται στον W DT " A. M",.223,.238,.234,.223,.238,.231,.235,"os " retlw 'A' retlw '.' retlw.238 retlw.234 retlw.238 retlw.231 retlw.235 retlw 'o' retlw 's' MSG4_END MSG5 Μήνυμα "1o TEE N.ΣΜΥΡΝΗΣ" retlw '1' retlw.178 Πήγαινε στον χαρακτήρα που περιέχεται στον W

MSG5_END retlw 'T' retlw 'N' retlw '.' retlw 'Y' retlw 'N' retlw 'H' MSG6 Μήνυμα "3o ΣΕΚ N.ΣΜΥΡΝΗΣ" retlw '3' retlw.178 retlw 'K' retlw 'N' retlw '.' retlw 'Y' retlw 'N' retlw 'H' MSG6_END Πήγαινε στον χαρακτήρα που περιέχεται στον W Υπορουτίνες της οθόνης LCD LCDINIT Αρχικοποίηση της οθόνης LCD Μπορεί να προσαρμοστεί στην κάθε εφαρμογή (display type, cursor on/off, κτλ.) OK LCDINIT Η σημαία Busy-flag δεν είναι ακόμη έγκυρη clrf LCD_CTRL Όλες οι γραμμές ελέγχου 0 movlw 0x01E Καθυστέρηση call X_DELAY500 30 * 0.5mS = 15mS Η σημαία Busy-flag είναι τώρα έγκυρη movlw 0x038 επικοινωνία 8-bit, 2-γραμμές movlw 0x000 disp.off, curs.off, no-blink call LCDDMODE call LCDCLEAR movlw 0x004 disp.on, curs.off call LCDDMODE movlw 0x002 auto-inc (shift-cursor) call LCDEMODE LCDBUSY επιστρέφει όταν η σημαία busy-flag του LCD είναι απενεργοποιημένη OK LCDBUSY bsf STATUS,RP0 Επιλογή της περιοχής μνήμης 1

movlw 0x0FF Ρύθμιση της θύρας PORTB για είσοδο δεδομένων movwf LCD_DATA_TRIS bcf STATUS, RP0 Επιλογή της περιοχής μνήμης 0 bcf LCD_CTRL, LCD_RS Ρύθμιση του LCD για λειτουργία εντολών (command mode) bsf LCD_CTRL, LCD_RW Ρύθμιση για ανάγνωση της σημαίας busy flag bsf LCD_CTRL, LCD_E Ενεργοποίηση της γραμμής ελέγχου Ε του LCD movf LCD_DATA, W Διάβασε τη σημαία busy flag (+ DDram address) bcf LCD_CTRL, LCD_E Απενεργοποίηση της γραμμής ελέγχου Ε του LCD andlw 0x80 Έλεγχος της σημαίας Busy flag, High = Busy BTFSS STATUS, Z goto LCDBUSY Αν busy flag=1, τότε επανέλαβε LCDNOTBUSY bcf LCD_CTRL, LCD_RW Αν busy flag=0, τότε συνέχισε bsf STATUS, RP0 Επιλογή της περιοχής μνήμης 1 movlw 0x000 movwf LCD_DATA_TRIS Ρύθμιση της θύρας PORTB για έξοδο δεδομένων bcf STATUS, RP0 Επιλογή της περιοχής μνήμης 0 LCDCLEAR Καθαρίζει την οθόνη και τοποθετεί τον κέρσορα πάνω αριστερά LCDCLEAR movlw 0x001 LCDEMODE Ρυθμίζει τον τρόπο λειτουργίας της οθόνης (entry mode). Ο επιθυμητός τρόπος πρέπει να έχει φορτωθεί στον W b0 : 0 = όχι ολίσθηση 1 = ολίσθηση b1 : 0 = αυτόματη μείωση 1 = αυτόματη αύξηση b2-7 : χωρίς σημασία OK LCDEMODE andlw 0x003 Απομόνωση των δύο τελευταίων bit iorlw 0x004 πρέπει το 3ο bit να είναι 1 LCDDMODE Ρυθμίζει τον τρόπο λειτουργίας της οθόνης (display mode). Ο επιθυμητός τρόπος πρέπει να έχει φορτωθεί στον W να αναβοσβήνει ο κέρσοραςb0 : 0 = Όχι 1 = Ναι να υπάρχει κέρσορας b1 : 0 = Όχι 1 = Ναι οθόνη σε λειτουργία b2 : 0 = Όχι 1 = Ναι (τα δεδομένα παραμένουν στην DDRAM) b3-7: χωρίς σημασία OK LCDDMODE andlw 0x007 Απομόνωση των τριών τελευταίων bit iorlw 0x008 πρέπει το 4ο bit να είναι 1 LCDSDDA Ρυθμίζει τη διεύθυνση της μνήμης απεικόνισης (Display-Data-RAM). Η DDRAM γράφεται/διαβάζεται μετά από αυτή τη ρύθμιση. Η επιθυμητή διεύθυνση DDRAM address πρέπει να έχει τοποθετηθεί στον W b0-6 : επιθυμητή διεύθυνση DDRAM b7 : χωρίς σημασία OK LCDSDDA iorlw 0x080 πρέπει το 8ο bit να είναι 1 LCDPUTCHAR Στέλνει έναν χαρακτήρα στο LCD Ο επιθυμητός χαρακτήρας πρέπει να είναι στον W

OK LCDPUTCHAR movwf LCD_TEMP Μετέφερε το χαρακτήρα προσωρινά στον LCD_TEMP call LCDBUSY Περίμενε για τη σημαία busy flag bcf LCD_CTRL, LCD_RW Ρύθμισε το LCD σε κατάσταση ανάγνωσης (read mode) bsf LCD_CTRL, LCD_RS Ρύθμισε το LCD σε κατάσταση δεδομένων (data mode) bsf LCD_CTRL, LCD_E Ενεργοποίησε τη γραμμή Ε movf LCD_TEMP, W Διάβασε τον προς αποστολή χαρακτήρα από τον LCD_TEMP movwf LCD_DATA Στείλε το χαρακτήρα στο LCD bcf LCD_CTRL, LCD_E Απενεργοποίησε τη γραμμή Ε LCDPUTCMD Στέλνει μια εντολή στο LCD Η επιθυμητή εντολή πρέπει να είναι στον W OK LCDPUTCMD movwf LCD_TEMP Μετέφερε την εντολή προσωρινά στον LCD_TEMP call LCDBUSY Περίμενε για τη σημαία busy flag bcf LCD_CTRL, LCD_RW Ρύθμισε το LCD σε κατάσταση ανάγνωσης (read mode) bcf LCD_CTRL, LCD_RS Ρύθμισε το LCD σε κατάσταση εντολών (command mode) bsf LCD_CTRL, LCD_E Ενεργοποίησε τη γραμμή Ε movf LCD_TEMP, W Διάβασε την προς αποστολή εντολή από τον LCD_TEMP movwf LCD_DATA Στείλε την εντολή στο LCD bcf LCD_CTRL, LCD_E Απενεργοποίησε τη γραμμή Ε **************************************************************************** Ρουτίνα χρονικής καθυστέρησης Η διάρκεια ενός κύκλου είναι 1 μsec για κρύσταλλο 4MHz Fosc = 4MHz Cycle_time= 1/(Fosc / 4) = 1/[(4*10^6)/ 4] = 1μsec Delay_time = ((DELAY_value * 3) + 4) * Cycle_time DELAY_value = (Delay_time - (4 * Cycle_time)) / (3 * Cycle_time) π.χ. (για κρύσταλλο 4MHz) Delay_time = ((32 * 3) + 4) * 1μsec = 100μsec DELAY_value = (500μsec - 4) / 3 = 165.33 = 165 Ρουτίνα DELAY500 : Καθυστέρηση 500 μsec Ρουτίνα Χ_DELAY500 : Καθυστέρηση Χ*500 μsec, όπου Χ είναι το περιεχόμενο του W Ρουτίνα DELLONG : Επανάληψη 30 φορές της ρουτίνας Χ_DELAY500, όπου X=FF. Συνολική καθυστέρηση 255*500*30=3825000μsec=3,825sec DELAY500 movlw D'165' +1 1 cycle movwf DELAY +2 1 cycle DELAY500_LOOP decfsz DELAY, F step 1 1 cycle goto DELAY500_LOOP step 2 2 cycles DELAY500_END +3 2 cycles X_DELAY500 movwf X_DELAY +1 1 cycle X_DELAY500_LOOP call DELAY500 step1 wait 500μsec decfsz X_DELAY, F step2 1 cycle goto X_DELAY500_LOOP step3 2 cycles X_DELAY500_END +2 2 cycles DELLONG movlw.30 Επανέλαβε τη ρουτίνα X_DELAY500 30 φορές movwf COUNT DEL movlw H'FF' call X_DELAY500 decfsz COUNT, F goto DEL

bin2bcd8 Ρουτίνα μετατροπής ενός 8-bit αριθμού σε 3-ψήφιο BCD Μετατρέπει το περιεχόμενο του W και αποθηκεύει τις εκατοντάδες στον καταχωρητή BCD100, τις δεκάδες στον BCD10 και τις μονάδες στον BCD1 Π.χ. ο αριθμός h'c2'=b'11000010'=d'194' μετατρέπεται σε (01,09,04) δηλ. 1 εκατοντάδα, 9 δεκάδες, 4 μονάδες ** bin2bcd8 clrf BCD100 Μηδένισε τους καταχωρητές που θα γραφεί το αποτέλεσμα clrf BCD10 clrf BCD1 bcf STATUS,C Μηδένισε τη σημαία κρατουμένου EKATONTADES Υπολογισμός εκατοντάδων addlw -.100 Αφαίρεσε μια εκατοντάδα btfss STATUS,C Αρνητικό αποτέλεσμα goto DEKADES Αν ναι, τέλειωσαν οι εκατοντάδες - υπολόγισε τις δεκάδες incf BCD100, F Αν όχι, αύξησε το μετρητή εκατοντάδων... goto EKATONTADES...και επανέλαβε DEKADES Υπολογισμός δεκάδων addlw.100 Επανέφερε τον αριθμό bcf STATUS,C Μηδένισε τη σημαία κρατουμένου again addlw -.10 Αφαίρεσε μια δεκάδα btfss STATUS,C Αρνητικό αποτέλεσμα goto MONADES Αν ναι, τέλειωσαν οι δεκάδες και μένουν οι μονάδες incf BCD10, F Αν όχι, αύξησε το μετρητή δεκάδων... goto again... και επανέλαβε MONADE addlw.10 Επανέφερε τον αριθμό movwf BCD1 Έχουν μείνει μόνο οι μονάδες, οπότε αποθήκευσέ τις retur END Τέλος του προγράμματος