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

Bonjour à toute l'équipe du forum
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#81 Message par JMarc » mer. 5 déc. 2018 20:49

Bonjour tout le monde

bon désolé, le temps me manque...

JJE, je regarderai cela de plus prés en ouvrant un post sur ce sujet, merci pour l'info

Nondediode, etrange que tu ne puisses pas assembler les udata, nous devons avoir des versions differentes, j'utilise mplabx sous windows10 pour info
Tu as bien fait de supprimé, c'est parce que j'ai fait les essais de JJE sur ton fichier, pas bien :roll:

pour la led qui ne clignote pas c'est une erreur de moi :mur:

j'ai modifié pour la led, supprimé la variable udata, rajouté des tempos pour te faire patienter.j'essai maintenant de comprendre les données a envoyer a ton afficheur

Code : Tout sélectionner

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

;
 TITRE: Gestion d'un afficheur LCD graphique
; DATE: 10/11/2018
; AUTEUR: nondediode
; PIC UTILISE: PIC16F877
; Gestion PP845 version 2019
; le quartz est de 4MHz
 ; essai JMarc Version 1,01
;----------------------------------------------------Brochage du PIC sur la carte--------------------------------------------------------- 
;
;  Port | Broche | E/S | Description

;  RA0  |    02  |  S  | Relais "MUTE"
;  RA1  |    03  |  S  | Relais "PHASE"
;  RA2  |    04  |  S  | LED droite
;  RA3  |    05  |  S  | LED gauche
;  RA4  |    06  |  S  | Relais de cde HT gauche et droit
;  RA5  |    07  |  S  | Relais statique gauche et droit

;  RB0  |    33  |  E  | Inter "on / off"
;  RB1  |    34  |  E  | Bouton poussoir "OK"
;  RB2  |    35  |  S  | Data Write afficheur  
;  RB3  |    36  |  S  | Data Read afficheur
;  RB4  |    37  |  S  | Chip Enable
;  RB5  |    38  |  S  | C/D
;  RB6  |    39  |  S  | Font Size Select
;  RB7  |    40  |  S  | Reset

;  RC0  |    15  |  S  | Adressage entrée audio bit A
;  RC1  |    16  |  S  | Adressage entrée audio bit B
;  RC2  |    17  |  S  | Adressage entrée audio bit C
;  RC3  |    18  |  S  | Adressage entrée audio bit D
;  RC4  |    23  |  S  | LEDs Rouge droit et gauche
;  RC5  |    24  |  E  | Bouton poussoir "INPUT"
;  RC6  |    25  |  E  | Bouton poussoir "PHASE"
;  RC7  |    26  |  E  | Bouton poussoir "MUTE"

;  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=16f877a
    
#include <p16f877.inc>
    radix dec                      ; on travaille en décimal par défaut

    __CONFIG   _CP_OFF 
& _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC 

OPTIONVAL    EQU    B
'00001111'
;-------------------------------------------------Definition de la RAM------------------------------------------------------

        cblock        0x20
                TEMP            
;temp buffer
                DATAL            
;instruction donnée =0
                DATAH            
;instruction donnée =1
                COMMAND            
;instruction
                TABLECOUNT        
;tablecounter
        endc

        cblock        0x70
      w_temp 
: 1        ; Sauvegarde registre W
    status_temp 
: 1        ; sauvegarde registre STATUS
    FSR_temp 
: 1        ; sauvegarde FSR (si indirect en interrupt)
    PCLATH_temp : 1        ; sauvegarde PCLATH (si prog>2K)
    Tempj : 1
    delai1_LED_TEMOIN 
: 1
    delai2_LED_TEMOIN 
: 1
    temptmr0 
: 1
    temp1tmr1 
: 1
    DATA_L 
: 1
    DATA_H 
: 1
    CMD 
: 1


              STATUS_TEMP        
;interruptcontextsave for STATUS

                PCLATH_TEMP        
;interruptcontextsave for PCLATH
                COUNT1            
;delaycounter 1
                COUNT2            
;delaycounter 2
                COUNT3            
;delaycounter 3
                DATA_EE_ADDR        
;data EEPROM address buffer
                DATA_EE_DATA        
;data EEPROM data buffer
        endc




;-------------------------------------------------Definition des constantes------------------------------------------------------
#DEFINE LED_TEMOIN      PORTA,1
#DEFINE LED_TEMOIN2     PORTA,0
#DEFINE LCD_WR  PORTB,2     ;  RB2  |    35  |  S  | Data Write afficheur  
#DEFINE LCD_RD  PORTB,3     ;  RB3  |    36  |  S  | Data Read afficheur
#DEFINE LCD_CE  PORTB,4     ;  RB4  |    37  |  S  | Chip Enable
#DEFINE LCD_CD  PORTB,5     ;  RB5  |    38  |  S  | C/D
#DEFINE LCD_FS  PORTB,6     ;  RB6  |    39  |  S  | Font Size Select
#DEFINE LCD_RESET  PORTB,7  ;  RB7  |    40  |  S  | Reset
LCD_DATA EQU PORTD

;--------------------------------------------Definition des registres temporaires------------------------------------------------------



;--------------------------------------------
Directives des programmes------------------------------------------------------

;=====================================
Macro=====================================
led_cligno_lent macro 
    movlw   0x28                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x5A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

led_cligno_rapide macro 
    movlw   0x08                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x0A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

led_cligno_flash macro 
    movlw   0x29                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x2A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

CtlAff macro ctr
        movlw   ctr
        movwf   CMD
        call    Envoi_cmd
        endm

DataAff_8 macro x1
,x2
        movlw   x1
        movwf   CMD
        movlw   x2
        movwf   DATA_L
        call    Envoi_data_8
        call    Envoi_cmd
        endm

DataAff_16 macro x1
,x2
        movlw   x1
        movwf   CMD
        movlw   
(x2) / 0x100
        movwf   DATA_H
        movlw   
(x2) % 0x100
        movwf   DATA_L
        call    Envoi_data_16
        call    Envoi_cmd
        endm
    
;===============================================================================
        org        0x000            ; Debut du programme principale
        goto        START            
; Saut à START

;*****************************************************************************
;
                     ROUTINE INTERRUPTION                                   *
;*****************************************************************************
            ;sauvegarder registres    
            
;---------------------
    org 0x004        ; adresse d'interruption
    movwf   w_temp      ; sauver registre W
    swapf    STATUS,w    ; swap status avec résultat dans w
    movwf    status_temp    ; sauver status swappé
    movf    FSR , w        ; charger FSR
    movwf    FSR_temp    ; sauvegarder FSR

    bsf     STATUS,RP0      ; sélectionner banque1
    btfss    PIE1,TMR1IE     ; tester si interrupt autorisée
    goto     intsw1          ; non sauter
    bcf     STATUS,RP0      ; oui, sélectionner banque0
    btfss    PIR1,TMR1IF     ; oui, tester si interrupt en cours
    goto     intsw1          ; non sauter

    MOVLW    0x3C            ; int toute le 100ms    
    MOVWF    TMR1H
    MOVLW    0xB3
    movwf    TMR1L  

   incf    temp1tmr1,f

   movf    delai2_LED_TEMOIN,w   ;on test si  Xfois 
   subwf   temp1tmr1,W
   btfss   STATUS,Z
   goto    suite_led_temoin
   bcf     LED_TEMOIN 
 ;  bsf     LED_TEMOIN
   clrf    temp1tmr1
   goto     sautintsw9

suite_led_temoin
   movf    delai1_LED_TEMOIN,w
   subwf   temp1tmr1,W
   btfss   STATUS,Z
   goto    sautintsw9
   bsf     LED_TEMOIN
;   bcf     LED_TEMOIN       ;   inversion des sorties pour la platine essais

sautintsw9
    bcf     PIR1,TMR1IF    ; effacer flag interupt 

intsw1 
    bcf     STATUS,RP0      ; oui, sélectionner banque0
            ;restaurer registres
            ;-------------------
restorereg
    bcf     STATUS,RP0
    movf    FSR_temp , w    ; charger FSR sauvé
    movwf    FSR        ; restaurer FSR
    swapf    status_temp,w    ; swap ancien status, résultat dans w
    movwf   STATUS        ; restaurer status
    swapf   w_temp,f    ; Inversion L et H de l'
ancien W
                               
; sans modifier Z
    swapf   w_temp
,w      ; Réinversion de L et H dans W
                
; W restauré sans modifier status
    retfie  

;-------------------------------------------------INITIALISATION------------------------------------------------------
START
            
; Registre d'options (banque 1)
            ; -----------------------------
    BANKSEL    OPTION_REG    ; sélectionner banque 1
    movlw    OPTIONVAL    ; charger masque
    movwf    OPTION_REG    ; initialiser registre option

            ; registres interruptions (banque 1)
            ; ----------------------------------
    bsf    INTCON,PEIE    ; autoriser interruptions périphériques
    bcf     STATUS,RP0    ; passer banque 0
        ; autoriser interruptions (banque 0)
            ; ----------------------------------


    bsf T1CON,0X4
    bcf T1CON,0X5

    MOVLW   0x3C            ; int toute le 100ms    
    MOVWF   TMR1H
    MOVLW   0xB3
    movwf   TMR1L  

    BSF      T1CON,TMR1ON      ;on TMR1    bit a 1

        CLRF        PORTA            ; Remise à 0 du port A
        CLRF        PORTB            ; Remise à 0 du port B
        CLRF        PORTC            ; Remise à 0 du port C
        CLRF        PORTD            ; Remise à 0 du port D
        CLRF        PORTE            ; Remise à 0 du port E

    bsf     STATUS,RP0      ; Banque 1

    clrf    TRISA           ; PortA en sortie
    movlw   b'
00000110'
    movwf   ADCON1              ; sortie digital

                                      ; PORTA, PORTB, PORTC, and PORTE outputs
        CLRF        TRISB            ; PORTD defaults to input
        CLRF        TRISC            ; 
        CLRF        TRISE            ; 
  
    BSF     PIE1,TMR1IE      ;valide le TMR1    

    bcf     STATUS,RP0      ; Banque 0

    led_cligno_lent

    bsf     INTCON,GIE    ; valider interruptions

    bsf LCD_WR      ;  RB2  |    35  |  S  | Data Write afficheur  
    bsf LCD_RD      ;  RB3  |    36  |  S  | Data Read afficheur
    bsf LCD_CE      ;  RB4  |    37  |  S  | Chip Enable
    bsf LCD_CD      ;  RB5  |    38  |  S  | C/D
    bsf LCD_FS      ; font 6x8
    bsf LCD_RESET   ;  RB7  |    40  |  S  | Reset
    call    Delay50mS

    bcf     LCD_RESET    ;  RB7  |    40  |  S  | Reset
    call    Delay50mS
    bsf     LCD_RESET

    CtlAff 0x80             ; select CG ROM afficheur et mode OR    10000000
    call    Delay50mS
    DataAff_16 0x42,0x0000  ;set grp en 0000h
    call    Delay50mS
    DataAff_16 0x43,0x2800  ;set pavé grp 6x8 (40) ou 8x8 (30)
    call    Delay50mS
    DataAff_16 0x40,0x0017  ;set text en 1700h
    call    Delay50mS
    DataAff_16 0x41,0x2800  ;  set pavé grp 6x8 (40) ou 8x8 (30)
    call    Delay50mS
    CtlAff  0xa0            ;  épaisseur curseur 1 lignes (1 à 8)   10100000
    call    Delay50mS
    CtlAff  0x9c            ; afficher grp/txt et cacher curseur    10011100
    call    Delay50mS

    DataAff_16   0x24,0x1700
    call    Delay50mS

 ;   DataAff('
A'-32); CtlAff10(0xc0);                // afficher 'A'
    DataAff_8 0xc0,0x24     ; afficher '
D'.  Modif effectué 
    call    Delay50mS
    led_cligno_rapide

loop

        nop
 ;  
        GOTO      loop           ;  boucle principale


;-------------------------------------------------Programme tempo------------------------------------------------------

Delay50mS
        MOVLW        0x40            ; Charge la valeur dans W
        MOVWF        COUNT1            ; Transfert de W sur COUNT1
        MOVWF        COUNT2            ; Transfert de W sur COUNT2
        DECFSZ        COUNT1,F        ; On décrémente COUNT1,F
        GOTO        $-1            ; Comptage de boucle
        DECFSZ        COUNT2,F        ; On décrémente COUNT2,F
        GOTO        $-3            ; Comptage de boucle
        RETURN
Delay    
        MOVWF        COUNT3            ; Transfert de W sur COUNT3
        CALL        Delay50mS        ; Appel de l'
étiquette Delay50mS
        DECFSZ        COUNT3
,F        ; On décrémente COUNT3,F
        GOTO        
$-2            ; Comptage de boucle
        RETURN
;===============================================================================

Envoi_cmd
    bsf     LCD_CD      
; etat haut pour commande
    bcf     LCD_CE      
; Chip Enable
    movf    CMD
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR    
    return
    
Envoi_data_8
    bcf     LCD_CD      
; etat bas pour données
    bcf     LCD_CE      
; Chip Enable
    movf    DATA_L
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR   
    bsf     LCD_CE      
; Chip disable
    return

Envoi_data_16
    bcf     LCD_CD      
; etat bas pour données
    bcf     LCD_CE      
; Chip Enable
    movf    DATA_L
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR 
    movf    DATA_H
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop 
    bsf     LCD_WR 
    bsf     LCD_CE      
; Chip disable
    return



        END


Modifié en dernier par JMarc le mer. 5 déc. 2018 23:54, modifié 1 fois.

Bonjour à toute l'équipe du forum
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#82 Message par satinas » mer. 5 déc. 2018 21:14

JMarc, Je vois pas pourquoi tu butes sur ces macros
DataAff_16 envoie une commande suivie d'une valeur 16 bits.
donc pour envoyer la commande 0x40 suivie de l'adresse de la ram texte 0x1700, on fait
DataAff_16 0x40,0x1700
et dans ta macro tu récupères bien les 3 octets et les envoie dans le bon ordre attendu par l'afficheur, 0x00 puis 0x17 puis 0x40

Pour l'affichage d'un caractère, pareil il faut inverser, tu mets x1 dans CMD, c'est bon, et il faut donc mettre la commande 0xc0 en premier
DataAff_8 0xc0, 0x24

Ca paraît compliqué ces macros, mais à l'arrivée le main fait 10 lignes.
Pour la remarque sur la broche FS, on peut voir ça plus tard.

Bonjour à toute l'équipe du forum
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#83 Message par JMarc » mer. 5 déc. 2018 23:52

Merci pour la trouvaille. Effectivement j’ai oublié de changer l’ordre de cette ligne. Je remet dans l’ordre pour que nondediode puisse essayer. Fs je l’avait mît à 1 dans les inits pour avoir un affichage 6x8 et j’étudie la datashett

Bonjour à toute l'équipe du forum
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#84 Message par nondediode » jeu. 6 déc. 2018 10:39

Bonjour les amis,

Je viens de lancer le nouveau prg de J.Marc.
L'affaire se précise;
Au démarrage l'écran affiche le trait horizontale un court instant et nous avons bien le clignotement de la led RA1

:bravo:

Bonjour à toute l'équipe du forum
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#85 Message par nondediode » jeu. 6 déc. 2018 12:30

Je viens de modifier la macro comme le suggère Satinas. Sauf erreur de ma part, j'ai le même fonctionnement.
Au démarrage l'écran affiche le trait horizontale un court instant et j'obtiens tjrs le clignotement rapide de la led RA1.

Pour comprendre votre programme, je me suis permis d'aller isoler le clignotement rapide de la LED pour voir si le prg ne butait pas sur une cde et qu'il allait bien jusqu'au bout.
Le coup de la LED je le retiens :wink:



Code : Tout sélectionner

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

;
 TITRE: Gestion d'un afficheur LCD graphique
; DATE: 10/11/2018
; AUTEUR: nondediode
; PIC UTILISE: PIC16F877
; Gestion PP845 version 2019
; le quartz est de 4MHz
 ; essai JMarc Version 1,01
;----------------------------------------------------Brochage du PIC sur la carte--------------------------------------------------------- 
;
;  Port | Broche | E/S | Description

;  RA0  |    02  |  S  | Relais "MUTE"
;  RA1  |    03  |  S  | Relais "PHASE"
;  RA2  |    04  |  S  | LED droite
;  RA3  |    05  |  S  | LED gauche
;  RA4  |    06  |  S  | Relais de cde HT gauche et droit
;  RA5  |    07  |  S  | Relais statique gauche et droit

;  RB0  |    33  |  E  | Inter "on / off"
;  RB1  |    34  |  E  | Bouton poussoir "OK"
;  RB2  |    35  |  S  | Data Write afficheur  
;  RB3  |    36  |  S  | Data Read afficheur
;  RB4  |    37  |  S  | Chip Enable
;  RB5  |    38  |  S  | C/D
;  RB6  |    39  |  S  | Font Size Select
;  RB7  |    40  |  S  | Reset

;  RC0  |    15  |  S  | Adressage entrée audio bit A
;  RC1  |    16  |  S  | Adressage entrée audio bit B
;  RC2  |    17  |  S  | Adressage entrée audio bit C
;  RC3  |    18  |  S  | Adressage entrée audio bit D
;  RC4  |    23  |  S  | LEDs Rouge droit et gauche
;  RC5  |    24  |  E  | Bouton poussoir "INPUT"
;  RC6  |    25  |  E  | Bouton poussoir "PHASE"
;  RC7  |    26  |  E  | Bouton poussoir "MUTE"

;  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=16f877a
    
#include <p16f877.inc>
    radix dec                      ; on travaille en décimal par défaut

    __CONFIG   _CP_OFF 
& _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC 

OPTIONVAL    EQU    B
'00001111'
;-------------------------------------------------Definition de la RAM------------------------------------------------------

        cblock        0x20
                TEMP            
;temp buffer
                DATAL            
;instruction donnée =0
                DATAH            
;instruction donnée =1
                COMMAND            
;instruction
                TABLECOUNT        
;tablecounter
        endc

        cblock        0x70
      w_temp 
: 1        ; Sauvegarde registre W
    status_temp 
: 1        ; sauvegarde registre STATUS
    FSR_temp 
: 1        ; sauvegarde FSR (si indirect en interrupt)
    PCLATH_temp : 1        ; sauvegarde PCLATH (si prog>2K)
    Tempj : 1
    delai1_LED_TEMOIN 
: 1
    delai2_LED_TEMOIN 
: 1
    temptmr0 
: 1
    temp1tmr1 
: 1
    DATA_L 
: 1
    DATA_H 
: 1
    CMD 
: 1


              STATUS_TEMP        
;interruptcontextsave for STATUS

                PCLATH_TEMP        
;interruptcontextsave for PCLATH
                COUNT1            
;delaycounter 1
                COUNT2            
;delaycounter 2
                COUNT3            
;delaycounter 3
                DATA_EE_ADDR        
;data EEPROM address buffer
                DATA_EE_DATA        
;data EEPROM data buffer
        endc




;-------------------------------------------------Definition des constantes------------------------------------------------------
#DEFINE LED_TEMOIN      PORTA,1
#DEFINE LED_TEMOIN2     PORTA,0
#DEFINE LCD_WR  PORTB,2     ;  RB2  |    35  |  S  | Data Write afficheur  
#DEFINE LCD_RD  PORTB,3     ;  RB3  |    36  |  S  | Data Read afficheur
#DEFINE LCD_CE  PORTB,4     ;  RB4  |    37  |  S  | Chip Enable
#DEFINE LCD_CD  PORTB,5     ;  RB5  |    38  |  S  | C/D
#DEFINE LCD_FS  PORTB,6     ;  RB6  |    39  |  S  | Font Size Select
#DEFINE LCD_RESET  PORTB,7  ;  RB7  |    40  |  S  | Reset
LCD_DATA EQU PORTD

;--------------------------------------------Definition des registres temporaires------------------------------------------------------



;--------------------------------------------
Directives des programmes------------------------------------------------------

;=====================================
Macro=====================================
led_cligno_lent macro 
    movlw   0x28                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x5A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

led_cligno_rapide macro 
    movlw   0x08                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x0A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

led_cligno_flash macro 
    movlw   0x29                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x2A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

CtlAff macro ctr
        movlw   ctr
        movwf   CMD
        call    Envoi_cmd
        endm

;DataAff_8 macro x1,x2
DataAff_8 macro 0xc0
,0x24
        movlw   0xc0        
;x1
        movwf   CMD
        movlw   0x24        
;x2
        movwf   DATA_L
        call    Envoi_data_8
        call    Envoi_cmd
        endm

;DataAff_16 macro x1,x2
DataAff_16 macro 0x40
,0x1700
        movlw   0x40        
;x1
        movwf   CMD
        movlw   
(0x1700) / 0x100        ;(x2) / 0x100
        movwf   DATA_H
        movlw   
(0x1700) % 0x100        ;(x2) % 0x100
        movwf   DATA_L
        call    Envoi_data_16
        call    Envoi_cmd
        endm
    
;===============================================================================
        org        0x000            ; Debut du programme principale
        goto        START            
; Saut à START

;*****************************************************************************
;
                     ROUTINE INTERRUPTION                                   *
;*****************************************************************************
            ;sauvegarder registres    
            
;---------------------
    org 0x004        ; adresse d'interruption
    movwf   w_temp      ; sauver registre W
    swapf    STATUS,w    ; swap status avec résultat dans w
    movwf    status_temp    ; sauver status swappé
    movf    FSR , w        ; charger FSR
    movwf    FSR_temp    ; sauvegarder FSR

    bsf     STATUS,RP0      ; sélectionner banque1
    btfss    PIE1,TMR1IE     ; tester si interrupt autorisée
    goto     intsw1          ; non sauter
    bcf     STATUS,RP0      ; oui, sélectionner banque0
    btfss    PIR1,TMR1IF     ; oui, tester si interrupt en cours
    goto     intsw1          ; non sauter

    MOVLW    0x3C            ; int toute le 100ms    
    MOVWF    TMR1H
    MOVLW    0xB3
    movwf    TMR1L  

   incf    temp1tmr1,f

   movf    delai2_LED_TEMOIN,w   ;on test si  Xfois 
   subwf   temp1tmr1,W
   btfss   STATUS,Z
   goto    suite_led_temoin
   bcf     LED_TEMOIN 
 ;  bsf     LED_TEMOIN
   clrf    temp1tmr1
   goto     sautintsw9

suite_led_temoin
   movf    delai1_LED_TEMOIN,w
   subwf   temp1tmr1,W
   btfss   STATUS,Z
   goto    sautintsw9
   bsf     LED_TEMOIN
;   bcf     LED_TEMOIN       ;   inversion des sorties pour la platine essais

sautintsw9
    bcf     PIR1,TMR1IF    ; effacer flag interupt 

intsw1 
    bcf     STATUS,RP0      ; oui, sélectionner banque0
            ;restaurer registres
            ;-------------------
restorereg
    bcf     STATUS,RP0
    movf    FSR_temp , w    ; charger FSR sauvé
    movwf    FSR        ; restaurer FSR
    swapf    status_temp,w    ; swap ancien status, résultat dans w
    movwf   STATUS        ; restaurer status
    swapf   w_temp,f    ; Inversion L et H de l'
ancien W
                               
; sans modifier Z
    swapf   w_temp
,w      ; Réinversion de L et H dans W
                
; W restauré sans modifier status
    retfie  

;-------------------------------------------------INITIALISATION------------------------------------------------------
START
            
; Registre d'options (banque 1)
            ; -----------------------------
    BANKSEL    OPTION_REG    ; sélectionner banque 1
    movlw    OPTIONVAL    ; charger masque
    movwf    OPTION_REG    ; initialiser registre option

            ; registres interruptions (banque 1)
            ; ----------------------------------
    bsf    INTCON,PEIE    ; autoriser interruptions périphériques
    bcf     STATUS,RP0    ; passer banque 0
        ; autoriser interruptions (banque 0)
            ; ----------------------------------


    bsf T1CON,0X4
    bcf T1CON,0X5

    MOVLW   0x3C            ; int toute le 100ms    
    MOVWF   TMR1H
    MOVLW   0xB3
    movwf   TMR1L  

    BSF      T1CON,TMR1ON      ;on TMR1    bit a 1

        CLRF        PORTA            ; Remise à 0 du port A
        CLRF        PORTB            ; Remise à 0 du port B
        CLRF        PORTC            ; Remise à 0 du port C
        CLRF        PORTD            ; Remise à 0 du port D
        CLRF        PORTE            ; Remise à 0 du port E

    bsf     STATUS,RP0      ; Banque 1

    clrf    TRISA           ; PortA en sortie
    movlw   b'
00000110'
    movwf   ADCON1              ; sortie digital

                                      ; PORTA, PORTB, PORTC, and PORTE outputs
        CLRF        TRISB            ; PORTD defaults to input
        CLRF        TRISC            ; 
        CLRF        TRISE            ; 
  
    BSF     PIE1,TMR1IE      ;valide le TMR1    

    bcf     STATUS,RP0      ; Banque 0

    led_cligno_lent

    bsf     INTCON,GIE    ; valider interruptions

    bsf LCD_WR      ;  RB2  |    35  |  S  | Data Write afficheur  
    bsf LCD_RD      ;  RB3  |    36  |  S  | Data Read afficheur
    bsf LCD_CE      ;  RB4  |    37  |  S  | Chip Enable
    bsf LCD_CD      ;  RB5  |    38  |  S  | C/D
    bsf LCD_FS      ; font 6x8
    bsf LCD_RESET   ;  RB7  |    40  |  S  | Reset
    call    Delay50mS

    bcf     LCD_RESET    ;  RB7  |    40  |  S  | Reset
    call    Delay50mS
    bsf     LCD_RESET

    CtlAff 0x80             ; select CG ROM afficheur et mode OR    10000000
    call    Delay50mS
    DataAff_16 0x42,0x0000  ;set grp en 0000h
    call    Delay50mS
    DataAff_16 0x43,0x2800  ;set pavé grp 6x8 (40) ou 8x8 (30)
    call    Delay50mS
    DataAff_16 0x40,0x0017  ;set text en 1700h
    call    Delay50mS
    DataAff_16 0x41,0x2800  ;  set pavé grp 6x8 (40) ou 8x8 (30)
    call    Delay50mS
    CtlAff  0xa0            ;  épaisseur curseur 1 lignes (1 à 8)   10100000
    call    Delay50mS
    CtlAff  0x9c            ; afficher grp/txt et cacher curseur    10011100
    call    Delay50mS

    DataAff_16   0x24,0x1700
    call    Delay50mS

 ;   DataAff('
A'-32); CtlAff10(0xc0);                // afficher 'A'
    DataAff_8 0xc0,0x24     ; afficher '
D'.  Modif effectué 
    call    Delay50mS
    led_cligno_rapide

loop

        nop
 ;  
        GOTO      loop           ;  boucle principale


;-------------------------------------------------Programme tempo------------------------------------------------------

Delay50mS
        MOVLW        0x40            ; Charge la valeur dans W
        MOVWF        COUNT1            ; Transfert de W sur COUNT1
        MOVWF        COUNT2            ; Transfert de W sur COUNT2
        DECFSZ        COUNT1,F        ; On décrémente COUNT1,F
        GOTO        $-1            ; Comptage de boucle
        DECFSZ        COUNT2,F        ; On décrémente COUNT2,F
        GOTO        $-3            ; Comptage de boucle
        RETURN
Delay    
        MOVWF        COUNT3            ; Transfert de W sur COUNT3
        CALL        Delay50mS        ; Appel de l'
étiquette Delay50mS
        DECFSZ        COUNT3
,F        ; On décrémente COUNT3,F
        GOTO        
$-2            ; Comptage de boucle
        RETURN
;===============================================================================

Envoi_cmd
    bsf     LCD_CD      
; etat haut pour commande
    bcf     LCD_CE      
; Chip Enable
    movf    CMD
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR    
    return
    
Envoi_data_8
    bcf     LCD_CD      
; etat bas pour données
    bcf     LCD_CE      
; Chip Enable
    movf    DATA_L
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR   
    bsf     LCD_CE      
; Chip disable
    return

Envoi_data_16
    bcf     LCD_CD      
; etat bas pour données
    bcf     LCD_CE      
; Chip Enable
    movf    DATA_L
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR 
    movf    DATA_H
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop 
    bsf     LCD_WR 
    bsf     LCD_CE      
; Chip disable
    return



        END




Bonjour à toute l'équipe du forum
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#86 Message par satinas » jeu. 6 déc. 2018 13:52

Bonjour à tous,

viewtopic.php?p=11259#p11259
nondediode, as-tu modifié les 6 lignes indiquées ici, et ajouté le "bsf LCD_CE"
donne nous le programme modifié, merci

Bonjour à toute l'équipe du forum
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#87 Message par nondediode » jeu. 6 déc. 2018 14:45

Bonjour Satinas,

J'ai lancé le prg avec tes modifs mais ça ne change rien
Relis, pour voir si je n'ai pas fait d'erreurs



Code : Tout sélectionner

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

;
 TITRE: Gestion d'un afficheur LCD graphique
; DATE: 10/11/2018
; AUTEUR: nondediode
; PIC UTILISE: PIC16F877
; Gestion PP845 version 2019
; le quartz est de 4MHz
 ; essai JMarc Version 1,01
;----------------------------------------------------Brochage du PIC sur la carte--------------------------------------------------------- 
;
;  Port | Broche | E/S | Description

;  RA0  |    02  |  S  | Relais "MUTE"
;  RA1  |    03  |  S  | Relais "PHASE"
;  RA2  |    04  |  S  | LED droite
;  RA3  |    05  |  S  | LED gauche
;  RA4  |    06  |  S  | Relais de cde HT gauche et droit
;  RA5  |    07  |  S  | Relais statique gauche et droit

;  RB0  |    33  |  E  | Inter "on / off"
;  RB1  |    34  |  E  | Bouton poussoir "OK"
;  RB2  |    35  |  S  | Data Write afficheur  
;  RB3  |    36  |  S  | Data Read afficheur
;  RB4  |    37  |  S  | Chip Enable
;  RB5  |    38  |  S  | C/D
;  RB6  |    39  |  S  | Font Size Select
;  RB7  |    40  |  S  | Reset

;  RC0  |    15  |  S  | Adressage entrée audio bit A
;  RC1  |    16  |  S  | Adressage entrée audio bit B
;  RC2  |    17  |  S  | Adressage entrée audio bit C
;  RC3  |    18  |  S  | Adressage entrée audio bit D
;  RC4  |    23  |  S  | LEDs Rouge droit et gauche
;  RC5  |    24  |  E  | Bouton poussoir "INPUT"
;  RC6  |    25  |  E  | Bouton poussoir "PHASE"
;  RC7  |    26  |  E  | Bouton poussoir "MUTE"

;  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=16f877a
    
#include <p16f877.inc>
    radix dec                      ; on travaille en décimal par défaut

    __CONFIG   _CP_OFF 
& _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC 

OPTIONVAL    EQU    B
'00001111'
;-------------------------------------------------Definition de la RAM------------------------------------------------------

        cblock        0x20
                TEMP            
;temp buffer
                DATAL            
;instruction donnée =0
                DATAH            
;instruction donnée =1
                COMMAND            
;instruction
                TABLECOUNT        
;tablecounter
        endc

        cblock        0x70
      w_temp 
: 1        ; Sauvegarde registre W
    status_temp 
: 1        ; sauvegarde registre STATUS
    FSR_temp 
: 1        ; sauvegarde FSR (si indirect en interrupt)
    PCLATH_temp : 1        ; sauvegarde PCLATH (si prog>2K)
    Tempj : 1
    delai1_LED_TEMOIN 
: 1
    delai2_LED_TEMOIN 
: 1
    temptmr0 
: 1
    temp1tmr1 
: 1
    DATA_L 
: 1
    DATA_H 
: 1
    CMD 
: 1


              STATUS_TEMP        
;interruptcontextsave for STATUS

                PCLATH_TEMP        
;interruptcontextsave for PCLATH
                COUNT1            
;delaycounter 1
                COUNT2            
;delaycounter 2
                COUNT3            
;delaycounter 3
                DATA_EE_ADDR        
;data EEPROM address buffer
                DATA_EE_DATA        
;data EEPROM data buffer
        endc




;-------------------------------------------------Definition des constantes------------------------------------------------------
#DEFINE LED_TEMOIN      PORTA,1
#DEFINE LED_TEMOIN2     PORTA,0
#DEFINE LCD_WR  PORTB,2     ;  RB2  |    35  |  S  | Data Write afficheur  
#DEFINE LCD_RD  PORTB,3     ;  RB3  |    36  |  S  | Data Read afficheur
#DEFINE LCD_CE  PORTB,4     ;  RB4  |    37  |  S  | Chip Enable
#DEFINE LCD_CD  PORTB,5     ;  RB5  |    38  |  S  | C/D
#DEFINE LCD_FS  PORTB,6     ;  RB6  |    39  |  S  | Font Size Select
#DEFINE LCD_RESET  PORTB,7  ;  RB7  |    40  |  S  | Reset
LCD_DATA EQU PORTD

;--------------------------------------------Definition des registres temporaires------------------------------------------------------



;--------------------------------------------
Directives des programmes------------------------------------------------------

;=====================================
Macro=====================================
led_cligno_lent macro 
    movlw   0x28                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x5A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

led_cligno_rapide macro 
    movlw   0x08                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x0A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

led_cligno_flash macro 
    movlw   0x29                
; longueur
    movwf   delai1_LED_TEMOIN
    movlw   0x2A                
; fréquence
    movwf   delai2_LED_TEMOIN
    clrf    temp1tmr1
    endm

CtlAff macro ctr
        movlw   ctr
        movwf   CMD
        call    Envoi_cmd
        endm

;DataAff_8 macro x1,x2
DataAff_8 macro 0xc0
,0x24
        movlw   0xc0        
;x1
        movwf   CMD
        movlw   0x24        
;x2
        movwf   DATA_L
        call    Envoi_data_8
        call    Envoi_cmd
        endm

;DataAff_16 macro x1,x2
DataAff_16 macro 0x40
,0x1700
        movlw   0x40        
;x1
        movwf   CMD
        movlw   
(0x1700) / 0x100        ;(x2) / 0x100
        movwf   DATA_H
        movlw   
(0x1700) % 0x100        ;(x2) % 0x100
        movwf   DATA_L
        call    Envoi_data_16
        call    Envoi_cmd
        endm
    
;===============================================================================
        org        0x000            ; Debut du programme principale
        goto        START            
; Saut à START

;*****************************************************************************
;
                     ROUTINE INTERRUPTION                                   *
;*****************************************************************************
            ;sauvegarder registres    
            
;---------------------
    org 0x004        ; adresse d'interruption
    movwf   w_temp      ; sauver registre W
    swapf    STATUS,w    ; swap status avec résultat dans w
    movwf    status_temp    ; sauver status swappé
    movf    FSR , w        ; charger FSR
    movwf    FSR_temp    ; sauvegarder FSR

    bsf     STATUS,RP0      ; sélectionner banque1
    btfss    PIE1,TMR1IE     ; tester si interrupt autorisée
    goto     intsw1          ; non sauter
    bcf     STATUS,RP0      ; oui, sélectionner banque0
    btfss    PIR1,TMR1IF     ; oui, tester si interrupt en cours
    goto     intsw1          ; non sauter

    MOVLW    0x3C            ; int toute le 100ms    
    MOVWF    TMR1H
    MOVLW    0xB3
    movwf    TMR1L  

   incf    temp1tmr1,f

   movf    delai2_LED_TEMOIN,w   ;on test si  Xfois 
   subwf   temp1tmr1,W
   btfss   STATUS,Z
   goto    suite_led_temoin
   bcf     LED_TEMOIN 
 ;  bsf     LED_TEMOIN
   clrf    temp1tmr1
   goto     sautintsw9

suite_led_temoin
   movf    delai1_LED_TEMOIN,w
   subwf   temp1tmr1,W
   btfss   STATUS,Z
   goto    sautintsw9
   bsf     LED_TEMOIN
;   bcf     LED_TEMOIN       ;   inversion des sorties pour la platine essais

sautintsw9
    bcf     PIR1,TMR1IF    ; effacer flag interupt 

intsw1 
    bcf     STATUS,RP0      ; oui, sélectionner banque0
            ;restaurer registres
            ;-------------------
restorereg
    bcf     STATUS,RP0
    movf    FSR_temp , w    ; charger FSR sauvé
    movwf    FSR        ; restaurer FSR
    swapf    status_temp,w    ; swap ancien status, résultat dans w
    movwf   STATUS        ; restaurer status
    swapf   w_temp,f    ; Inversion L et H de l'
ancien W
                               
; sans modifier Z
    swapf   w_temp
,w      ; Réinversion de L et H dans W
                
; W restauré sans modifier status
    retfie  

;-------------------------------------------------INITIALISATION------------------------------------------------------
START
            
; Registre d'options (banque 1)
            ; -----------------------------
    BANKSEL    OPTION_REG    ; sélectionner banque 1
    movlw    OPTIONVAL    ; charger masque
    movwf    OPTION_REG    ; initialiser registre option

            ; registres interruptions (banque 1)
            ; ----------------------------------
    bsf    INTCON,PEIE    ; autoriser interruptions périphériques
    bcf     STATUS,RP0    ; passer banque 0
        ; autoriser interruptions (banque 0)
            ; ----------------------------------


    bsf T1CON,0X4
    bcf T1CON,0X5

    MOVLW   0x3C            ; int toute le 100ms    
    MOVWF   TMR1H
    MOVLW   0xB3
    movwf   TMR1L  

    BSF      T1CON,TMR1ON      ;on TMR1    bit a 1

        CLRF        PORTA            ; Remise à 0 du port A
        CLRF        PORTB            ; Remise à 0 du port B
        CLRF        PORTC            ; Remise à 0 du port C
        CLRF        PORTD            ; Remise à 0 du port D
        CLRF        PORTE            ; Remise à 0 du port E

    bsf     STATUS,RP0      ; Banque 1

    clrf    TRISA           ; PortA en sortie
    movlw   b'
00000110'
    movwf   ADCON1              ; sortie digital

                                      ; PORTA, PORTB, PORTC, and PORTE outputs
        CLRF        TRISB            ; PORTD defaults to input
        CLRF        TRISC            ; 
        CLRF        TRISE            ; 
  
    BSF     PIE1,TMR1IE      ;valide le TMR1    

    bcf     STATUS,RP0      ; Banque 0

    led_cligno_lent

    bsf     INTCON,GIE    ; valider interruptions

    bsf LCD_WR      ;  RB2  |    35  |  S  | Data Write afficheur  
    bsf LCD_RD      ;  RB3  |    36  |  S  | Data Read afficheur
    bsf LCD_CE      ;  RB4  |    37  |  S  | Chip Enable
    bsf LCD_CD      ;  RB5  |    38  |  S  | C/D
    bsf LCD_FS      ; font 6x8
    bsf LCD_RESET   ;  RB7  |    40  |  S  | Reset
    call    Delay50mS

    bcf     LCD_RESET    ;  RB7  |    40  |  S  | Reset
    call    Delay50mS
    bsf     LCD_RESET

    CtlAff 0x80             ; select CG ROM afficheur et mode OR    10000000
    call    Delay50mS
    DataAff_16 0x42,0x0000  ;set grp en 0000h
    call    Delay50mS
    DataAff_16 0x43,30          ;set pavé grp 6x8 (40) ou 8x8 (30)0x2800
    call    Delay50mS
    DataAff_16 0x40,0x1700  ;set text en 1700h
    call    Delay50mS
    DataAff_16 0x41,0x40      ;  set pavé grp 6x8 (40) ou 8x8 (30)
    call    Delay50mS
    CtlAff  0xa0            ;  épaisseur curseur 1 lignes (1 à 8)   10100000
    call    Delay50mS
    CtlAff  0x9c            ; afficher grp/txt et cacher curseur    10011100
    call    Delay50mS

    DataAff_16   0x24,0x1700
    call    Delay50mS

 ;   DataAff('
A'-32); CtlAff10(0xc0);                // afficher 'A'
    DataAff_8 0xc0,0x1700     ; afficher '
D'.  Modif effectué 
    call    Delay50mS
    led_cligno_rapide

loop

        nop
 ;  
        GOTO      loop           ;  boucle principale


;-------------------------------------------------Programme tempo------------------------------------------------------

Delay50mS
        MOVLW        0x40            ; Charge la valeur dans W
        MOVWF        COUNT1            ; Transfert de W sur COUNT1
        MOVWF        COUNT2            ; Transfert de W sur COUNT2
        DECFSZ        COUNT1,F        ; On décrémente COUNT1,F
        GOTO        $-1            ; Comptage de boucle
        DECFSZ        COUNT2,F        ; On décrémente COUNT2,F
        GOTO        $-3            ; Comptage de boucle
        RETURN
Delay    
        MOVWF        COUNT3            ; Transfert de W sur COUNT3
        CALL        Delay50mS        ; Appel de l'
étiquette Delay50mS
        DECFSZ        COUNT3
,F        ; On décrémente COUNT3,F
        GOTO        
$-2            ; Comptage de boucle
        RETURN
;===============================================================================

Envoi_cmd
    bsf     LCD_CD      
; etat haut pour commande
    bsf     LCD_CE      
; Chip Enable
    movf    CMD
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR    
    return
    
Envoi_data_8
    bcf     LCD_CD      
; etat bas pour données
    bcf     LCD_CE      
; Chip Enable
    movf    DATA_L
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR   
    bsf     LCD_CE      
; Chip disable
    return

Envoi_data_16
    bcf     LCD_CD      
; etat bas pour données
    bcf     LCD_CE      
; Chip Enable
    movf    DATA_L
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop  
    bsf     LCD_WR 
    movf    DATA_H
,w
    movwf   LCD_DATA
    bcf     LCD_WR     
;  Data Write afficheur actif etat bas
    nop 
    bsf     LCD_WR 
    bsf     LCD_CE      
; Chip disable
    return



        END

Bonjour à toute l'équipe du forum
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#88 Message par satinas » jeu. 6 déc. 2018 14:58

Code : Tout sélectionner

DataAff_16 0x41,40      ;

Envoi_cmd
    bsf     LCD_CD      ; etat haut pour commande
    bcf     LCD_CE      ; Chip Enable
    movf    CMD,w
    movwf   LCD_DATA
    bcf     LCD_WR     ;  Data Write afficheur actif etat bas
    nop 
    bsf     LCD_WR   
    bsf     LCD_CE      ; Chip disable
    return

Bonjour à toute l'équipe du forum
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#89 Message par satinas » jeu. 6 déc. 2018 15:02

???????
DataAff_8 0xc0,0x1700 ; afficher 'D'. Modif effectué

Pour éviter d'avoir des problèmes de tabulations dans les sources, il faut régler Mplab pour remplacer les tabulations par des espaces. C'est dans le menu Edit/Properties/File Type, cocher "Insert spaces"

Bonjour à toute l'équipe du forum
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#90 Message par satinas » jeu. 6 déc. 2018 15:49

Fallait pas toucher aux macros, juste modifier les 6 lignes, on va pas y arriver comme ça. Je t'envoie un source dans 1 heure.
Modifie le réglége de Mplab, voir ci-dessus.


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Roger et 48 invités