Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
LCD origine inconnu
LCD origine inconnu
-
nondediode

Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
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- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
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

Maître- Messages : 3293
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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"
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)
je te donne pas tous les details .. mais c'est juste une piste
.. comme une autre pour faire avancer le smilblick.
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)
je te donne pas tous les details .. mais c'est juste une piste
.. comme une autre pour faire avancer le smilblick.
LCD origine inconnu
LCD origine inconnu
-
nondediode

Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
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
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
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
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- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
LCD origine inconnu
LCD origine inconnu
-
nondediode

Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
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
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.
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.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Google [Bot] et 3 invités

