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
Jérémy
Administrateur du site
Administrateur du site
Messages : 2764
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#51 Message par Jérémy » mar. 15 déc. 2020 13:40

 ! Message de modération :
Bonjour à tous,
Ton programme est ton grand. Tu peux poster au maximum 60000 mots dans un seul post. Je te propose de poster en deux parties.
Une grosse moitié dans un premier post et tu en fais un second à la suite avec le reste.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#52 Message par nondediode » mar. 15 déc. 2020 13:42

1ere partie du programme

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
CPT2         EQU    0X0D    
; Le registre temporaire CPT2 se trouve à l'adresse 0D
CPT3        EQU    0X0E    ; Le registre temporaire CPT3 se trouve à l'
adresse 0E
RETARD1        EQU    0X0C    
; Le registre temporaire retard1 se trouve à l'adresse 0C
RETARD2        EQU    0X0F    ; Le registre temporaire retard2 se trouve à l'
adresse 0F
RETARD3        EQU    0X10    
; Le registre temporaire retard3 se trouve à l'adresse 10
RETARD4        EQU    0X11    ; Le registre temporaire retard4 se trouve à l'
adresse 11
RETARD5        EQU    0X12    
; Le registre temporaire retard4 se trouve à l'adresse 12
VAL1        EQU    0X14    ; Le registre temporaire VAL1 se trouve à l'
adresse 14
VAL2        EQU    0X15    
; Le registre temporaire VAL2 se trouve à l'adresse 15
VAL3        EQU    0X16    ; Le registre temporaire VAL1 se trouve à l'
adresse 14
VAL4        EQU    0X17    
; Le registre temporaire VAL2 se trouve à l'adresse 15

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

ORG    0000h            ; Adresse de reset
    GOTO    INIT

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

STOP
    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
    BCF    STATUS
,RP0    ; Déselection de la page mémoire RP0    
    BCF    STATUS
,RP1    ; Déselection de la page mémoire RP1

;---------------------------------------------------------Programme PRINCIPAL-------------------------------------------------------

    CLRF    PORTA        ; Les sorties du port A sont à 0
     CLRF    PORTB        
; Les sorties du port B sont à 0
     CLRF    PORTC        
; Les sorties du port C sont à 0
    CLRF    PORTD        
; Les sorties du port D sont à 0
    MOVLW    B
'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    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
    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    PORTC,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        ; Saut à TEST_A        
    BTFSC    PORTC,2        ; Test bouton PHASE
    CALL    PHASE        ; Saut à PHASE
    CALL    ATTENTE5    ; Appel ATTENTE5
    BTFSC    PORTC,3        ; Test bouton MUTE
    CALL    MUTE        ; Saut à MUTE
    CALL    ATTENTE5    ; Appel ATTENTE5    
    BTFSS    PORTC,1        ; Test du bouton INPUT
    GOTO    TUN_1C        ; Saut à TUN_1A    
    CALL    ATTENTE5    ; Appel ATTENTE5    
    CALL    MENU_B        ; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
TUN_1D
    BTFSC    PORTC,2        ; Test du bouton "<"  
    GOTO    PHONO_1        ; Saut à PHONO_1    
    BTFSC    PORTC,3        ; Test du bouton ">" 
    GOTO    CD1_1        ; Saut à CD1_1
    GOTO    TUN_1D        ; Saut à TUN_1D    

;----------------------------------------------------------Appel du CD1-------------------------------------

CD1_1
    CALL    TEMPO2        ; Appel de TEMPO2
    BTFSS    PORTC,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        ; Saut à TEST_A    
    CALL    ATTENTE5    ; Appel ATTENTE5
    CALL    CD1        ; Appel de l'
affichage CD1
    CALL    ATTENTE5    
; Appel ATTENTE5    
    CALL    MENU_B        
; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
CD1_1A
    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    PORTC
,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        
; Saut à TEST_A        
    BTFSC    PORTC
,2        ; Test bouton PHASE
    CALL    PHASE        
; Saut à PHASE
    CALL    ATTENTE5    
; Appel ATTENTE5
    BTFSC    PORTC
,3        ; Test bouton MUTE
    CALL    MUTE        
; Saut à MUTE
    CALL    ATTENTE5    
; Appel ATTENTE5    
    BTFSS    PORTC
,1        ; Test du bouton INPUT
    GOTO    CD1_1C        
; Saut à CD1_1C    
    CALL    ATTENTE5    
; Appel ATTENTE5    
    CALL    MENU_B        
; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
CD1_1D
    BTFSC    PORTC
,2        ; Test du bouton "<"  
    GOTO    TUN_1        
; Saut à TUN_1    
    BTFSC    PORTC
,3        ; Test du bouton ">" 
    GOTO    CD2_1        
; Saut à CD2_1
    GOTO    CD1_1D        
; Saut à CD1_1D    

;----------------------------------------------------------Appel du CD2-------------------------------------

CD2_1
    CALL    TEMPO2        
; Appel de TEMPO2
    BTFSS    PORTC
,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        
; Saut à TEST_A    
    CALL    ATTENTE5    
; Appel ATTENTE5
    CALL    CD2        
; Appel de l'affichage CD2
    CALL    ATTENTE5    ; Appel ATTENTE5    
    CALL    MENU_B        ; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
CD2_1A
    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    PORTC,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        ; Saut à TEST_A        
    BTFSC    PORTC,2        ; Test bouton PHASE
    CALL    PHASE        ; Saut à PHASE
    CALL    ATTENTE5    ; Appel ATTENTE5
    BTFSC    PORTC,3        ; Test bouton MUTE
    CALL    MUTE        ; Saut à MUTE
    CALL    ATTENTE5    ; Appel ATTENTE5    
    BTFSS    PORTC,1        ; Test du bouton INPUT
    GOTO    CD2_1C        ; Saut à CD2_1C    
    CALL    ATTENTE5    ; Appel ATTENTE5    
    CALL    MENU_B        ; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
CD2_1D
    BTFSC    PORTC,2        ; Test du bouton "<"  
    GOTO    CD1_1        ; Saut à CD1_1    
    BTFSC    PORTC,3        ; Test du bouton ">" 
    GOTO    DVD_1        ; Saut à DVD_1
    GOTO    CD2_1D        ; Saut à TUN_1D    

;----------------------------------------------------------Appel du DVD-------------------------------------

DVD_1
    CALL    TEMPO2        ; Appel de TEMPO2
    BTFSS    PORTC,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        ; Saut à TEST_A    
    CALL    ATTENTE5    ; Appel ATTENTE5
    CALL    DVD        ; Appel de l'
affichage DVD
    CALL    ATTENTE5    
; Appel ATTENTE5    
    CALL    MENU_B        
; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
DVD_1A
    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    PORTC
,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        
; Saut à TEST_A        
    BTFSC    PORTC
,2        ; Test bouton PHASE
    CALL    PHASE        
; Saut à PHASE
    CALL    ATTENTE5    
; Appel ATTENTE5
    BTFSC    PORTC
,3        ; Test bouton MUTE
    CALL    MUTE        
; Saut à MUTE
    CALL    ATTENTE5    
; Appel ATTENTE5    
    BTFSS    PORTC
,1        ; Test du bouton INPUT
    GOTO    DVD_1C        
; Saut à DVD_1C    
    CALL    ATTENTE5    
; Appel ATTENTE5    
    CALL    MENU_B        
; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
DVD_1D
    BTFSC    PORTC
,2        ; Test du bouton "<"  
    GOTO    CD2_1        
; Saut à CD2_1    
    BTFSC    PORTC
,3        ; Test du bouton ">" 
    GOTO    TAPE_1        
; Saut à TAPE_1
    GOTO    DVD_1D        
; Saut à DVD_1D    

;----------------------------------------------------------Appel du Magneto-------------------------------------

TAPE_1
    CALL    TEMPO2        
; Appel de TEMPO2
    BTFSS    PORTC
,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        
; Saut à TEST_A    
    CALL    ATTENTE5    
; Appel ATTENTE5
    CALL    TAPE        
; Appel de l'affichage TAPE
    CALL    ATTENTE5    ; Appel ATTENTE5    
    CALL    MENU_B        ; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
TAPE_1A
    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    PORTC,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        ; Saut à TEST_A        
    BTFSC    PORTC,2        ; Test bouton PHASE
    CALL    PHASE        ; Saut à PHASE
    CALL    ATTENTE5    ; Appel ATTENTE5
    BTFSC    PORTC,3        ; Test bouton MUTE
    CALL    MUTE        ; Saut à MUTE
    CALL    ATTENTE5    ; Appel ATTENTE5    
    BTFSS    PORTC,1        ; Test du bouton INPUT
    GOTO    TAPE_1C        ; Saut à TAPE_1C    
    CALL    ATTENTE5    ; Appel ATTENTE5    
    CALL    MENU_B        ; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
TAPE_1D
    BTFSC    PORTC,2        ; Test du bouton "<"  
    GOTO    DVD_1        ; Saut à DVD_1    
    BTFSC    PORTC,3        ; Test du bouton ">" 
    GOTO    PHONO_1        ; Saut à PHONO_1
    GOTO    TAPE_1D        ; Saut à TAPE_1D    

;----------------------------------------------------------Appel du Phono-------------------------------------

PHONO_1
    CALL    TEMPO2        ; Appel de TEMPO2
    BTFSS    PORTC,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        ; Saut à TEST_A    
    CALL    ATTENTE5    ; Appel ATTENTE5
    CALL    PHONO        ; Appel de l'
affichage PHONO
    CALL    ATTENTE5    
; Appel ATTENTE5    
    CALL    MENU_B        
; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
PHONO_1A
    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    PORTC
,7        ; Test du ctrl retour BCD
    GOTO    TEST_A        
; Saut à TEST_A        
    BTFSC    PORTC
,2        ; Test bouton PHASE
    CALL    PHASE        
; Saut à PHASE
    CALL    ATTENTE5    
; Appel ATTENTE5
    BTFSC    PORTC
,3        ; Test bouton MUTE
    CALL    MUTE        
; Saut à MUTE
    CALL    ATTENTE5    
; Appel ATTENTE5    
    BTFSS    PORTC
,1        ; Test du bouton INPUT
    GOTO    PHONO_1C    
; Saut à PHONO_1C    
    CALL    ATTENTE5    
; Appel ATTENTE5    
    CALL    MENU_B        
; [IN] [<] [OFF] [>] [OK]
    CALL    ATTENTE5    ; Appel ATTENTE5
PHONO_1D
    BTFSC    PORTC
,2        ; Test du bouton "<"  
    GOTO    TAPE_1        
; Saut à TAPE_1    
    BTFSC    PORTC
,3        ; Test du bouton ">" 
    GOTO    TUN_1        
; Saut à PHONO_1
    GOTO    PHONO_1D    
; Saut à PHONO_1D    

;-------------------------------------------------------programme de clignote---------------------------------------------------------


CLIGNOTE
    MOVLW    0XD2        
; On charge la valeur dans le registre W pour obtenir un clignotement pendant 2min                        
    MOVWF    RETARD4        
; On met W dans RETARD4
ATTENTE_A
    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    PORTC
,6        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; Enable = 0
    MOVLW    
'P'        ; Affiche message 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'A'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'I'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'E'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'C'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'E'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    CALL    TEMPO1        
; On appelle TEMPO2    
    RETURN
    

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

ACCEUIL
    CALL    CONFIG_A    ; Va à CONFIG_A
    MOVLW    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    PORTC,6        ; Enable = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTC,6        ; 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    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


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

#53 Message par nondediode » mar. 15 déc. 2020 13:45

la seconde partie

Code : Tout sélectionner

;-----------------------------------------------------------------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
    CALL    CONFIG_B    
; Va à CONFIG    
    MOVLW    0XC0        
; Déplace le curseur à la 3ème colonne de la 2ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,6        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; Enable = 0
    MOVLW    
'['        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'I'
    CALL    CAR_AFF_B    ; Va à CAR_AFF_A
    MOVLW    
'N'
    CALL    CAR_AFF_B    ; Va à CAR_AFF_A
    MOVLW    
']'
    CALL    CAR_AFF_B    ; Va à CAR_AFF_A

    MOVLW    0XC9        
; Déplace le curseur à la 3ème colonne de la 2ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,6        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; Enable = 0
    MOVLW    
'['        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'<'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
']'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A

    MOVLW    0XD1        
; Déplace le curseur à la 5ème colonne de la 2ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,6        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; Enable = 0
    MOVLW    
'['        ; Affiche message 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'O'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'F'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
'F'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF
    MOVLW    
']'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF


    MOVLW    0XDC        
; Déplace le curseur à la 3ème colonne de la 2ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,6        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; Enable = 0
    MOVLW    
'['        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'>'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
']'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF    


    MOVLW    0XE4        
; Déplace le curseur à la 3ème colonne de la 2ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,6        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; Enable = 0
    MOVLW    
'['        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'O'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
'K'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF_A
    MOVLW    
']'        ; Affiche caractère 
    CALL    CAR_AFF_B    
; Va à CAR_AFF    
    RETURN
;-----------------------------------------------------------------APPEL des fonctions PHASE et MUTE----------------------------------

PHASE
    MOVLW    B
'00111110'    ; Mode changement de phase
    MOVWF    PORTA        
; Relais PHASE activé
    CALL    TEMPO2        
; Appel tempo
    MOVLW    B
'00111100'    ; Mode silence
    MOVWF    PORTA        
; Relais MUTE désactivé
    RETURN
MUTE
    MOVLW    B
'00111101'    ; Mode silence
    MOVWF    PORTA        
; Relais MUTE activé
    CALL    TEMPO2        
; Appel tempo
RETOUR
    BTFSS    PORTC
,3        ; Test du bouton MUTE
    GOTO    RETOUR        
; Retour RETOUR
    MOVLW    B
'00111100'    ; Mode du son rétabli
    MOVWF    PORTA        
; Relais MUTE désactivé    
    CALL    TEMPO2        
; Appel tempo
    RETURN



;--------------------------------------------------------------Affichage des sources audio------------------------------------------------

TUNER
    CALL    CONFIG_A    
; Va à CONFIG    
    MOVLW    0XCB        
; Déplace le curseur à la 2ème colonne de la 1ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; Enable = 0                                
    MOVLW    
'I'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
':'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'E'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'R'
    CALL    CAR_AFF_A    ; Va à CAR_AFF
    RETURN
CD1
    CALL    CONFIG_A    
; Va à CONFIG    
    MOVLW    0XCB        
; Déplace le curseur à la 2ème colonne de la 1ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; Enable = 0                                
    MOVLW    
'I'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
':'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'C'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'D'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'1'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    RETURN
CD2
    CALL    CONFIG_A    
; Va à CONFIG    
    MOVLW    0XCB        
; Déplace le curseur à la 2ème colonne de la 1ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; Enable = 0                                
    MOVLW    
'I'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
':'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'C'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'D'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'2'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    RETURN
DVD
    CALL    CONFIG_A    
; Va à CONFIG    
    MOVLW    0XCB        
; Déplace le curseur à la 2ème colonne de la 1ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; Enable = 0                                
    MOVLW    
'I'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
':'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'D'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'V'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'D'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    RETURN
TAPE
    CALL    CONFIG_A    
; Va à CONFIG    
    MOVLW    0XCB        
; Déplace le curseur à la 2ème colonne de la 1ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; Enable = 0                                
    MOVLW    
'I'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
':'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'A'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'E'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    RETURN
PHONO
    CALL    CONFIG_A    
; Va à CONFIG    
    MOVLW    0XCB        
; Déplace le curseur à la 2ème colonne de la 1ere ligne 
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; Enable = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; Enable = 0                                
    MOVLW    
'I'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'U'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'T'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
':'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    0X20        
; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'P'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'H'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'O'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'N'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    MOVLW    
'O'        ; Affiche caractère 
    CALL    CAR_AFF_A    
; Va à CAR_AFF
    RETURN

;---------------------------------------------------------CONFIGURATION AFFICHEUR Ligne 1 et 2-----------------------------------------------------------

CONFIG_A

    MOVLW    B
'00111000'    ; Fonction SET 8 bits 2 lignes police 5X7
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; E1 = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; E1 = 0


    MOVLW    B
'00001000'    ; Affichage off
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; E1 = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; E1 = 0


    MOVLW    B
'00000001'    ; Efface l'écran et positionne le curseur à 0
    MOVWF    PORTD        ; Charge le contenu de W dans le port D
    BSF    PORTC,4        ; E1 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTC,4        ; E1 = 0


    MOVLW    B'
00000110'    ; Déplacement curseur vers la droite
    MOVWF    PORTD        ; Charge le contenu de W dans le port D
    BSF    PORTC,4        ; E1 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTC,4        ; E1 = 0


    MOVLW    B'
00001100'    ; Contrôle de l'affichage (affichage on, curseur non visible)
    MOVWF    PORTD        ; Charge le contenu de W dans le port D
    BSF    PORTC
,4        ; E1 = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,4        ; E1 = 0
    RETURN

;---------------------------Ecriture dans l'afficheur lignes 1 et 2-------------------------------------

CAR_AFF_A

    MOVWF    PORTD        ; Charge le contenu de W dans le port B
    CALL    ATTENTE5    ; Appel de la temporisation ATTENTE5
    MOVLW    B'
00110000'    ; RS = 1, RW = 0, E1 = 1, E2 = 0
    MOVWF    PORTC        ; Et on transfert sur le port C le contenu de W 
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    MOVLW    B'
00000000'    ; RS = 0, RW = 0, E1 = 0, E2 = 0 
    MOVWF    PORTC        ; 
    RETURN

;---------------------------------------------------------CONFIGURATION AFFICHEUR Lignes 3 et 4-----------------------------------------------------------

CONFIG_B

    MOVLW    B'
00111000'    ; Fonction SET 8 bits 2 lignes police 5X7
    MOVWF    PORTD        ; Charge le contenu de W dans le port D
    BSF    PORTC,6        ; E2 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTC,6        ; E2 = 0

    MOVLW    B'
00001000'    ; Affichage off
    MOVWF    PORTD        ; Charge le contenu de W dans le port D
    BSF    PORTC,6        ; E2 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTC,6        ; E2 = 0

    MOVLW    B'
00000001'    ; Efface l'écran et positionne le curseur à 0
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,6        ; E2 = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; E2 = 0


    MOVLW    B
'00000110'    ; Déplacement curseur vers la droite
    MOVWF    PORTD        
; Charge le contenu de W dans le port D
    BSF    PORTC
,6        ; E2 = 1
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    BCF    PORTC
,6        ; E2 = 0


    MOVLW    B
'00001100'    ; Contrôle de l'affichage (affichage on, curseur non visible)
    MOVWF    PORTD        ; Charge le contenu de W dans le port D
    BSF    PORTC,6        ; E2 = 1
    CALL    ATTENTE6    ; Appel de la temporisation ATTENTE6
    BCF    PORTC,6        ; E2 = 0
    RETURN

;---------------------------Ecriture dans l'
afficheur lignes 3 et 4-------------------------------------

CAR_AFF_B

    MOVWF    PORTD        
; Charge le contenu de W dans le port B
    CALL    ATTENTE5    
; Appel de la temporisation ATTENTE5
    MOVLW    B
'01100000'    ; RS = 1, RW = 0, E1 = 1, E2 = 0
    MOVWF    PORTC        
; Et on transfert sur le port C le contenu de W 
    CALL    ATTENTE6    
; Appel de la temporisation ATTENTE6
    MOVLW    B
'00000000'    ; RS = 0, RW = 0, E1 = 0, E2 = 0 
    MOVWF    PORTC        
; 
    RETURN

;---------------------------Programme de temporisation 1-------------------------------------

TEMPO1
    MOVLW    0X7F        
; On met FF dans le registre W                    
    MOVWF    RETARD1        
; On met W dans le registre retard1
    MOVWF    RETARD2        
; On met W dans le registre retard2
    MOVWF    RETARD3        
; On met W dans le registre retard3
    MOVWF    RETARD4        
; On met W dans le registre retard4
ATTENTE1
    DECFSZ    RETARD1
,F    ; On décrémente retard1 et on saute la prochaine instruction si le registre retard1 = 0
    GOTO    ATTENTE1    
; Sinon retour à attente1
    MOVLW    0X80        
; On met 80 dans le registre W    
    MOVWF    RETARD1        
; On met W dans RETARD1
    DECFSZ    RETARD2
,F    ; On décrémente retard2 et on saute la prochaine instruction si le registre retard2 = 0
    GOTO    ATTENTE1    
; Sinon retour à attente1
    MOVLW    0X08        
; On met 08 dans le registre W        
    MOVWF    RETARD2        
; On met W dans RETARD2
    DECFSZ    RETARD3
,F    ; On décrémente retard3 et on saute la prochaine instruction si le registre retard3 = 0
    GOTO    ATTENTE1    
; Sinon retour à attente1
    MOVLW    0X08        
; On met 08 dans le registre W        
    MOVWF    RETARD3        
; On met W dans RETARD3
    DECFSZ    RETARD4
,F    ; On décrémente retard4 et on saute la prochaine instruction si le registre retard4 = 0
    GOTO    ATTENTE1    
; Sinon retour à attente1
    RETURN            
; Retour au programme principal

;------------------------------programme de temporisation 2---------------------------

TEMPO2
    MOVLW    0X7F        
; On met 7F dans le registre W        
    MOVWF    RETARD1        
; On met W dans le registre retard1
    MOVWF    RETARD2        
; On met W dans le registre retard2
    MOVLW    0X12        
; On met 12 dans le registre W
    MOVWF    RETARD3        
; On met W dans le registre retard3
ATTENTE2
    DECFSZ    RETARD1
,F    ; On décrémente retard1 et on saute la prochaine instruction
                
; si le registre retard1 = 0    
    GOTO    ATTENTE2    
; Sinon retour à attente2
    MOVLW    0XC8        
; On recharge retard1         
    MOVWF    RETARD1        
; Avec C8 (200)
    DECFSZ    RETARD2,F    ; On décrémente retard2 et on saute la prochaine instruction
                
; si le registre retard2 = 0
    GOTO    ATTENTE2    
; Sinon retour à attente2
    MOVLW    0X80        
; On recharge retard2        
    MOVWF    RETARD2        
; Avec 80 (128)
    DECFSZ    RETARD3,F    ; On décrémente retard3 et on saute la prochaine instruction
                
; si le registre retard3 = 0
    GOTO    ATTENTE2    
; Sinon retour à attente2
    RETURN            
; Retour au programme principal après l'instruction call

;------------------------------programme de temporisation 3---------------------------

TEMPO3
    MOVLW    0X7F        ; On met 7F dans le registre W        
    MOVWF    RETARD1        ; On met W dans le registre retard1
    MOVWF    RETARD2        ; On met W dans le registre retard2
    MOVLW    0X80        ; On met 80 dans le registre W
    MOVWF    RETARD3        ; On met W dans le registre retard3
ATTENTE3
    DECFSZ    RETARD1,F    ; On décrémente retard1 et on saute la prochaine instruction
                ; si le registre retard1 = 0    
    GOTO    ATTENTE3    ; Sinon retour à attente3
    MOVLW    0XC8        ; On recharge retard1         
    MOVWF    RETARD1        ; Avec C8 (200)
    DECFSZ    RETARD2,F    ; On décrémente retard2 et on saute la prochaine instruction
                ; si le registre retard2 = 0
    GOTO    ATTENTE3    ; Sinon retour à attente3
    MOVLW    0X80        ; On recharge retard2        
    MOVWF    RETARD2        ; Avec 80 (128)
    DECFSZ    RETARD3,F    ; On décrémente retard3 et on saute la prochaine instruction
                ; si le registre retard3 = 0
    GOTO    ATTENTE3    ; Sinon retour à attente3
    RETURN            ; Retour au programme principal après l'
instruction call

;---------------------------Programme de temporisation 4-------------------------------------


TEMPO4
    MOVLW    0X5A        
; On met 7F dans le registre W        
    MOVWF    RETARD1        
; On met W dans le registre retard1
    MOVWF    RETARD2        
; On met W dans le registre retard2
    MOVLW    0X15        
; On met 12 dans le registre W
    MOVWF    RETARD3        
; On met W dans le registre retard3
ATTENTE4
    DECFSZ    RETARD1
,F    ; On décrémente retard1 et on saute la prochaine instruction
                
; si le registre retard1 = 0    
    GOTO    ATTENTE4    
; Sinon retour à attente4
    MOVLW    0X6E        
; On recharge retard1     6e    
    MOVWF    RETARD1        
; Avec C8 (200)
    DECFSZ    RETARD2,F    ; On décrémente retard2 et on saute la prochaine instruction
                
; si le registre retard2 = 0
    GOTO    ATTENTE4    
; Sinon retour à attente4
    MOVLW    0X80        
; On recharge retard2        
    MOVWF    RETARD2        
; Avec 80 (128)
    DECFSZ    RETARD3,F    ; On décrémente retard3 et on saute la prochaine instruction
                
; si le registre retard3 = 0
    GOTO    ATTENTE4    
; Sinon retour à attente4
    RETURN            
; Retour au programme principal après l'instruction call

;---------------------------------------------------SOUS PROGRAMME TEMPO D'
ATTENTE---------------------------------------------------------------

ATTENTE5
    MOVLW    0XFF        
; On met FF dans le registre W    
    MOVWF    CPT2        
; On met W dans le registre CPT2
ATT2
    DECFSZ    CPT2
,1        ; On décrémente CPT2,1 et on saute la prochaine instruction
    GOTO     ATT2        
; Sinon retour à ATT2
    RETURN            
; Retour au programme principal après l'instruction call

ATTENTE6
    MOVLW    0X1E        ; On met 14 dans le registre W    
    MOVWF    CPT3        ; On met W dans le registre CPT3
ATT3
    CALL    ATTENTE5    ; On appelle ATTENTE5
    DECFSZ    CPT3,1        ; On décrémente CPT3,1 et on saute la prochaine instruction
    GOTO     ATT3        ; Sinon retour à ATT3
    RETURN            ; Retour au programme principal après l'
instruction call




END


LCD origine inconnu
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3294
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#54 Message par paulfjujo » mar. 15 déc. 2020 14:05

bonjour à tous,

ton affichage de texte est laborieux, caractere par caractere ... mais il faut bien commencer .
pour qu'il soit bien moins long ( en terme d enombre de lignes asm ,
tu pourrais stocker tes message sous cette forme .. voir sur le web " lookUp table"

Code : Tout sélectionner



TABLE_ST
Msg1_lookup
    ADDWF PCL
, F
    DT 
"Temp= ", 0
Msg2_lookup
    ADDWF PCL
, F
    DT 
"RAZ @ MEM",.13,.10,0
Msg3_lookup
    ADDWF PCL
, F
    DT 
"M/A<T>emper",.13,.10
    DT 
"M/A<P>ause MEM",.13,.10
    DT 
"M/A<D>ate/Heure",.13,.10
    DT 
"M/A<A>nalog",.13,.10
    DT 
"<I>nterv.Sec",.13,.10
    DT 
"<E>crit.MEM",.13,.10
    DT 
"<M>AJ Heure",.13,.10
    DT 
"<L>ect.MEM",.13,.10
    DT 
"<ESC>Abort",.13,.10
    DT 
"<R>az Adr.MEM",.13,.10
    DT 
"<H>elp",.13,.10,0
Msg4_lookup
    ADDWF PCL
, F
    DT 
".STOP MEMO.",.13,.10,0
Msg5_lookup
    ADDWF PCL
, F
    DT .13
,.10," Abort",.13,.10,0
HexTable
    ADDWF PCL
, F
    DT 
"0123456789ABCDEF",0
Adr_Now equ 
$
    IF ( (Adr_Now) > 0x100 )
        ERROR   "Attention debordement Page 0"
    ENDIF


en page 0 ou autre page ..mais manipulation de bank..


ou en EEPROM , si il y a de la place ...


(vieux) exemple avec 16F628 (datalogger)

Code : Tout sélectionner



;Presentation
    CALL Rs_CrLf    
;   envoi CR LF changement d eligne 
Pres1    clrf _Cpt1
    movf _Cpt1
,w
    call Msg_Eeprom
Pres2
    CALL Rs_CrLf
    movlw EE1
-EE0
    MOVWF _Cpt1
    call Msg_Eeprom
Pres3
    movlw 
"-"
    call Choix_Out   ; choix LCD 
    movlw EE9
-EE0
    MOVWF _Cpt1
    call Msg_Eeprom
Pres4
    CALL Rs_CrLf
    movlw EE2
-EE0
    MOVWF _Cpt1
    call Msg_Eeprom
    CALL Rs_CrLf

.....



Msg_Eeprom
    movf _Cpt1
,w
    bank1            
; pIC16F628 !
    MOVWF    EEADR
    BSF     EECON1
,RD    ;  bit 0
    MOVF     EEDATA
,W
    bank0
    incf    _Cpt1
,f
    ANDLW    0x0FF
    BTFSC    STATUS
, Z
    Return
    call Choix_Out    
;    option  LCD
    goto Msg_Eeprom
    return


    ORG 0x2100
EEPROM_16F628 equ 
$
    ;  "1234567890123456"
; message taille 16 car maxi (LCD)
EE0    DT "Datalog7 6Mhz AD7896",.0
EE1    DT 
"16F628_110107",.0
EE2     DT 
"EcriMem Page:",.0
EE3     DT 
"Pause:",.0
EE4      DT 
"LectMem Page:",.0
EE5      DT 
"Continue:",.0
EE6     DT 
"MAJ DS1307",.13,.10
EE7      DT 
"AAMMJJWWHHMMSS",.13,.10,.0
EE8      DT 
"Inter.Sec=",.0
EE9   DT 
"0210HHB",.0    ; 16F628 avec point blanc
finEEprom    EQU 
$
EEpromLibre EQu 128-(finEEprom - EEPROM_16F628)
 



:sifflotte:
je te donne pas tous les details .. mais c'est juste une piste
.. comme une autre pour faire avancer le smilblick.
Aide toi, le ciel ou FantasPic t'aidera

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

#55 Message par satinas » mar. 15 déc. 2020 14:15

Il faut soigner l'alimentation du pic, 2 broches Vdd et 2 broches Vss, bien découpler, il y a des relais.

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

#56 Message par nondediode » mar. 15 déc. 2020 14:44

Bonjour paulfjujo,

Tes conseils m'intéresse c'est vrai que rentrer caractère par caractère c'est laborieux mais ça va relativement vite à faire en faisant copier / coller il suffit juste de changer le caractère.

Je ne pense pas que mon pb vienne de là mais plutôt au démarrage du prg. J'ai des tas de prg qui tourne comme ça sans jamais noter ce pb sauf 1 fois mais après avoir placer une tempo au départ du prg je n'ai plus jamais eu de soucis.

Après la seconde source possible c'est que sur ce monstre d'ampli les appels de courant ne sont pas à négliger; c'est un double mono ce qui implique 2 alimentations. Elles ne se mettent pas en route en même tps (c'est d'ailleurs le rôle du prg de pouvoir gérer les alimentations) il y a 4 transfos d'alims chauffage dont 2 de 150VA et les 2 autres en 75VA et 2 gros transfos HT de 1KVA qui eux se mettent en route bien plus tard. En fonctionnement la puissance totale de l'ampli est de 800W! Il se peut qu'à l'allumage de l'ampli des harmoniques secteur viennent perturber l'alim de la partie numérique qui est pourtant complètement indépendante. Tous les transfos passent par des relais statiques qui commutent au 0 tension donc logiquement les amorçages sont bien gérés.

Dans le chronogramme je met sous tension les 2 transfos chauffage droit en route ( 150VA + 75VA) ceux là démarrent en même tps et 5 secondes après je commute le côté gauche.
Je chauffe pendant 1 minute 30 et ensuite je commute l'un à près l'autre (5 sec) les transfos HT qui sont reliés aux ponts redresseurs et les condos de filtrages mais là aussi il y a une tempo pour charger les condos à travers une résistance ( il y a 1260V sous 500mA) les condos sont montés en série 4 condos de 470µ 550V avec la self et ensuite une autre série de condo en série. Mieux vaut charger tout doucement que de balancer la purée plein pot sinon adieux les diodes :razz: Ce process fonctionne très bien et j'en suis pas à ma première expérience.

Le programme a fonctionné jusqu'à maintenant sans aucun soucis, j'ai dut l'allumer une 30aine de fois et hier soir j'ai eu ce pb ainsi que ce matin et je viens de refaire un test avec le même soucis. Un coup qu'il a démarré, je peux éteindre et redémarrer sans pb.


Si le prg ne présente pas de pb particulier il faudra certainement que je me penche sur un pb électrique.


JP

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

#57 Message par nondediode » mar. 15 déc. 2020 14:48

satinas a écrit :Il faut soigner l'alimentation du pic, 2 broches Vdd et 2 broches Vss, bien découpler, il y a des relais.


Il me semble pourtant avoir bien découpler, l'alim est complètement indépendante. Tu as un exemple de découplage efficace?

JP

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

#58 Message par satinas » mar. 15 déc. 2020 14:51

T'en sais plus que moi dans le domaine :-)
J'ai pas vu l'alim du pic sur ton schéma, c'est pour cela que j'en parle.

Ne mets pas de variable en dessous de 0x20, effarant qu'on n'ait pas vu ça avant !

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

#59 Message par nondediode » mar. 15 déc. 2020 15:54

Moi je suis le spécialiste du copier / coller et si tu regardes bien le dernier sujet où tu me l'as déjà fait remarqué tu verra que c'est du pur copier / coller et celui là je le promène depuis lgtps :lol:

Donc il serait préférable de faire ça

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


Est-ce que mon problème pourrait venir de là?

Que penses tu de mettre une tempo au départ du programme?
si c'est des pics de tension au démarrage, le fait qu'il soit stopper par une tempo lui permettrai d'agir comme un filtre non ?

Là de toute façon je peux pas aller sortir la carte, je suis seul et j'ai une sonde dans chaque reins si je fait un effort trop important c'est direct les urgences et j'ai déjà eu l'expérience quand j'ai déménagé à mon retour d'hôpital ça ma coûté re-15 jrs!!

Il faut donc attendre qu'un collègue passe pour qu'il puisse me le retourner pour le démonter.
Modifié en dernier par nondediode le mar. 15 déc. 2020 16:05, modifié 1 fois.

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

#60 Message par satinas » mar. 15 déc. 2020 16:02

Oui, avec Temps-x on te l'a fait modifier sur un programme récent, mais sur ce programme on avait rien vu à l'époque.
Modifie le programme et regarde ce que cela donne.
Il faut oublier le 16F84 :)


Retourner vers « Langage ASM »

Qui est en ligne

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