Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
LCD origine inconnu
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
La fin du programme
L'envoie de message est limité à 60 000 caractères?
L'envoie de message est limité à 60 000 caractères?
Code : Tout sélectionner
;---------------------------------------------------------CONFIGURATION AFFICHEUR Lignes 3 et 4-----------------------------------------------------------
CONFIG_B
MOVLW B'00111000' ; Fonction SET 8 bits 2 lignes police 5X7
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00001000' ; Affichage off
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00000001' ; Efface l'écran et positionne le curseur à 0
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00000110' ; Déplacement curseur vers la droite
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00001100' ; Contrôle de l'affichage (affichage on, curseur non visible)
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
RETURN
;---------------------------Ecriture dans l'afficheur lignes 3 et 4-------------------------------------
CAR_AFF_B
MOVWF PORTD ; Charge le contenu de W dans le port B
CALL ATTENTE5 ; Appel de la temporisation ATTENTE5
MOVLW B'01100000' ; RS = 1, RW = 0, E1 = 1, E2 = 0
MOVWF PORTC ; Et on transfert sur le port C le contenu de W
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
MOVLW B'00000000' ; RS = 0, RW = 0, E1 = 0, E2 = 0
MOVWF PORTC ;
RETURN
;---------------------------Programme de temporisation 1-------------------------------------
TEMPO1
MOVLW 0X7F ; On met FF dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVWF RETARD3 ; On met W dans le registre retard3
MOVWF RETARD4 ; On met W dans le registre retard4
ATTENTE1
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction si le registre retard1 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X80 ; On met 80 dans le registre W
MOVWF RETARD1 ; On met W dans RETARD1
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction si le registre retard2 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X08 ; On met 08 dans le registre W
MOVWF RETARD2 ; On met W dans RETARD2
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction si le registre retard3 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X08 ; On met 08 dans le registre W
MOVWF RETARD3 ; On met W dans RETARD3
DECFSZ RETARD4,F ; On décrémente retard4 et on saute la prochaine instruction si le registre retard4 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
RETURN ; Retour au programme principal
;------------------------------programme de temporisation 2---------------------------
TEMPO2
MOVLW 0X7F ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X12 ; On met 12 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE2
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
MOVLW 0XC8 ; On recharge retard1
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
RETURN ; Retour au programme principal après l'instruction call
;------------------------------programme de temporisation 3---------------------------
TEMPO3
MOVLW 0X7F ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X80 ; On met 80 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE3
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
MOVLW 0XC8 ; On recharge retard1
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
RETURN ; Retour au programme principal après l'instruction call
;---------------------------Programme de temporisation 4-------------------------------------
TEMPO4
MOVLW 0X5A ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X15 ; On met 12 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE4
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
MOVLW 0X6E ; On recharge retard1 6e
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
RETURN ; Retour au programme principal après l'instruction call
;---------------------------------------------------SOUS PROGRAMME TEMPO D'ATTENTE---------------------------------------------------------------
ATTENTE5
MOVLW 0XFF ; On met FF dans le registre W
MOVWF CPT2 ; On met W dans le registre CPT2
ATT2
DECFSZ CPT2,1 ; On décrémente CPT2,1 et on saute la prochaine instruction
GOTO ATT2 ; Sinon retour à ATT2
RETURN ; Retour au programme principal après l'instruction call
ATTENTE6
MOVLW 0X1E ; On met 14 dans le registre W
MOVWF CPT3 ; On met W dans le registre CPT3
ATT3
CALL ATTENTE5 ; On appelle ATTENTE5
DECFSZ CPT3,1 ; On décrémente CPT3,1 et on saute la prochaine instruction
GOTO ATT3 ; Sinon retour à ATT3
RETURN ; Retour au programme principal après l'instruction call
END
LCD origine inconnu
Bonjour nondediode, JMarc, satinas, et tout le forum,
Très très gros programme, je sais pas si ça va tenir dans un Pic16F877 qui est limité à 8k
1) Mais là je vais essayer de te donner un conseille, il faut faire un tableau ou tu vas déposer tes données.
2) Faire une fonction pour afficher le message(comme dans l'exemple que j'ai fait).
Exemple :
A+
Très très gros programme, je sais pas si ça va tenir dans un Pic16F877 qui est limité à 8k
1) Mais là je vais essayer de te donner un conseille, il faut faire un tableau ou tu vas déposer tes données.
2) Faire une fonction pour afficher le message(comme dans l'exemple que j'ai fait).
Exemple :
Code : Tout sélectionner
movlw D'10' ; longueur de la donnée
movwf phrase
movlw D'0'
movwf lecture ; emplacement du départ de la donnée
call affiche ; affiche sur le lcd "INPUT: DVD"
do_lopp
nop
goto do_loop
;****************************** "affiche le texte sélectionner" ********************************
affiche
movlw D'8' ; page 8, tableaux 'dico' de 256 octets.
movwf PCLATH ;
;
re_lire
movf lecture,W ; copier lecture dans W qui est l'emplacement de la lettre
incf lecture,F ; raouter + 1 pour la lettre suivante
call dico ; on va chercher la lettre dans le tableau "dico"
movwf lettre ; "lettre" contient la donnée
call ecrit_lcd ; fonction pour écriture le caractère sur le lcd
decfsz phrase,F ; "phrase" est la longueur du texte qui est décrémenté de 1 à chaque passage, jusqu’à
goto re_lire ;
return ; 0 pour avoir une fin de fonction
;************************ "écrit ou créer, un caractére sur le lcd" ***************************
ecrit_lcd
swapf lettre,W
call envoi
bsf lcd_rs
call e_pulse
bcf lcd_rs
movf lettre,W
call envoi
bsf lcd_rs
call e_pulse
bcf lcd_rs
call pause_40µs
return
;************* "pour écrire dans les bits 0,1,2,3, sans toucher aux bits 4,5,6,7" **************
envoi
andlw B'00001111'
movwf loop5
btfsc lcd_port,7
bsf loop5,7
btfsc lcd_port,6
bsf loop5,6
btfsc lcd_port,5
bsf loop5,5
btfsc lcd_port,4
bsf loop5,4
movf loop5,W
movwf lcd_port
return
;************************** "envoie une fin d'émision sur le lcd" *****************************
e_pulse
nop
nop
nop
bsf lcd_e
nop
nop
nop
bcf lcd_e
return
;*****************************************************************************************************
ORG H'800'
dico
addwf PCL,F
dt "INPUT: DVD"
dt "INPUT: TAPE"
A+
Modifié en dernier par Temps-x le sam. 15 déc. 2018 14:08, modifié 6 fois.
LCD origine inconnu
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour Temps-x,
Pour l'instant, le programme passe sans soucis.
A quoi voit-on que la mémoire du PIC est saturée?
Je retiens ton idée qui me semble excellente et je t'en remercie mais pour l'instant j'essaie de finaliser mon prg actuel car j'en arrive à bout et j'aimerai voir ce que ça donne.
Juste que je dois revoir la fameuse boucle qui ne va pas chercher forcement là où je le souhaite.
Je pense qu'il y a des petites erreurs minimes qui fait qu'il ne va pas chercher là où il faut.
Ensuite ça devrait le faire. Mais c'est certains qu'il faudra le simplifier car j'imagine mal le jour où je devrais intervenir dedans pour modifier une action
A+
Pour l'instant, le programme passe sans soucis.
A quoi voit-on que la mémoire du PIC est saturée?
Je retiens ton idée qui me semble excellente et je t'en remercie mais pour l'instant j'essaie de finaliser mon prg actuel car j'en arrive à bout et j'aimerai voir ce que ça donne.
Juste que je dois revoir la fameuse boucle qui ne va pas chercher forcement là où je le souhaite.
Je pense qu'il y a des petites erreurs minimes qui fait qu'il ne va pas chercher là où il faut.
Ensuite ça devrait le faire. Mais c'est certains qu'il faudra le simplifier car j'imagine mal le jour où je devrais intervenir dedans pour modifier une action
A+
LCD origine inconnu
nondediode a écrit :Source du message A quoi voit-on que la mémoire du PIC est saturée?
Tu auras un message de la part du compilateur qui va te dire en anlais Hé... nondediode j'ai trop mangé.
A+
LCD origine inconnu
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
!
Bon ben il a encore de l’appétit
Je viens de le terminer à l'instant et tout fonctionne
Reste à peaufiner les sous programmes pour l'arrêt et je crois que c'est fini
Après je n'en reste pas là. Je vais faire un joli chronogramme pour que tout le monde comprenne bien mon projet
Parce que là, je trouve que vous êtes plutôt sympa bcp m'aurait laissé me démerder dans mon coin avec un truc pareil
Moi même je me questionne quand je relis le prg c'est pour dire:
Bon quand même il tourne et je suis fier de moi même si j'ai un peu honte de mon usine à gaz
A t'alleurs
Bon ben il a encore de l’appétit
Je viens de le terminer à l'instant et tout fonctionne
Reste à peaufiner les sous programmes pour l'arrêt et je crois que c'est fini
Après je n'en reste pas là. Je vais faire un joli chronogramme pour que tout le monde comprenne bien mon projet
Parce que là, je trouve que vous êtes plutôt sympa bcp m'aurait laissé me démerder dans mon coin avec un truc pareil
Moi même je me questionne quand je relis le prg c'est pour dire:
Bon quand même il tourne et je suis fier de moi même si j'ai un peu honte de mon usine à gaz
A t'alleurs
LCD origine inconnu
J'ai compilé ton programme il fait 6,45 Ko (6 613 octets), tu as encore de la place pour y mettre le dessert.
Que ça soit un gros programme qui demande juste un amaigrissement d'accord, mais pour la discipline du programme très compréhensible.
On n'est pas forcément des grands programmeurs, mais comme Jérémy est un gars sympa, on fait tout pour que le
forum reste dans le même état d'esprit.
Connaître la sensation d'avoir fait par sois même une fois ou plusieurs fois dans une vie, c'est vraiment génial.
A+
nondediode a écrit :Source du message j'ai un peu honte de mon usine à gaz
Que ça soit un gros programme qui demande juste un amaigrissement d'accord, mais pour la discipline du programme très compréhensible.
nondediode a écrit :Source du message Parce que là, je trouve que vous êtes plutôt sympa bcp m'aurait laissé me démerder dans mon coin avec un truc pareil
On n'est pas forcément des grands programmeurs, mais comme Jérémy est un gars sympa, on fait tout pour que le
forum reste dans le même état d'esprit.
nondediode a écrit :Source du message Bon quand même il tourne et je suis fier de moi même
Connaître la sensation d'avoir fait par sois même une fois ou plusieurs fois dans une vie, c'est vraiment génial.
A+
Modifié en dernier par Temps-x le sam. 15 déc. 2018 22:18, modifié 4 fois.
LCD origine inconnu
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
LCD origine inconnu
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Le programme est terminé et il fonctionne comme une rolls
Voici le chronogramme tel que j'ai put l'organiser il est pas très complet mais assez clair pour comprendre le projet, après il suffit d'aller lire le programme et de repérer assez facilement chaque module.
Voici le chronogramme tel que j'ai put l'organiser il est pas très complet mais assez clair pour comprendre le projet, après il suffit d'aller lire le programme et de repérer assez facilement chaque module.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
LCD origine inconnu
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Le programme terminé
Code : Tout sélectionner
];---------------------------------------------------------GESTION AFFICHEUR-----------------------------------------------------------------
; TITRE: Gestion d'un afficheur LCD
; DATE: 10/12/2018
; AUTEUR: NONDEDIODE
; PIC UTILISE: PIC16F877
; Gestion PP845 avec afficheur LCD 4 lignes 40 caractères
; le quartz est de 4MHz
; Gestion des 6 entrées audio
;----------------------------------------------------Brochage du PIC sur la carte---------------------------------------------------------
; Port | Broche | E/S | Description
; RA0 | 02 | S | Relais "MUTE"
; RA1 | 03 | S | Relais "PHASE"
; RA2 | 04 | S | Relais statique gauche
; RA3 | 05 | S | Relais statique droit
; RA4 | 06 | S | Relais de cde HT droit et gauche
; RA5 | 07 | S | Relais de cde HT final droit et gauche
; RB0 | 33 | S | LED droite
; RB1 | 34 | S | LED gauche
; RB2 | 35 | S | LEDs droit et gauche rouge
; RB3 | 36 | E | Inter "on / off"
; RB4 | 37 | S | Adressage entrée audio bit A
; RB5 | 38 | S | Adressage entrée audio bit B
; RB6 | 39 | S | Adressage entrée audio bit C
; RB7 | 40 | S | Adressage entrée audio bit D
; RC0 | 15 | E | Bouton poussoir "OK"
; RC1 | 16 | E | Bouton poussoir "INPUT"
; RC2 | 17 | E | Bouton poussoir "PHASE"
; RC3 | 18 | E | Bouton poussoir "MUTE"
; RC4 | 23 | S | E1
; RC5 | 24 | S | R/S
; RC6 | 25 | S | E2
; RC7 | 26 | E | CTRL retour BCD
; RD0 | 19 | S | Sortie bit D7 du LCD
; RD1 | 20 | S | Sortie bit D6 du LCD
; RD2 | 21 | S | Sortie bit D5 du LCD
; RD3 | 22 | S | Sortie bit D4 du LCD
; RD4 | 27 | S | Sortie bit D3 du LCD
; RD5 | 28 | S | Sortie bit D2 du LCD
; RD6 | 29 | S | Sortie bit D1 du LCD
; RD7 | 30 | S | Sortie bit D0 du LCD
;--------------------------------------------------DIRECTIVE D'ASSEMBLAGE POUR MPLAB-------------------------------------------------------
list p=16f877
#include <p16f877.inc>
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;-------------------------------------------------DEFINITION DES REGISTRES TEMPORAIRES------------------------------------------------------
PORTA EQU 0X05 ; Le registre temporaire PORTA se trouve à l'adresse 05
PORTB EQU 0X06 ; Le registre temporaire PORTB se trouve à l'adresse 06
PORTC EQU 0X07 ; Le registre temporaire PORTC se trouve à l'adresse 07
PORTD EQU 0X08 ; Le registre temporaire PORTD se trouve à l'adresse 08
PORTE EQU 0X09 ; Le registre temporaire PORTE se trouve à l'adresse 09
TRISA EQU 0X85 ; Le registre temporaire TRISA se trouve à l'adresse 85
TRISB EQU 0X86 ; Le registre temporaire TRISB se trouve à l'adresse 86
TRISC EQU 0X87 ; Le registre temporaire TRISC se trouve à l'adresse 87
TRISD EQU 0X88 ; Le registre temporaire TRISD se trouve à l'adresse 88
TRISE EQU 0X89 ; Le registre temporaire TRISE se trouve à l'adresse 89
CPT2 EQU 0X0D ; Le registre temporaire CPT2 se trouve à l'adresse 0D
CPT3 EQU 0X0E ; Le registre temporaire CPT3 se trouve à l'adresse 0E
RETARD1 EQU 0X0C ; Le registre temporaire retard1 se trouve à l'adresse 0C
RETARD2 EQU 0X0F ; Le registre temporaire retard2 se trouve à l'adresse 0F
RETARD3 EQU 0X10 ; Le registre temporaire retard3 se trouve à l'adresse 10
RETARD4 EQU 0X11 ; Le registre temporaire retard4 se trouve à l'adresse 11
RETARD5 EQU 0X12 ; Le registre temporaire retard4 se trouve à l'adresse 12
VAL1 EQU 0X14 ; Le registre temporaire VAL1 se trouve à l'adresse 14
VAL2 EQU 0X15 ; Le registre temporaire VAL2 se trouve à l'adresse 15
VAL3 EQU 0X16 ; Le registre temporaire VAL1 se trouve à l'adresse 14
VAL4 EQU 0X17 ; Le registre temporaire VAL2 se trouve à l'adresse 15
;--------------------------------------------PROGRAMME PRINCIPAL----------------------------------------
ORG 0000h ; Adresse de reset
GOTO INIT
;------------------------------------------PROGRAMME D'ARRET----------------------------------------
STOP
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTB,3 ; Test du bouton OFF
RETURN
CALL ARRET ; Appel de l'affichage ARRET
CALL ATTENTE5 ; Appel ATTENTE5
MOVLW B'00110000' ; Relais HT droit et gauche désactivé
MOVWF PORTA ;
MOVLW B'00000100' ; Leds rouges activées
MOVWF PORTB ;
MOVLW 0X30 ; On charge la valeur dans le registre W pour obtenir un clignotement pendant 1min.
MOVWF RETARD4 ; On met W dans RETARD4
MOVLW 0X48 ; On charge la valeur dans le registre W pour obtenir un clignotement pendant 1min.
MOVWF RETARD5 ; On met W dans RETARD5
ATTENTE_B
CALL TEMPO4 ; On appelle la TEMPO4
MOVLW B'00000011' ; On charge la valeur dans le registre W
MOVWF PORTB ; Leds rouges activées
CALL TEMPO4 ; On appelle la TEMPO4
MOVLW B'00000100' ; On charge la valeur dans le registre W
MOVWF PORTB ; Alternance leds rouges et bleues
DECFSZ RETARD4,F ; On décrémente RETARD4,F si RETARD5,F=0 on saute l'instruction suivante
GOTO ATTENTE_B ; Si RETARD5,F=1 retour à ATTENTE_B
MOVLW B'00000000' ; Relais statiques désactivés
MOVWF PORTA
GOTO INIT
STOP2
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTB,3 ; Test du bouton OFF
RETURN
CALL ARRET ; Appel de l'affichage ARRET
CALL ATTENTE5 ; Appel ATTENTE5
MOVLW B'00110000' ; Relais HT droit et gauche désactivé
MOVWF PORTA ;
MOVLW B'00000100' ; Leds rouges activées
MOVWF PORTB ;
GOTO INIT
;-----------------------------------------PROGRAMME D'INITIALISATION----------------------------------------
INIT
CLRF PORTA ; On remet à 0 le port A
CLRF PORTB ; On remet à 0 le port B
CLRF PORTC ; On remet à 0 le port C
CLRF PORTD ; On remet à 0 le port D
CLRF PORTE ; On remet à 0 le port E
BSF STATUS,RP0 ; Selection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISA ; On transfert W sur le registre TRISA pour définir la direction du portA
MOVLW B'00001000' ; On charge la valeur dans le registre W
MOVWF TRISB ; On transfert W sur le registre TRISB pour définir la direction du portB
MOVLW B'10001111' ; On charge la valeur dans le registre W
MOVWF TRISC ; On transfert W sur le registre TRISC pour définir la direction du portC en sortie
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF TRISD ; On transfert W sur le registre TRISD pour définir la direction du portD en sortie
BCF STATUS,RP0 ; Déselection de la page mémoire RP0
BCF STATUS,RP1 ; Déselection de la page mémoire RP1
;---------------------------------------------------------Programme PRINCIPAL-------------------------------------------------------
CLRF PORTA ; Les sorties du port A sont à 0
CLRF PORTB ; Les sorties du port B sont à 0
CLRF PORTC ; Les sorties du port C sont à 0
CLRF PORTD ; Les sorties du port D sont à 0
MOVLW B'00000100' ; Leds rouges activées
MOVWF PORTB
CALL ATTENTE5 ; Appel ATTENTE5
CALL ACCEUIL ; Appel du programme d'acceuil
DEPART
BTFSS PORTB,3 ; Test du bouton "ON"
GOTO DEPART ; Saut à DEPART
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTB,3 ; Bouton toujours activé?
GOTO DEPART ; Retour DEPART
MOVLW B'00000100' ; On charge la valeur dans W
MOVWF PORTA ; Exitation du Relais statique gauche
MOVLW B'00000010' ; On charge la valeur dans W
MOVWF PORTB ; Allumage LED gauche
CALL TEMPO1 ; On appelle TEMPO4
MOVLW B'00001100' ; On charge la valeur dans W
MOVWF PORTA ; On rajoute le relais statique droit
MOVLW B'00000011' ; On charge la valeur dans W
MOVWF PORTB ; Allumage LED droite
CALL TEMPO4 ; On appelle TEMPO4
CALL PRECHAUFFAGE ; Appel de l'affichage du préchauffage
CALL CLIGNOTE ; Appel de l'affichage CLIGNOTE
CALL ACTIF ; Appel du l'affichage ACTIF
TEST_A
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSS PORTC,1 ; Test du bouton "INPUT"
GOTO TEST_A ; Saut à TEST_A
CALL CHOIX ; Appel de l'affichage CHOIX (Input par défaut)
CALL MENU_A ; Appel menu_A [IN] [PHASE] [OFF] [MUTE]
CALL ATTENTE2 ; Appel du programme ATTENTE2
TEST_B
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSC PORTC,1 ; Test du bouton INPUT
CAll TUN_1 ; Appel du programme TUN_1
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,2 ; Test bouton PHASE
CALL PHASE ; Saut à PHASE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,3 ; Test bouton MUTE
CALL MUTE ; Saut à MUTE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
CALL ATTENTE5 ; Appel ATTENTE5
GOTO TEST_B ; Saut à TEST_A
;----------------------------------------------------------Appel du TUNER-------------------------------------
TUN_1
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
CALL ATTENTE5 ; Appel ATTENTE5
CALL TUNER ; Appel de l'affichage TUNER
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
TUN_1A
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSC PORTC,0 ; Test du bouton OK
GOTO TUN_1B ; Saut à TUN_1B
BTFSC PORTC,2 ; Test du bouton "<"
GOTO PHONO_1 ; Saut à PHONO_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO CD1_1 ; Saut à CD1_1
GOTO TUN_1A ; Saut à TUN_1A
TUN_1B
CALL ATTENTE5 ; Appel ATTENTE5
MOVLW B'00010011' ; Adressage BCD sur port C = 1
MOVWF PORTB ; Charge la valeur sur le portB
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_A ; Appel menu_A [IN] [PHASE] [OFF] [MUTE]
CALL ATTENTE2 ; Appel du programme ATTENTE2
TUN_1C
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
BTFSC PORTC,2 ; Test bouton PHASE
CALL PHASE ; Saut à PHASE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,3 ; Test bouton MUTE
CALL MUTE ; Saut à MUTE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSS PORTC,1 ; Test du bouton INPUT
GOTO TUN_1C ; Saut à TUN_1A
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
TUN_1D
BTFSC PORTC,2 ; Test du bouton "<"
GOTO PHONO_1 ; Saut à PHONO_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO CD1_1 ; Saut à CD1_1
GOTO TUN_1D ; Saut à TUN_1D
;----------------------------------------------------------Appel du CD1-------------------------------------
CD1_1
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
CALL ATTENTE5 ; Appel ATTENTE5
CALL CD1 ; Appel de l'affichage CD1
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
CD1_1A
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSC PORTC,0 ; Test du bouton OK
GOTO CD1_1B ; Saut à CD1_1B
BTFSC PORTC,2 ; Test du bouton "<"
GOTO TUN_1 ; Saut à PHON_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO CD2_1 ; Saut à CD2_1
GOTO CD1_1A ; Saut à CD1_1A
CD1_1B
MOVLW B'00100011' ; Adressage BCD sur port C = 2
MOVWF PORTB ; Charge la valeur sur le portB
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_A ; Appel menu_A [IN] [PHASE] [OFF] [MUTE]
CALL ATTENTE2 ; Appel du programme ATTENTE2
CD1_1C
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
BTFSC PORTC,2 ; Test bouton PHASE
CALL PHASE ; Saut à PHASE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,3 ; Test bouton MUTE
CALL MUTE ; Saut à MUTE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSS PORTC,1 ; Test du bouton INPUT
GOTO CD1_1C ; Saut à CD1_1C
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
CD1_1D
BTFSC PORTC,2 ; Test du bouton "<"
GOTO TUN_1 ; Saut à TUN_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO CD2_1 ; Saut à CD2_1
GOTO CD1_1D ; Saut à CD1_1D
;----------------------------------------------------------Appel du CD2-------------------------------------
CD2_1
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
CALL ATTENTE5 ; Appel ATTENTE5
CALL CD2 ; Appel de l'affichage CD2
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
CD2_1A
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSC PORTC,0 ; Test du bouton OK
GOTO CD2_1B ; Saut à CD2_1B
BTFSC PORTC,2 ; Test du bouton "<"
GOTO CD1_1 ; Saut à CD1_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO DVD_1 ; Saut à DVD_1
GOTO CD2_1A ; Saut à CD2_1A
CD2_1B
MOVLW B'00110011' ; Adressage BCD sur port C = 3
MOVWF PORTB ; Charge la valeur sur le portB
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_A ; Appel menu_A [IN] [PHASE] [OFF] [MUTE]
CALL ATTENTE2 ; Appel du programme ATTENTE2
CD2_1C
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
BTFSC PORTC,2 ; Test bouton PHASE
CALL PHASE ; Saut à PHASE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,3 ; Test bouton MUTE
CALL MUTE ; Saut à MUTE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSS PORTC,1 ; Test du bouton INPUT
GOTO CD2_1C ; Saut à CD2_1C
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
CD2_1D
BTFSC PORTC,2 ; Test du bouton "<"
GOTO CD1_1 ; Saut à CD1_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO DVD_1 ; Saut à DVD_1
GOTO CD2_1D ; Saut à TUN_1D
;----------------------------------------------------------Appel du DVD-------------------------------------
DVD_1
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
CALL ATTENTE5 ; Appel ATTENTE5
CALL DVD ; Appel de l'affichage DVD
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
DVD_1A
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSC PORTC,0 ; Test du bouton OK
GOTO DVD_1B ; Saut à DVD_1B
BTFSC PORTC,2 ; Test du bouton "<"
GOTO CD2_1 ; Saut à CD2_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO TAPE_1 ; Saut à TAPE_1
GOTO DVD_1A ; Saut à DVD_1A
DVD_1B
MOVLW B'01000011' ; Adressage BCD sur port C = 4
MOVWF PORTB ; Charge la valeur sur le portB
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_A ; Appel menu_A [IN] [PHASE] [OFF] [MUTE]
CALL ATTENTE2 ; Appel du programme ATTENTE2
DVD_1C
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
BTFSC PORTC,2 ; Test bouton PHASE
CALL PHASE ; Saut à PHASE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,3 ; Test bouton MUTE
CALL MUTE ; Saut à MUTE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSS PORTC,1 ; Test du bouton INPUT
GOTO DVD_1C ; Saut à DVD_1C
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
DVD_1D
BTFSC PORTC,2 ; Test du bouton "<"
GOTO CD2_1 ; Saut à CD2_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO TAPE_1 ; Saut à TAPE_1
GOTO DVD_1D ; Saut à DVD_1D
;----------------------------------------------------------Appel du Magneto-------------------------------------
TAPE_1
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
CALL ATTENTE5 ; Appel ATTENTE5
CALL TAPE ; Appel de l'affichage TAPE
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
TAPE_1A
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSC PORTC,0 ; Test du bouton OK
GOTO TAPE_1B ; Saut à TAPE_1B
BTFSC PORTC,2 ; Test du bouton "<"
GOTO DVD_1 ; Saut à CD2_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO PHONO_1 ; Saut à PHONO_1
GOTO TAPE_1A ; Saut à TAPE_1A
TAPE_1B
MOVLW B'01010011' ; Adressage BCD sur port C = 5
MOVWF PORTB ; Charge la valeur sur le portB
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_A ; Appel menu_A [IN] [PHASE] [OFF] [MUTE]
CALL ATTENTE2 ; Appel du programme ATTENTE2
TAPE_1C
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
BTFSC PORTC,2 ; Test bouton PHASE
CALL PHASE ; Saut à PHASE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,3 ; Test bouton MUTE
CALL MUTE ; Saut à MUTE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSS PORTC,1 ; Test du bouton INPUT
GOTO TAPE_1C ; Saut à TAPE_1C
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
TAPE_1D
BTFSC PORTC,2 ; Test du bouton "<"
GOTO DVD_1 ; Saut à DVD_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO PHONO_1 ; Saut à PHONO_1
GOTO TAPE_1D ; Saut à TAPE_1D
;----------------------------------------------------------Appel du Phono-------------------------------------
PHONO_1
CALL TEMPO2 ; Appel de TEMPO2
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
CALL ATTENTE5 ; Appel ATTENTE5
CALL PHONO ; Appel de l'affichage PHONO
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
PHONO_1A
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSC PORTC,0 ; Test du bouton OK
GOTO PHONO_1B ; Saut à PHONO_1B
BTFSC PORTC,2 ; Test du bouton "<"
GOTO TAPE_1 ; Saut à TAPE_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO TUN_1 ; Saut à TUN_1
GOTO PHONO_1A ; Saut à PHONO_1A
PHONO_1B
MOVLW B'01100011' ; Adressage BCD sur port C = 6
MOVWF PORTB ; Charge la valeur sur le portB
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_A ; Appel menu_A [IN] [PHASE] [OFF] [MUTE]
CALL ATTENTE2 ; Appel du programme ATTENTE2
PHONO_1C
BTFSC PORTB,3 ; Test du bouton OFF
CALL STOP ; Appel du programme d'arret
BTFSS PORTC,7 ; Test du ctrl retour BCD
GOTO TEST_A ; Saut à TEST_A
BTFSC PORTC,2 ; Test bouton PHASE
CALL PHASE ; Saut à PHASE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSC PORTC,3 ; Test bouton MUTE
CALL MUTE ; Saut à MUTE
CALL ATTENTE5 ; Appel ATTENTE5
BTFSS PORTC,1 ; Test du bouton INPUT
GOTO PHONO_1C ; Saut à PHONO_1C
CALL ATTENTE5 ; Appel ATTENTE5
CALL MENU_B ; [IN] [<] [OFF] [>] [OK]
CALL ATTENTE5 ; Appel ATTENTE5
PHONO_1D
BTFSC PORTC,2 ; Test du bouton "<"
GOTO TAPE_1 ; Saut à TAPE_1
BTFSC PORTC,3 ; Test du bouton ">"
GOTO TUN_1 ; Saut à PHONO_1
GOTO PHONO_1D ; Saut à PHONO_1D
;-------------------------------------------------------programme de clignote---------------------------------------------------------
CLIGNOTE
MOVLW 0XD2 ; On charge la valeur dans le registre W pour obtenir un clignotement pendant 2min
MOVWF RETARD4 ; On met W dans RETARD4
ATTENTE_A
BTFSC PORTB,3 ; On saute l'instruction suivante si RC1=0
CALL STOP2 ; Si RC1=1 on saute à Stop2
MOVLW B'00000011' ; On charge la valeur dans le registre W
MOVWF PORTB ; On met W dans le port C
CALL TEMPO4 ; On appelle la TEMPO4
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF PORTB ; On met W dans le port B
CALL TEMPO4 ; On appelle la TEMPO4
DECFSZ RETARD4,F ; On décrémente RETARD4,F si RETARD5,F=0 on saute l'instruction suivante
GOTO ATTENTE_A ; Si RETARD5,F=1 retour à ATTENTE_A
MOVLW B'00101100' ; On charge la valeur dans le registre W
MOVWF PORTA ; Exitation relais tempo1 maintient du relais 6V3
MOVLW 0X2A ; On charge la valeur dans le registre W pour obtenir un clignotement pendant 30'
MOVWF RETARD4 ; On met W dans RETARD4
ATTENTE_C
BTFSC PORTB,3 ; On saute l'instruction suivante si RC1=0
CALL STOP2 ; Si RC1=1 on saute à Stop2
MOVLW B'00000011' ; On charge la valeur dans le registre W
MOVWF PORTB ; On met W dans le port B
CALL TEMPO4 ; On appelle la TEMPO4
MOVLW B'00000000' ; On charge la valeur dans le registre W
MOVWF PORTB ; On met W dans le port B
CALL TEMPO4 ; On appelle la TEMPO4
DECFSZ RETARD4,F ; On décrémente RETARD4,F si RETARD5,F=0 on saute l'instruction suivante
GOTO ATTENTE_C ; Si RETARD5,F=1 retour à ATTENTE_B
MOVLW B'00000011' ; On charge la valeur dans le registre W
MOVWF PORTB ; On met W dans le port B
MOVLW B'00111100' ; On charge la valeur dans le registre W
MOVWF PORTA ; Exitation relais tempo1 maintient du relais 6V3
RETURN
LCD origine inconnu
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
L'autre partie
Code : Tout sélectionner
;---------------------------------------------------------Message d'arrêt--------------------------------------
ARRET
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCE ; Déplace le curseur à la 3ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'H' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'S' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'R' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'R' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
CALL CONFIG_B ; Va à CONFIG
MOVLW 0X90 ; Déplace le curseur à la 5ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW 'P' ; Affiche message
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
CALL TEMPO1 ; On appelle TEMPO2
RETURN
;---------------------------------------------------------Page d'acceuil-------------------------------------------------------
ACCEUIL
CALL CONFIG_A ; Va à CONFIG_A
MOVLW 0X91 ; Déplace le curseur à la 3ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW '8' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW '4' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW '5' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 0XCE ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'M' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'S' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'B' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'Y' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
CALL CONFIG_B ; Va à CONFIG_B
MOVLW 0X8D ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW 'B' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'Y' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0XD2 ; Déplace le curseur à la 5ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW 0X5B ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0X5D ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
RETURN
;----------------------------------------------------------------Page de préchauffage----------------------------------------
PRECHAUFFAGE
CALL CONFIG_A ; Va à CONFIG
MOVLW 0X8E ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'R' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'H' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'G' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0XD0 ; Déplace le curseur à la 5ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'P' ; Affiche message
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
CALL CONFIG_B ; Va à CONFIG
MOVLW 0XD1 ; Déplace le curseur à la 5ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW 0X5B ; Affiche message
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 0X5D ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
RETURN
;----------------------------------------------------------------------Page démarrage du programme---------------------------------------
ACTIF
CALL CONFIG_A ; Va à CONFIG
MOVLW 0X8F ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'M' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0XCE ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'H' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'X' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
MOVLW '?' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF_A
CALL CONFIG_B ; Va à CONFIG
MOVLW 0XC0 ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0XD1 ; Déplace le curseur à la 5ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche message
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
RETURN
;-----------------------------------------------------------------CHOIX des entrées-----------------------------------------------
CHOIX
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCB ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW ':' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'R' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
RETURN
;---------------------------------------------------------------Menu fonctions -----------------------------------
MENU_A
CALL CONFIG_B ; Va à CONFIG
MOVLW 0XC0 ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0XC7 ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'H' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'S' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0XD1 ; Déplace le curseur à la 5ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche message
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 0XDA ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'M' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
RETURN
;---------------------------------------------------------------Menu défilement des sources -----------------------------------
MENU_B
BTFSC PORTB,3 ; Poussoir activé?
GOTO STOP2 ; Retour DEPART
CALL CONFIG_B ; Va à CONFIG
MOVLW 0XC0 ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'I'
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'N'
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']'
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0XC9 ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW '<' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 0XD1 ; Déplace le curseur à la 5ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche message
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 'F' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 0XDC ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW '>' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
MOVLW 0XE4 ; Déplace le curseur à la 3ème colonne de la 2ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; Enable = 0
MOVLW '[' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW 'K' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF_A
MOVLW ']' ; Affiche caractère
CALL CAR_AFF_B ; Va à CAR_AFF
RETURN
;-----------------------------------------------------------------APPEL des fonctions PHASE et MUTE----------------------------------
PHASE
MOVLW B'00111110' ; Mode changement de phase
MOVWF PORTA ; Relais PHASE activé
CALL TEMPO2 ; Appel tempo
MOVLW B'00111100' ; Mode silence
MOVWF PORTA ; Relais MUTE désactivé
RETURN
MUTE
MOVLW B'00111101' ; Mode silence
MOVWF PORTA ; Relais MUTE activé
CALL TEMPO2 ; Appel tempo
RETOUR
BTFSS PORTC,3 ; Test du bouton MUTE
GOTO RETOUR ; Retour RETOUR
MOVLW B'00111100' ; Mode du son rétabli
MOVWF PORTA ; Relais MUTE désactivé
CALL TEMPO2 ; Appel tempo
RETURN
;--------------------------------------------------------------Affichage des sources audio------------------------------------------------
TUNER
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCB ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW ':' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'R'
CALL CAR_AFF_A ; Va à CAR_AFF
RETURN
CD1
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCB ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW ':' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW '1' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
RETURN
CD2
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCB ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW ':' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'C' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW '2' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
RETURN
DVD
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCB ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW ':' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'V' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'D' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
RETURN
TAPE
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCB ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW ':' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'A' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'E' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
RETURN
PHONO
CALL CONFIG_A ; Va à CONFIG
MOVLW 0XCB ; Déplace le curseur à la 2ème colonne de la 1ere ligne
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; Enable = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; Enable = 0
MOVLW 'I' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'U' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'T' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW ':' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 0X20 ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'P' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'H' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'N' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
MOVLW 'O' ; Affiche caractère
CALL CAR_AFF_A ; Va à CAR_AFF
RETURN
;---------------------------------------------------------CONFIGURATION AFFICHEUR Ligne 1 et 2-----------------------------------------------------------
CONFIG_A
MOVLW B'00111000' ; Fonction SET 8 bits 2 lignes police 5X7
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; E1 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; E1 = 0
MOVLW B'00001000' ; Affichage off
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; E1 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; E1 = 0
MOVLW B'00000001' ; Efface l'écran et positionne le curseur à 0
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; E1 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; E1 = 0
MOVLW B'00000110' ; Déplacement curseur vers la droite
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; E1 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; E1 = 0
MOVLW B'00001100' ; Contrôle de l'affichage (affichage on, curseur non visible)
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,4 ; E1 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,4 ; E1 = 0
RETURN
;---------------------------Ecriture dans l'afficheur lignes 1 et 2-------------------------------------
CAR_AFF_A
MOVWF PORTD ; Charge le contenu de W dans le port B
CALL ATTENTE5 ; Appel de la temporisation ATTENTE5
MOVLW B'00110000' ; RS = 1, RW = 0, E1 = 1, E2 = 0
MOVWF PORTC ; Et on transfert sur le port C le contenu de W
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
MOVLW B'00000000' ; RS = 0, RW = 0, E1 = 0, E2 = 0
MOVWF PORTC ;
RETURN
;---------------------------------------------------------CONFIGURATION AFFICHEUR Lignes 3 et 4-----------------------------------------------------------
CONFIG_B
MOVLW B'00111000' ; Fonction SET 8 bits 2 lignes police 5X7
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00001000' ; Affichage off
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00000001' ; Efface l'écran et positionne le curseur à 0
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00000110' ; Déplacement curseur vers la droite
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
MOVLW B'00001100' ; Contrôle de l'affichage (affichage on, curseur non visible)
MOVWF PORTD ; Charge le contenu de W dans le port D
BSF PORTC,6 ; E2 = 1
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
BCF PORTC,6 ; E2 = 0
RETURN
;---------------------------Ecriture dans l'afficheur lignes 3 et 4-------------------------------------
CAR_AFF_B
MOVWF PORTD ; Charge le contenu de W dans le port B
CALL ATTENTE5 ; Appel de la temporisation ATTENTE5
MOVLW B'01100000' ; RS = 1, RW = 0, E1 = 1, E2 = 0
MOVWF PORTC ; Et on transfert sur le port C le contenu de W
CALL ATTENTE6 ; Appel de la temporisation ATTENTE6
MOVLW B'00000000' ; RS = 0, RW = 0, E1 = 0, E2 = 0
MOVWF PORTC ;
RETURN
;---------------------------Programme de temporisation 1-------------------------------------
TEMPO1
MOVLW 0X7F ; On met FF dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVWF RETARD3 ; On met W dans le registre retard3
MOVWF RETARD4 ; On met W dans le registre retard4
ATTENTE1
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction si le registre retard1 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X80 ; On met 80 dans le registre W
MOVWF RETARD1 ; On met W dans RETARD1
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction si le registre retard2 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X08 ; On met 08 dans le registre W
MOVWF RETARD2 ; On met W dans RETARD2
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction si le registre retard3 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
MOVLW 0X08 ; On met 08 dans le registre W
MOVWF RETARD3 ; On met W dans RETARD3
DECFSZ RETARD4,F ; On décrémente retard4 et on saute la prochaine instruction si le registre retard4 = 0
GOTO ATTENTE1 ; Sinon retour à attente1
RETURN ; Retour au programme principal
;------------------------------programme de temporisation 2---------------------------
TEMPO2
MOVLW 0X7F ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X12 ; On met 12 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE2
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
MOVLW 0XC8 ; On recharge retard1
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE2 ; Sinon retour à attente2
RETURN ; Retour au programme principal après l'instruction call
;------------------------------programme de temporisation 3---------------------------
TEMPO3
MOVLW 0X7F ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X80 ; On met 80 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE3
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
MOVLW 0XC8 ; On recharge retard1
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE3 ; Sinon retour à attente3
RETURN ; Retour au programme principal après l'instruction call
;---------------------------Programme de temporisation 4-------------------------------------
TEMPO4
MOVLW 0X5A ; On met 7F dans le registre W
MOVWF RETARD1 ; On met W dans le registre retard1
MOVWF RETARD2 ; On met W dans le registre retard2
MOVLW 0X15 ; On met 12 dans le registre W
MOVWF RETARD3 ; On met W dans le registre retard3
ATTENTE4
DECFSZ RETARD1,F ; On décrémente retard1 et on saute la prochaine instruction
; si le registre retard1 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
MOVLW 0X6E ; On recharge retard1 6e
MOVWF RETARD1 ; Avec C8 (200)
DECFSZ RETARD2,F ; On décrémente retard2 et on saute la prochaine instruction
; si le registre retard2 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
MOVLW 0X80 ; On recharge retard2
MOVWF RETARD2 ; Avec 80 (128)
DECFSZ RETARD3,F ; On décrémente retard3 et on saute la prochaine instruction
; si le registre retard3 = 0
GOTO ATTENTE4 ; Sinon retour à attente4
RETURN ; Retour au programme principal après l'instruction call
;---------------------------------------------------SOUS PROGRAMME TEMPO D'ATTENTE---------------------------------------------------------------
ATTENTE5
MOVLW 0XFF ; On met FF dans le registre W
MOVWF CPT2 ; On met W dans le registre CPT2
ATT2
DECFSZ CPT2,1 ; On décrémente CPT2,1 et on saute la prochaine instruction
GOTO ATT2 ; Sinon retour à ATT2
RETURN ; Retour au programme principal après l'instruction call
ATTENTE6
MOVLW 0X1E ; On met 14 dans le registre W
MOVWF CPT3 ; On met W dans le registre CPT3
ATT3
CALL ATTENTE5 ; On appelle ATTENTE5
DECFSZ CPT3,1 ; On décrémente CPT3,1 et on saute la prochaine instruction
GOTO ATT3 ; Sinon retour à ATT3
RETURN ; Retour au programme principal après l'instruction call
END
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 127 invités