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

#91 Message par nondediode » mer. 16 déc. 2020 16:25

Petite parenthèse:

Aujourd'hui j'ai fait des démarrage d'ampli sans soucis; tension secteur 239V hier j'avais des bogs à chaque démarrage ou presque; tension secteur 228V
Cela peut paraitre idiot comme raisonnement, mais sur les amplis à tubes, la tension secteur à une importance majeur sur le fonctionnement des appareils. Cela se comprends par le fait que les tensions d'alims sont très largement supérieur à la tension réseau. Sur un ampli comme le mien j'ai une alim de 1200V soit 5 fois la tension réseau! Lorsque la tension réseau est instable ça se répercute tout de suite sur l'écoute. Sur une lampe on a la polarisation grille / cathode et les variation secteur influe énormément sur les réglages. J'ai donc habitude de vérifier en permanence la tension réseau et j'ai d'ailleurs réaliser un bloc réseau avec un affichage des paramètres. J'ai donc sous les yeux, la tension, la conso et le courant absorbé c'est plus ou moins précis (made in China Amazon) mais ça me donne une indication relative à cet usage.

Ceci dit, je viens de modifier le programme, il n'y a bien sûr pas le prg bootloader mais j'ai écris dans init les nop. Peux tu regarder si ça te semble correct et vérifie aussi toutes les variables que j'ai modifié. Dans les config d'affichage ça me parait un peu plus tordu parce que du coup je travaille sur le portC et le port E à la fois alors je ne sais pas si ce que j'ai écris est correct à vérifier aussi. J'ai complilé le programme et c'est bon il m'a bien crée le HEX

Code : Tout sélectionner

;---------------------------------------------------------GESTION AFFICHEUR-----------------------------------------------------------------

;
 TITRE: Gestion d'un afficheur LCD
; DATE: 10/12/2018
; AUTEUR: J.P. FRUCHARD
; 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  |  E  | Inter "on / off"                    
;  RB1  |    34  |  S  | LED gauche                    
;  RB2  |    35  |  S  | LED droite                                           
;  RB3  |    36  |  S  | LEDs droit et gauche rouge                    
;  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

CBLOCK        0x20            
; Début de la zone (0x20 à 0x6F)

CPT2             :1              ; variable
CPT3            
:1              ; variable
RETARD1            
:1              ; variable
RETARD2            
:1              ; variable
RETARD3            
:1              ; variable
RETARD4            
:1              ; variable
RETARD5            
:1              ; variable
VAL1            
:1              ; variable
VAL2            
:1              ; variable
VAL3            
:1              ; variable
VAL4            
:1              ; variable

ENDC

;--------------------------------------------PROGRAMME PRINCIPAL----------------------------------------

ORG    0000h            ; Adresse de reset
    GOTO    INIT
    NOP
    NOP

;------------------------------------------PROGRAMME D'ARRET----------------------------------------

STOP
    BCF    STATUS,C    ; Tester le bit C du registre status
    BTFSS    PORTB,0        ; Test du bouton OFF
    RETURN
    CALL    TEMPO2        ; Appel de TEMPO2
    BCF    STATUS,C    ; Tester le bit C du registre status
    BTFSS    PORTB,0        ; On test le bouton OFF
    RETURN
    CALL    ARRET        ; Appel de l'
affichage ARRET
    CALL    ATTENTE5    
; Appel ATTENTE5
    MOVLW    B
'00001100'    ; On charge la valeur dans W     MOVLW    B'00110000'
    MOVWF    PORTA        ; Relais HT droit et gauche désactivé
    MOVLW    B
'00001000'    ; On charge la valeur dans W
    MOVWF    PORTB        
; Leds rouges activées
    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
'00000110'    ; On charge la valeur dans le registre W        
    MOVWF    PORTB        
; Leds bleues activées
    CALL    TEMPO4        
; On appelle la TEMPO4
    MOVLW    B
'00001000'    ; 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'    ; On charge la valeur dans W
    MOVWF    PORTA        ; Relais statiques désactivés    
    BSF    STATUS,C    ; Tester le bit C du registre status
    RETURN
STOP2
    BCF    STATUS,C    ; Tester le bit C du registre status
    BTFSS    PORTB,0        ; Test du bouton OFF
    RETURN
    CALL    TEMPO2        ; Appel de TEMPO2
    BCF    STATUS,C    ; Tester le bit C du registre status
    BTFSS    PORTB,0        ; On test le bouton OFF
    RETURN
    CALL    ARRET        ; Appel de l'
affichage ARRET
    CALL    ATTENTE5    
; Appel ATTENTE5
    MOVLW    B
'00110000'    ; On charge la valeur dans W
    MOVWF    PORTA        
; Relais HT droit et gauche désactivé
    MOVLW    B
'00001000'    ; On charge la valeur dans W
    MOVWF    PORTB        
; Leds rouges activées         

    BSF    STATUS
,C    ; Tester le bit C du registre status
    RETURN

;-----------------------------------------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'
00000001'    ; 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
    MOVLW    B'
00000001'    ; On charge la valeur dans le registre W    
    MOVWF    TRISE        ; On transfert W sur le registre TRISE pour définir la direction du portE 
    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
    CLRF    PORTE        ; Les sorties du port E sont à 0
    MOVLW    B'
00001000'    ; Leds rouges activées
    MOVWF    PORTB
    CALL    ATTENTE5    ; Appel ATTENTE5    
    CALL    ACCEUIL        ; Appel du programme d'
acceuil
DEPART
    BTFSS    PORTB
,0        ; Test du bouton "ON"
    GOTO    DEPART        ; Saut à DEPART
    CALL    TEMPO2        
; Appel de TEMPO2
    BTFSS    PORTB
,0        ; 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
'10000110'    ; 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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    BTFSC    PORTC
,1        ; Test du bouton INPUT
    GOTO    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
    CALL    STOP        
; Appel du programme d'arret
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    CALL    ATTENTE5    ; Appel ATTENTE5
    GOTO    TEST_B        ; Saut à TEST_A

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

TUN_1
    CALL    TEMPO2        ; Appel de TEMPO2
    BTFSS    PORTE,0        ; 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
    CALL    STOP        
; Appel du programme d'arret
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    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'
10010111'    ; 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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    BTFSS    PORTE
,0        ; 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    PORTE
,0        ; 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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    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
'10100111'    ; 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
    CALL    STOP        
; Appel du programme d'arret
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    BTFSS    PORTE,0        ; 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    PORTE,0        ; 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
    CALL    STOP        
; Appel du programme d'arret
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    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'
10110111'    ; 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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    BTFSS    PORTE
,0        ; 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    PORTE
,0        ; 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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    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
'11000111'    ; 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
    CALL    STOP        
; Appel du programme d'arret
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    BTFSS    PORTE,0        ; 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    PORTE,0        ; 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
    CALL    STOP        
; Appel du programme d'arret
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    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'
11010111'    ; 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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    BTFSS    PORTE
,0        ; 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    PORTE
,0        ; 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
    CALL    STOP        ; Appel du programme d'
arret
    BTFSC    STATUS
,C    ; Tester le bit C du registre status
    GOTO    INIT        
; Saut à INIT
    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
'11100111'    ; 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
    CALL    STOP        
; Appel du programme d'arret
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    BTFSS    PORTE,0        ; 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
    CALL    STOP2        ; Appel du programme STOP2
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    MOVLW    B'
10000110'    ; 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'
10000000'    ; 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
    CALL    STOP2        ; Appel du programme STOP2
    BTFSC    STATUS,C    ; Tester le bit C du registre status
    GOTO    INIT        ; Saut à INIT
    MOVLW    B'
10000110'    ; 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'
10000000'    ; 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
'10000110'    ; 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
    BCF    STATUS
,C    ; Remise à 0 de STATUS
    RETURN

;---------------------------------------------------------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    PORTE,1        ; Enable = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTE,1        ; 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    0X8E        
; 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    
'T'        ; 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    
'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    
'M'        ; 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    
'O'        ; 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    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF_A
    MOVLW    
'R'        ; 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    0X8A        
; Déplace le curseur à la 3ème colonne de la 2ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; Enable = 0
    MOVLW    
'P'        ; 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    
'8'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'4'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'5'        ; 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    
'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    
'J'        ; 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    0X20        
; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'F'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'R'        ; 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    
'C'        ; 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    
'R'        ; 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    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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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

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

#92 Message par nondediode » mer. 16 déc. 2020 16:28

la suite:

Code : Tout sélectionner

;----------------------------------------------------------------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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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
    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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE
,1        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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 
    MOVLW    B'
00000000'    ; RS = 0, RW = 0, E1 = 0, E2 = 0 
    MOVWF    PORTE
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    MOVLW    B'
00000000'    ; RS = 0, RW = 0, E1 = 0, E2 = 0 
    MOVWF    PORTC        ; 
    MOVLW    B'
00000000'    ; RS = 0, RW = 0, E1 = 0, E2 = 0 
    MOVWF    PORTE
    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    PORTE,1        ; E2 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTE,1        ; E2 = 0

    MOVLW    B'
00001000'    ; Affichage off
    MOVWF    PORTD        ; Charge le contenu de W dans le port D
    BSF    PORTE,1        ; E2 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTE,1        ; 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    PORTE
,1        ; E2 = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; E2 = 0


    MOVLW    B
'00000110'    ; Déplacement curseur vers la droite
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTE
,1        ; E2 = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTE
,1        ; 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    PORTE,1        ; E2 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTE,1        ; 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
    BSF    PORTC
,5
    BSF    PORTE
,1
;    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
    BCF    PORTC
,5
    BCF    PORTE
,1
;    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
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#93 Message par satinas » mer. 16 déc. 2020 18:11

Je regarderai plus tard et on va lui faire subir une bonne cure d'amaigrissement à ton programme, comme le disaient Temps-x et Paul :)
Après avoir installé le bootloader, parce que pour le moment le seul 16F877 qui me restait a rendu l'âme, il reste un 16F876, pourvu qu'il tienne. Pas facile de retrouver ses marques. Difficile d'en trouver des 16F877 à bon prix, dans les musées peut-être, j'ai peur d'en demander à Microchip, ils vont me jeter des pierres. On trouve surtout des 16F877A, et j'ai plein de LF, mais c'est pas les mêmes.

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

#94 Message par nondediode » mer. 16 déc. 2020 18:53

Je ne sais pas ce qu'il me reste, je vais regarder au pire je peux t'en envoyer 1

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

#95 Message par satinas » mer. 16 déc. 2020 19:00

Merci, pas la peine, j'en ai commandé un, juste pour en avoir un, ne pas avoir de 16F877, non mais :)
Les 16F87X je les faisais tourner avec le bootloader à 16MHz et 38400 bauds, avec une sortie debug bit bang à 57600 bauds.
J'ai passé le 16F876 à 4MHz et il se charge bien à 19200 bauds.
Je regarderai ton programme demain.

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

#96 Message par nondediode » mer. 16 déc. 2020 19:02

Pas de soucis je peu t'en envoyer 1 c'est du 16f877-20P c'est ce que j'utilise pour ce programme

Donne moi ton adresse par MP

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

#97 Message par nondediode » mer. 16 déc. 2020 19:04

Nos réponses se sont croisées, mais sinon gène toi pas je te le donne de bon cœur

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

#98 Message par satinas » mer. 16 déc. 2020 19:23

Si celui que je recevrai ne convient pas, je te ferai signe. J'y touche plus aux 16F, à part pour tester le bootloader, car il y en a des nouveaux qui sortent.

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

#99 Message par satinas » jeu. 17 déc. 2020 11:48

Bonjour,
- Ok pour les modifications du programme.
- Il faut enlever le flag WRT_ENABLE_OFF de la config hardware du pic
- Mon 16F876 4MHz ne démarre pas avec _XT_OSC, il lui faut _HS_OSC

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

#100 Message par nondediode » jeu. 17 déc. 2020 13:41

Bonjour Satinas,

OK je vais le supprimer. Dois-je aussi remplacer _XT_OSC par _HS_OSC?


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 35 invités