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
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#41 Message par satinas » dim. 25 nov. 2018 20:37

Pour positionner le curseur texte,il faut envoyer sa position dans la ram texte
Si celle-ci démarre en 0x1700h, la première ligne de 40 caractères va de 0x1700 à 0x1727

la 2ème ligne démarre en 0x1728, on envoie pour afficher son premier caractère :
la data 0x28 puis la data 0x17 puis la commande 0x24
Il faut un sous-programme qui fait ça.

Pour le graphique c'est pareil, sauf que selon le réglage en 6 ou 8, on affiche des segments de 6 ou 8 pixels, faut encore expérimenter tout ça.

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

#42 Message par nondediode » dim. 25 nov. 2018 20:44

Vous êtes tous très fort Merci !
Je me suis pas trompé de venir vous rejoindre!
Mais c'est vraiment plus complexe que le HD44780! J'étais à la petite école :oops:

Bonjour à toute l'équipe du forum
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#43 Message par Jérémy » dim. 25 nov. 2018 20:55

nondediode a écrit :Source du message Je me suis pas trompé de venir vous rejoindre!


Fait passer le message sur Futura, ca fera de la PUB pour le fourm ! :sifflotte:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#44 Message par JMarc » dim. 25 nov. 2018 22:36

wouha, je m'absente cinq minute et le probleme est réglé :bravo: :+1: Merci !

Merci satinas et temps-x, mes invités viennent de partir, demain je travaille tres tot mais en rentrant je regarde tout cela

Nondediode, que donne le programme de temps-x ? c'est ok ?

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

#45 Message par nondediode » lun. 26 nov. 2018 08:46

Bonjour tout le monde,

Avec le prg de temps-x, j'ai RA2 ensuite RC4 puis RA3 qui s'allume et ensuite tout s’éteint.
Tjrs le trait sur l'afficheur. :evil:

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

#46 Message par JMarc » lun. 26 nov. 2018 19:58

Bonjour tout le monde

dur de comprendre ce programme car beaucoup de saut qui ne sont pas compatible avec la fatigue de la journée de travail

nondediode,je n'ai pas fais grand chose mais supprimé quelques tests d'entrée que j'ai remplacé par une petite tempo. sur un malentendu on ne sait jamais :lol: je te laisse essayer ce nouvel essai

le but est de voir cette led avec un clignotement rapide

Code : Tout sélectionner

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

TITREGestion 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=16f877
    
#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


              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        WRITE        PORTB,2            ; GLCD writeenable/disable (active low)
        #define        READ        PORTB,3            ; GLCD readenable/disable (active low)
        #define        CE        PORTB,4            ; GLCD chip enable/disable (active low)
        #define        CD        PORTB,5            ; GLCD command/data
        #define        FONT        PORTB,6            ; GLCD font select (6x8 or 8x8)
        #define        RST        PORTB,7            ; GLCD reset

        #define        D0        PORTD,RD0        ; GLCD data port bit 0
        #define        D1        PORTD,RD1        ; GLCD data port bit 1
        #define        D2        PORTD,RD2        ; GLCD data port bit 2
        #define        D3        PORTD,RD3        ; GLCD data port bit 3
        #define        D4        PORTD,RD4        ; GLCD data port bit 4
        #define        D5        PORTD,RD5        ; GLCD data port bit 5
        #define        D6        PORTD,RD6        ; GLCD data port bit 6
        #define        D7        PORTD,RD7        ; GLCD data port bit 7

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


        
WR_EN        EQU 2
        WR_DIS        EQU 7
        RD_EN        EQU 1
        RD_DIS        EQU 7

;--------------------------------------------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
;===============================================================================
        
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



GLCD_INIT
        BCF        RST            ; reset du GLCD
        MOVLW        B'
01111100'         ; On charge la valeur dans le registre W
        MOVWF        PORTB            ; Command mode and 6x8 font, disableread, write, and chip enable
        call        Delay50mS        ; Appel de la tempo de 50ms
        BSF        RST            ; disable reset

;-------------------------------------------------INITIALISATION afficheur------------------------------------------------------




ModeSet
        MOVLW        0x84            ; Charge la valeur dans W
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        NoData            ; Appel de l'
étiquette NoData
GraphicsHome
        MOVLW        0x00            
Charge la valeur dans W
        MOVWF        DATAL            
Transfert de W sur DATAL
        MOVLW        0x00            
Charge la valeur dans W
        MOVWF        DATAH            
Transfert de W sur DATAH
        MOVLW        0x42            
Charge la valeur dans W
        MOVWF        COMMAND            
Transfert de W sur COMMAND
        CALL        TwoData            
Appel de l'étiquette TwoData
GraphicsArea
        MOVLW        0x28            ; Charge la valeur dans W
        MOVWF        DATAL            ; Transfert de W sur DATAL
        MOVLW        0x0            ; Charge la valeur dans W
        MOVWF        DATAH            ; Transfert de W sur DATAH
        MOVLW        0x43            ; Charge la valeur dans W
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        TwoData            ; Appel de l'
étiquette TwoData


TextHome
        MOVLW        0x00            
Charge la valeur dans W
        MOVWF        DATAL            
Transfert de W sur DATAL
        MOVLW        0x17            
Charge la valeur dans W
        MOVWF        DATAH            
Transfert de W sur DATAH
        MOVLW        0x40            
Charge la valeur dans W
        MOVWF        COMMAND            
Transfert de W sur COMMAND
        CALL        TwoData            
Appel de l'étiquette TwoData
TextArea
        MOVLW        0x28            ; Charge la valeur dans W
        MOVWF        DATAL            ; Transfert de W sur DATAL
        MOVLW        0x00            ; Charge la valeur dans W
        MOVWF        DATAH            ; Transfert de W sur DATAH
        MOVLW        0x41            ; Charge la valeur dans W
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        TwoData            ; Appel de l'
étiquette TwoData
CGROMSet
        MOVLW        0x03            
Charge la valeur dans W
        MOVWF        DATAL            
Transfert de W sur DATAL
        MOVLW        0x0            
Charge la valeur dans W
        MOVWF        DATAH            
Transfert de W sur DATAH
        MOVLW        0x22            
Charge la valeur dans W
        MOVWF        COMMAND            
Transfert de W sur COMMAND
        CALL        TwoData            
Appel de l'étiquette TwoData

        goto saut1



cleargraphicsRAM
        MOVLW        0x00            ; Charge la valeur dans W
        MOVWF        DATAL            ; Setaddress pointer to 0x0000
        MOVLW        0x00            ; Charge la valeur dans W
        MOVWF        DATAH            ; Transfert de W sur DATAH
        CALL        ADDR_PTR        ; Appel de l'
étiquette ADDR_PTR
        MOVLW        0x20            
Charge la valeur dans W
        MOVWF        COUNT2            
Transfert de W sur COUNT2
        CALL        DisplayClear        
Appel de l'étiquette DisplayClear

cleartextRAM

        MOVLW        0x00            ; Charge la valeur dans W
        MOVWF        DATAL            ; Setaddress pointer to 0x0000
        MOVLW        0x17            ; Charge la valeur dans W
        MOVWF        DATAH            ; Transfert de W sur DATAH
        CALL        ADDR_PTR        ; Appel de l'
étiquette ADDR_PTR
        MOVLW        0x08            
Charge la valeur dans W
        MOVWF        COUNT2            
Transfert de W sur COUNT2
        CALL        DisplayClear        
Appel de l'étiquette DisplayClear

saut1
CSRPattern
        MOVLW        0xA0            ; Charge la valeur dans W  (A0) 
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        NoData            ; Appel de l'
étiquette NoData
CSRPointer
        MOVLW        0x00            
Charge la valeur dans W
        MOVWF        DATAL            
Transfert de W sur DATAL
        MOVLW        0x00            
Charge la valeur dans W
        MOVWF        DATAH            
Transfert de W sur DATAH
        CALL        CSR_PTR            
Appel de l'étiquette CSR_PTR
ADDRPointer
        MOVLW        0x00            ; Charge la valeur dans W
        MOVWF        DATAL            ; Transfert de W sur DATAL
        MOVLW        0x00            ; Charge la valeur dans W
        MOVWF        DATAH            ; Transfert de W sur DATAH
        CALL        ADDR_PTR        ; Appel de l'
étiquette ADDR_PTR
DisplayOn
        MOVLW        0x9F            
Charge la valeur dans W
        MOVWF        COMMAND            
Transfert de W sur COMMAND
        CALL        NoData            
Appel de l'étiquette NoData

loop
        nop
        led_cligno_rapide
        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


;-------------------------------------------------
Position Address Pointer ------------------------------------------------------


ADDR_PTR
        MOVLW        0x24            
Charge la valeur dans W
        MOVWF        COMMAND            
Transfert de W sur COMMAND
        CALL        TwoData            
Appel de l'étiquette TwoData
        RETURN

;-------------------------------------------------Position Cursor Pointer ------------------------------------------------------


CSR_PTR    
        MOVLW        0x21            ; Charge la valeur dans W
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        TwoData            ; Appel de l'
étiquette TwoData
        
RETURN

;-------------------------------------------------
Command Send Routines ------------------------------------------------------

TwoData    
        CALL        LCDStat            
Appel de l'étiquette LCDStat
        MOVWF        DATAL            ; Transfert de W sur DATAL
        CALL        DWrite            ; Appel de l'
étiquette DWrite        
OneData    
        CALL        LCDStat            
Appel de l'étiquette LCDStat
        MOVWF        DATAH            ; Transfert de W sur DATAH
        CALL        DWrite            ; Appel de l'
étiquette DWrite
NoData    
        CALL        LCDStat            
Appel de l'étiquette LCDStat
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        Command            ; Appel de l'
étiquette Command
        
RETURN

;------------------------------------------------
GLCD Read/Write/Status Check------------------------------------------------------

Command    
        BSF        CD            
CD=1     command/data
        
GOTO        $+2            Permet de sauter 2 lignes de code
DWrite
        BCF        CD            
CD=0       CD PORTB,5
        MOVWF        PORTD            
Transfert de W sur port D
        MOVLW        WR_EN            
Charge WR_EN dans W
        MOVWF        PORTB            
Transfert de W sur port B
        BSF        STATUS
,5        Accès à la 2ème page mémoire TRISD
        MOVLW        
B'00000000'        Charge la valeur dans W
        MOVWF        TRISD            
Le port D est en sortie
        MOVLW        WR_DIS            
Charge WR_DIS dans W
        MOVWF        PORTB            
Transfert de W sur port B
        BCF        STATUS
,5        Accès à la 1ère page mémoire TRISD        
        call        Delay50mS        
Appel de la tempo de 50ms
        BSF        STATUS
,5        Accès à la 2ème page mémoire TRISD
        MOVLW        
B'11111111'        Charge la valeur dans W
        MOVWF        TRISD            
Le port D est en entrée
        BCF        STATUS
,5        Accès à la 1ère page mémoire TRISD
        
RETURN
LCDStat    
        CALL        StatReadEn        
Appel de l'étiquette StatReadEn
;        BTFSC        PORTD,0            ; D0 = 0?
;        BTFSS        PORTD,1            ; D1 = 1?
;        GOTO        $-2            ; Comptage de boucle
        CALL        Delay50mS        ; Appel de l'
étiquette Delay50mS
        CALL        StatReadDis        
Appel de l'étiquette StatReadDis
        RETURN
DAWStat    
        CALL        StatReadEn        ; Appel de l'
étiquette StatReadEn
 
;       BTFSS        PORTD,3            D3 1?
 ;       GOTO        $-
1            Comptage de boucle
         CALL        Delay50mS        
Appel de l'étiquette Delay50mS
       CALL        StatReadDis        ; disablestatusread
        RETURN
StatReadEn
        BSF        CD            ; CD=1
        MOVLW        RD_EN            ; Charge RD_EN dans W
        MOVWF        PORTB            ; Transfert de W sur port B
        RETURN
StatReadDis
        MOVLW        RD_DIS            ; Charge RD_DIS dans W
        MOVWF        PORTB            ; Transfert de W sur port B
        RETURN

;---------------------------------------------Data Auto Read/Write Routines--------------------------------------------------

DAWSet
        MOVLW        0xB0            ; Charge la valeur dans W
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        NoData            ; Appel de l'
étiquette NoData
        CALL        LCDStat            
Appel de l'étiquette LCDStat
        CALL        DAWStat            ; Appel de l'
étiquette DAWStat
        
RETURN
DAWReset
        CALL        DAWStat            
Appel de l'étiquette DAWStat
        MOVLW        0xB2            ; Charge la valeur dans W
        MOVWF        COMMAND            ; Transfert de W sur COMMAND
        CALL        NoData            ; Appel de l'
étiquette NoData
        
RETURN

;------------------------------------------------
Clear Display------------------------------------------------------


DisplayClear
        MOVLW        160            
Charge la valeur dans W
        MOVWF        COUNT1            
Transfert de W sur COUNT1
        CALL        DAWSet            
Appel de l'étiquette DAWSet 
        CALL        DAWStat            ; Appel de l'
étiquette DAWStat
        MOVLW        0            
Charge la valeur dans W
        CALL        DWrite            
Appel de l'étiquette DWrite
        DECFSZ        COUNT1,F        ; On décrémente COUNT1,F
        GOTO        $-4            ; Comptage de boucle
        MOVLW        160            ; Charge la valeur dans W
        MOVWF        COUNT1            ; Transfert de W sur COUNT1
        DECFSZ        COUNT2,F        ; On décrémente COUNT2,F
        GOTO        $-8            ; Comptage de boucle    
        CALL        DAWReset        ; Appel de l'
étiquette DAWReset
        
RETURN                    


        
END


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

#47 Message par nondediode » lun. 26 nov. 2018 20:19

Bonjour Jean Marc,

Très gentil à toi de me consacrer du tps après une journée de boulot, mais tu sais j'ai le temps.
Je viens de tester:
Sur ma EasyPic3 se sont les leds RD0 , RD1 et RD2 qui clignotent très rapidement et s'arrêtent au bout de 5s.
J'installe le PIC sur la platine et du coup je ne peut plus voir les LEDs clignoter et j'ai tjrs le trait sur l'écran.

JP

Bonjour à toute l'équipe du forum
jeanyves1976
Avatar de l’utilisateur
Débutant
Débutant
Messages : 39
Âge : 47
Enregistré en : janvier 2018
Localisation : Belgique

#48 Message par jeanyves1976 » lun. 26 nov. 2018 20:51

Bonsoir à tous,

Bon je sais, j'ai 5 pages de retard mais bienvenus à nondediode :sifflotte:
J'ai quand même parcourus le sujet qui est hors de mais compétence... :?

A propos, l'asm y a que çà de vrai :-D

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

#49 Message par JMarc » mar. 27 nov. 2018 05:16

Bonjour tous le monde

Nondediode, c’est un sujet qui me passionne donc pas de soucis

Maintenant je vais faire des sous programme comme l’a suggéré satinas qui nous permettront d’envoyer les chaînes d’octets.

Je regarde cela tranquillement mais ça va prendre un peut de temps

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

#50 Message par satinas » mar. 27 nov. 2018 07:46

Bonjour,
Oui, faut le raccourcir ce programme. J'ai parlé de sous-programme pour le positionnement du curseur texte ou graphique, mais c'est plutôt une macro, qui peut prendre en paramètre une valeur 16 bits. Si la macro est appelée un peu trop souvent, il faudra revenir aux sous-programmes, car elle se vautre en mémoire. Ou alors faire un mix, une macro qui appelle un sous-programme.
SendCmdAddr cmd, adr_16bit
SetCurTxt ligne, colonne
WriteStr s
Plot x, y

Pour le plot, ça se complique car si l'on veut travailler au pixel, il faut lire l'octet de la ram graphique qui le contient, afin de le mettre à jour. Il vaudrait mieux prévoir une ram tampon dans le pic comme le disait Paul, pour aller plus vite.


Retourner vers « Langage ASM »

Qui est en ligne

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