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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#11 Message par nondediode » mer. 12 déc. 2018 13:08

Bonjour SATINAS,

J'apprécie à chaque fois tes réponses, elles me sont très enrichissantes.

Effectivement faire une boucle alternative avec le PIC est une solution mais bon comme cela a juste un aspect luxueux dans le prg je vais l'oublier pour l'instant.
OK pour la fonte de caractère.

Merci pour tous ces renseignements

Je continue sur ce prg, il est certain qu'au final que lorsque je l'aurais fini il pourra sembler une usine à gaz mais je compte sur la communauté pour le simplifier. :wink:

Bonne journée

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#12 Message par nondediode » ven. 14 déc. 2018 14:58

Bonjour à toute l'équipe,

Je sèche :evil:

Depuis hier, je cherche à créer une boucle dans mon programme pour venir chercher une action selon un choix dans le programme.
Je m'explique:

J'ai 7 écrans qui représente individuellement une source audio que je doit sélectionner par l'action des touches de défilement nommées "<" ou ">"

Source : DIRECT
Source : TUNER
Source :CD1
Source :CD2
Source :DVD
Source :TAPE
Source :PHONO

J'ai cherché plusieurs méthodes et à part de créer une usine à gaz en créant des config dans X routines (14) qui combinerai les actions des 2 touches pour chaque écran je me dis qu'il doit bien avoir un moyen simple pour m'affranchir ce cette méthode hasardeuse :sad:

J'ai essayé en créant un registre temporaire qui chargerait une valeur de départ "0" et que j'incrémenterai ou décrémenterai en fonction de la source choisie.
Mais bien des choses m'échappent pour arriver à faire fonctionner cette méthode. :mur:

Si vous avez des idées je suis preneur

En vous remerciant tous

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#13 Message par nondediode » ven. 14 déc. 2018 20:26

Bon il me semble avoir trouvé une méthode empirique pour faire fonctionner cette boucle mais ça restera une usine à gaz.

Ceci étant je me trouve confronté à un pb délicat que j'aimerai bien résoudre.

J'utilise le port C pour 2 fonctions;

Les bits RC4 à RC6 sont les bits de cde E1, E2 et R/S de l'afficheur.
RC7 est en entrée pour recevoir une info
RC0 à RC3 sont des bits de cde pour envoyer une cde binaire sur une autre carte

Le soucis c'est que ça se met en conflit quand j'ai besoin d'envoyer une valeur sur RC0 à RC3 alors que la séquence d'après j'ai une donné à envoyer à l'afficheur.

La cde est la suivante;

EX: Pour envoyer un code sur RCO à RC3

MOVLW B'00001101'
MOVWF PortC

Juste après Pour écrire dans l'afficheur j'envoie ceci qui est une routine dans ma config d'afficheur

MOVLW B'01100000'
MOVWF PortC

Forcement ça se met en conflit, mes broches RC0 à RC4 repassent obligatoirement à 0

Si je passe par la cde BSF pour la routine de l'afficheur celui-ci ne fonctionne plus

BSF PORTC,5
BSF PORTC,6


Y'a t'il un autre moyen pour y remédier sans avoir à changer de port?

En attendant vos réponses je continue de chercher

LCD origine inconnu
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#14 Message par satinas » ven. 14 déc. 2018 21:14

Bonsoir,
Il n'y a pas de raison que le lcd ne puisse être piloté avec des instructions BSF.
Il y a aussi les instructions IORWF et ANDWF pour modifier sélectivement des bits.
Pour le post précédent, il faudrait avoir le schéma complet, et un exemple d'affichage pour avoir une idée de ce que fait ton appli. Je suppose qu'elle ne se résume pas au choix d'une entrée parmi 7 à l'aide de 2 poussoirs.
Donne nous ton programme actuel, on essaiera de le simplifier.
Modifié en dernier par satinas le ven. 14 déc. 2018 21:17, modifié 1 fois.

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#15 Message par nondediode » ven. 14 déc. 2018 21:15

Au final, ne trouvant rien, j'ai jonglé avec les ports en inversant certains qui étaient en entrées avec d'autres qui étaient en sorties.
Ainsi, sur le port utilisé pour l'afficheur je n'ai que R/S, E1 et E2 qui sont en sorties tous les autres sont affectés en entrées.

En revanche si il existe une méthode pour diviser un port en 2 je suis preneur :-D
J'ai rien trouvé sur le cours Bigonof à ce sujet et pas plus sur le net.

Bonne soirée à tous

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#16 Message par nondediode » ven. 14 déc. 2018 21:19

satinas a écrit :Bonsoir,
Il n'y a pas de raison que le lcd ne puisse être piloté avec des instructions BSF.
Pour le post précédent, il faudrait avoir le schéma complet, et un exemple d'affichage pour avoir une idée de ce que fait ton appli. Je suppose qu'elle ne se résume pas au choix d'une entrée parmi 7 à l'aide de 2 poussoirs.
Donne nous ton programme actuel, on essaiera de le simplifier.


Bonsoir Satinas

Demain je mettrai en ligne
Je suis pas arrivé à faire fonctionner 2 BSF en même temps sur un même port
Pour le simplifier y'a du taf :lol: :lol:


Bonne soirée :wink:

LCD origine inconnu
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#17 Message par JMarc » ven. 14 déc. 2018 23:33

Bonsoir nondediode et satinas

C’est toujours avec le 16f877 ou bien tu as pris un 18f ?

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#18 Message par nondediode » sam. 15 déc. 2018 08:48

Bonjour Satinas, Jean Marc et tous les autres,

Le PIC est un 16F877, Il me semble que ma platine EasyPic ne passe pas la série 18F.
Je vais vous mettre mon prg en ligne courant de matinée.

Pour ce qui est du pb de cde BSF, j'ai modifié les affectations de port pour n'avoir en sortie que les cdes R/S, E1 et E2 toutes les autres sorties de ce même port sont en entrées. Je ne devrait donc plus rencontrer de pb.

A+

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#19 Message par nondediode » sam. 15 déc. 2018 10:53

Pour commencer voici les photos des différents écrans qui vous aideront à comprendre le tps que je vous écrive le chronogramme du prg et que je vous envoie le prg complet .
Oui, je sais, j'ai commencé par écrire le prg avant de faire préalablement le chronogramme :oops: je suis victime de ma précipitation :lol:
Ceci étant, ça commence à sentir bon pour la fin de ce prg qui je rappelle est loin d'être terminé puisqu'il me restera le mode d'arrêt à finaliser, et qq routines à revoir pour obtenir un prg fonctionnel. pour l'instant c'est juste la partie du déroulement et les accès aux différents écrans.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

LCD origine inconnu
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#20 Message par nondediode » sam. 15 déc. 2018 11:01

Le programme ne passe pas dans sa totalité, je le fait donc en 2 fois:



Code : Tout sélectionner

;
;----------------------------------------------------
Brochage du PIC sur la carte--------------------------------------------------------- 
;  Port | Broche | E/| 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----------------------------------------

STOP2
    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    
    GOTO    INIT         ; Retour à l'
étiquette 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
    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    STOP2        ; 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    STOP2        ; 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    STOP2        
; Appel du programme d'arret
    CALL    ATTENTE5    ; Appel ATTENTE5
    GOTO    TEST_B        ; Saut à TEST_A

;----------------------------------------------------------Appel du TUNER-------------------------------------

TUN_1
    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    STOP2        
; 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    STOP2        ; 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
    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    STOP2        ; 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    STOP2        
; 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
    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    STOP2        
; 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    STOP2        ; 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
    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    STOP2        ; 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    STOP2        
; 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
    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    STOP2        
; 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    STOP2        ; 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
    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    STOP2        ; 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    STOP2        
; 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    0X19        ; On charge la valeur D2 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    0X05        ; On charge la valeur 2A 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

    

;---------------------------------------------------------Page d'acceuil-------------------------------------------------------

ACCEUIL
    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
    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



A suivre
........................


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 41 invités