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

Config afficheur 1 ligne 16 caractères
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#1 Message par nondediode » sam. 2 nov. 2019 12:23

Bonjour à tous,

Bien lgtps que je me suis connecté sur le forum; Depuis mai j'ai été atteint d'un cancer qui m'a cloué à l’hôpital plusieurs mois et je suis à présent de retour depuis la mi-août. Entre tps, j'ai déménagé et depuis qq semaines je me suis remis à mes activités favorites.
Rappelez vous de mes sujets avec l'afficheur graphique qui s'est fini avec un LCD 4 lignes 40 caractères et ma télécommande RC5. Tout ça a été mis en standby et je vais pouvoir m'y remettre bientôt.

Actuellement, je réalise un petit montage pour un ami avec un afficheur et un 16f877. Le montage est archi simple, il y a 6 entrées audio qui sont sélectionné par une roue codeuse pour s'afficher sur un LCD (GDM1601C) 1 ligne 16 caractères.

Est-ce mes séances de chimio qui affecte mes connaissances ou la fatigue tjrs omniprésente mais je suis complètement perdu sur la mise en oeuvre du montage.

Impossible d'afficher quoi que ce soit sur ce maudit afficheur. Si je change l'afficheur par un 2 lignes 16 caractères type GDM1602A, j'ai parfois l'affichage mais le fonctionnement est très bizarre; le premier caractère s'affiche puis qq secondes après apparaît le second et ainsi de suite jusqu'à remplir la ligne complète. Au total, il faut bien 10 bonnes secondes pour remplir la ligne! J'ai vérifié la configuration de l'afficheur et je ne vois pas ce qui peut affecter le fonctionnement :roll:
J'utilise le portB du 16f877 pour générer les codes de l'afficheur est-ce la config du PIC?
J'ai pourtant réalisé de nbreux programmes avec un afficheur mais jamais j'ai utilisé le portB pour envoyer les codes à l'afficheur. Sur ce montage j'ai utilisé le port B pour une raison de commodité du routage du pcb.

Voici mon programme

En vous remerciant tous pour votre aide

Code : Tout sélectionner

;----------------------------------------------------Brochage du PIC sur la carte--------------------------------------------------------- 
;  Port | Broche | E/| Description

;  RA0  |    02  |  S  | Cde R/S
;  RA1  |    03  |  S  | Cde Enable
;  RA2  |    04  |  E  | Bit A ampli 1 et 2
;  RA3  |    05  |  E  | Bit B ampli 1 et 2
;  RA4  |    06  |  E  | Bit C ampli 1 et 2 
;  RA5  |    07  |  E  | 

;  RB0  |    33  |  S  | Sortie bit D7 du LCD                     
;  RB1  |    34  |  S  | Sortie bit D6 du LCD                    
;  RB2  |    35  |  S  | Sortie bit D5 du LCD                                          
;  RB3  |    36  |  S  | Sortie bit D4 du LCD                    
;  RB4  |    37  |  S  | Sortie bit D3 du LCD                        
;  RB5  |    38  |  S  | Sortie bit D2 du LCD                    
;  RB6  |    39  |  S  | Sortie bit D1 du LCD                    
;  RB7  |    40  |  S  | Sortie bit D0 du LCD                    

;  RC0  |    15  |  S  | NC                        
;  RC1  |    16  |  S  | NC
;  RC2  |    17  |  S  | PHONO
;  RC3  |    18  |  S  | AUX
;  RC4  |    23  |  S  | DVD
;  RC5  |    24  |  S  | CD2                                
;  RC6  |    25  |  S  | CD1                                
;  RC7  |    26  |  S  | TUNNER                                

;  RD0  |    19  |  E  | Reception Bit A 16F84
;  RD1  |    20  |  E  | Reception Bit B 16F84
;  RD2  |    21  |  E  | Reception Bit C 16F84
;  RD3  |    22  |  S  | Autorisation Ampli3 
;  RD4  |    27  |  E  | Detection Ampli1
;  RD5  |    28  |  E  | Detection Ampli2
;  RD6  |    29  |  S  | Autorisation Ampli1 et activation RL1
;  RD7  |    30  |  S  | Autorisation Ampli2 et activation RL2


;--------------------------------------------------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'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'
11111100'    ; 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'
00000000'    ; 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'
00000000'    ; 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'
00110111'    ; 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-------------------------------------------------------


DEBUT

    MOVLW    B'
00001000'    ; On charge la valeur dans W
    MOVWF    PORTD        ; On déplace la valeur sur le PORTD


    
;--------------------------------------------------------- Programme affichage selection -------------------------------------------------------

TUNER
    MOVLW    b'
00010000
    MOVWF    PORTC
    CALL    TEMPO1    
    CALL    CONFIG        ; Va à CONFIG
    MOVLW    0X00        ; Déplace le curseur à la 1ère colonne de la 1ere ligne     
    MOVWF    PORTB        ; Charge le contenu de W dans le port B
    BSF    PORTA,1        ; Enable = 1
    CALL    ATTENTE6        ; Appel de la temporisation ATTENTE6
    BCF    PORTA,1        ; Enable = 0
    MOVLW    '
S'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
O'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
U'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
R'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
C'        ; Affiche caractère
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
E'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    0X20        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
T'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
U'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
N'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
E'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
    MOVLW    '
R'        ; Affiche caractère 
    CALL    CAR_AFF        ; Va à CAR_AFF
;    CALL    ATTENTE6        ; On appelle TEMPO1                
BOOT    
    GOTO    BOOT        ; 


;-------------------------------------------------------CONFIGURATION AFFICHEUR -----------------------------------------------------------

CONFIG

    MOVLW    B'
00110000'    ; Fonction SET 8 bits 1 ligne police 5X7    
    MOVWF    PORTB        ; Charge le contenu de W dans le port B
    BSF    PORTA,1            ; E = 1
    CALL    ATTENTE6            ; Appel de la temporisation ATTENTE6
    BCF    PORTA,1            ; E = 0

    MOVLW    B'
00001000'    ; Affichage off                    
    MOVWF    PORTB        ; Charge le contenu de W dans le port B
    BSF    PORTA,1            ; E = 1
    CALL    ATTENTE6            ; Appel de la temporisation ATTENTE6
    BCF    PORTA,1            ; E = 0

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


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


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

;------------------------------------------------------Ecriture dans l'
afficheur -------------------------------------

CAR_AFF

    MOVWF    PORTB        
; Charge le contenu de W dans le port B
    CALL    ATTENTE3            
; Appel de la temporisation ATTENTE5
    MOVLW    B
'00000011'    ; RS = 1, RW = 0, E1 = 1, E2 = 0
    MOVWF    PORTA        
; 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    PORTA        
; 
    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

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


Config afficheur 1 ligne 16 caractères
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#2 Message par nondediode » sam. 2 nov. 2019 14:07

A force de chercher j'ai fini par trouver le pb du chargement de ligne caractère par caractère avec un tps très long.
Dans l'étiquette "Car_aff"

J'appelle la tempo "ATTENTE3" au lieu de "ATTENTE5 :cry:
Effectivement, à chaque chargement de caractère il pouvait mettre un tps fou :langue:

Mais je n'ai tjrs pas résolu le pb avec l'afficheur 1 ligne :mur:

Config afficheur 1 ligne 16 caractères
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#3 Message par Temps-x » sam. 2 nov. 2019 17:50

Bonjour nondediode, et tout le forum,

J'espère que tu vas mieux, et je suis bien content de te revoir sur le forum,

As tu le datasheet du GDM1601C , parce que sur la toile j'ai pas trouvé grand chose, juste une page.

Veux tu le faire fonctionner en 8 bits ou 4 bits ?

J'ai écrit une routine pour LCD 2 x 16, avec quartz 4Mhz, elle doit fonctionner pour ton écran, veux tu l'essayer ?

:bravo: Pour le code, très propre, et très lisible. :wink:

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Config afficheur 1 ligne 16 caractères
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#4 Message par paulfjujo » sam. 2 nov. 2019 18:20

bonsoir,

Certains afficheur LCD 1x16 , sont en fait des 2 x8 chars !

PB rencontré sur un frequencemetre
Cette version,particuliere à un faux LCD 1 ligne de 16 car, car en fait est composé de 2x8 cars sur la meme ligne
mais declaré comme un 2 lignes au niveaux adressage.
; remise en ordre pointeur debut 80H et C0H au lieu de 00H et 40H
voir details ici
Aide toi, le ciel ou FantasPic t'aidera

Config afficheur 1 ligne 16 caractères
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#5 Message par nondediode » sam. 2 nov. 2019 19:47

Bonjour à vous 2 et merci


Depuis, j'ai aussi cherché de mon côté et effectivement j'ai lu à plusieurs reprises que ce type d'afficheur dont je ne trouve aucuns datasheet sur la toile est effectivement un 2 X 8 caractères et j'ai essayé d'écrire ma ligne en 2 temps en mettant le pointeur à 00 pour "source" et en le déplaçant à 09 pour "TUNER" et ça fonctionne pas mais je n'ai rien essayé d'autre.
Dans la config de l'afficheur pour la fonction set j'ai rentré ceci:
00110100
Mode 8 bits
NL=0 pour 1 ligne
F=1 pour des caractères 5 X 10 mais j'ai aussi essayé avec F=0

Quand je configure en mode 2 lignes ça ne fonctionne pas non plus

Je mets un doute sur l'afficheur car en passant avec un afficheur 2 lignes et qq petites réparations j'obtient ce que je veux.

Cet afficheur 1 ligne, je l'ai récupéré sur un kit Wellman mais je ne sait plus ce que j'ai fait du montage sinon j'aurais bien aimé refaire un test sur son montage d'origine pour voir si il est encore vivant.

J'ai donc un peut abandonné l'idée de cet afficheur 1 ligne mais ma curiosité fait que même si je passe au 2 lignes j'aimerais quand même savoir comment configurer ce type d'afficheur :roll:

Au pire je peut en commander 1 pour tester ça vaut une misère.

A très bientôt

JP

Config afficheur 1 ligne 16 caractères
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#6 Message par satinas » sam. 2 nov. 2019 20:35

Bonsoir à tous,

Content de recevoir de bonnes nouvelles, nondediode, j'espère que ce ne sera qu'un mauvais souvenir.

Pas la peine de définir l'adresse des registres PORTA à TRISE, c'est déjà fait par le fichier include <p16f877.inc>
Par contre les variables définies en 0x00C, 0x00D, ... sont incorrectes car ces adresses sont déjà occupées par des registres du pic, voir datasheet chapitre memory organization.
Dans le cas du 16F877, la ram disponible pour les variables démarre en 0x020

Config afficheur 1 ligne 16 caractères
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » sam. 2 nov. 2019 21:27

:+1: satinas, effectivement il y a bien une erreur, pour ta déclaration de tes variables utilise plutôt CBLOCK début de la zone (H'20' à H'6F') en bank0 soit près de 80 octets de disponible

Code : Tout sélectionner


    CBLOCK H
'20' 
      CPT2      
:1                        ; Le registre temporaire CPT2 se trouve à l'adresse  H'20'
      CPT3      :1                        ; Le registre temporaire CPT3 se trouve à l'
adresse H'21'

      RETARD1   :1                        ; Le registre temporaire retard1 se trouve à l'adresse H'22'
      RETARD2   :1                        ; Le registre temporaire retard2 se trouve à l'
adresse H'23'
      RETARD3   :1                        ; Le registre temporaire retard3 se trouve à l'adresse H'24'
      RETARD4   :1                        ; Le registre temporaire retard4 se trouve à l'
adresse H'25'
      RETARD5   :1                        ; Le registre temporaire retard4 se trouve à l'adresse H'26'
                
      VAL1      :1                        ; Le registre temporaire VAL1 se trouve à l'
adresse H'27'
      VAL2      :1                        ; Le registre temporaire VAL2 se trouve à l'adresse H'28'
      VAL3      :1                        ; Le registre temporaire VAL1 se trouve à l'
adresse H'29'
      VAL4      :1                        ; Le registre temporaire VAL2 se trouve à l'adresse H'2A'
    ENDC 



satinas a écrit :Source du message Pas la peine de définir l'adresse des registres PORTA à TRISE, c'est déjà fait par le fichier include <p16f877.inc>


Encore exacte...., il est fort ce satinas .

Avec un éditeur de texte regarde le fichier P16F877.inc que tu as inclus dans ton code au début, tu vas voir que toutes tes déclarations
des registres sont déjà fait, et heureusement pour nous.

Fichier P16F877.inc ci-joint
P16F877.zip


==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Config afficheur 1 ligne 16 caractères
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#8 Message par nondediode » dim. 3 nov. 2019 08:24

Bonjour tout le monde,

Merci pour cette remarque.
Depuis mon premier programme avec un PIC 16F877 je ne fait que recopier les directives d'assemblage de programme en programme sans me soucier des erreurs possible puisque ça tjrs marché comme ça :roll:
A présent je veillerait à bien déclarer mes variables :wink:
Vos conseils me sont tjrs très précieux; encore merci

Vu le mauvais tps annoncé pour aujourd'hui je vais pouvoir continuer sur mon prg avec l'afficheur 1 ligne en me servant des ordres de pointage que paulfjujo m'a adressé.

Je vous tiendrai au courant des évolutions

Bon dimanche à tous

Config afficheur 1 ligne 16 caractères
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#9 Message par nondediode » mar. 5 nov. 2019 12:02

Bonjour à tous,

Après avoir bataillé avec le port A qu'il fallait impérativement configurer en I/O avec le registre ADCON1, je suis arrivé à faire fonctionner mon programme.
Depuis mai où je n'avais plus retouché 1 seul programme en asm, je m'aperçoit qu'on oublie vite les petites choses essentiels et c'est vite la galère quand on veut écrire un bout de programme :evil:
Heureusement il y a eu Fantaspic pour m'aider
Merci à vous tous et j'aurai certainement l'occasion de revenir sur le forum.

JP

Config afficheur 1 ligne 16 caractères
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#10 Message par F6FCO » jeu. 19 déc. 2019 06:40

Bonjour,
Saleté de crabe qui nous guette tous. Bons vœux de rétablissement Nomdediode.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:


Retourner vers « Langage ASM »

Qui est en ligne

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