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

Ecran LCD ILI9341 pour les nuls en assembleur
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#11 Message par francois77 » mar. 14 févr. 2023 18:03

Bonjour

Pour Satinas

comment utiliser cette macro sans macro ?

d16 macro val ; send lcd data 16 bits
d8 (val)/0x100
d8 (val)%0x100
endm

A+
Francois

Ecran LCD ILI9341 pour les nuls en assembleur
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#12 Message par satinas » mar. 14 févr. 2023 19:30

Bonsoir François,
d16 et d8 sont des macros. J'ai forcé sur l'imbrication des macros, pour montrer que c'est très puissant.
En plus ces macros ne traitent que des données constantes, pour tester l'affichage, alors que dans un programme on est plutôt amené a stocker coordonnées et couleurs dans des variables.
Tu veux une macro d16 qui ne contienne pas d'appel à une autre macro, c'est ça ?

Ecran LCD ILI9341 pour les nuls en assembleur
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#13 Message par francois77 » mar. 14 févr. 2023 19:48

Bonjour Satinas,

Merci pour ton retour

j'ai réussi a me dépatouiller avec ta macro pour extraire mes données H L en passant par 3 macros

Ma question était plutôt comment utiliser ses "commandes" hors macro

(val)/0x100

(val)%0x100

Pour un débutant c'est pas simple de vous suivre dans votre monde "macro"

j'ai regardé l'exemple de ton programme que Temps-X a mis dernièrement.

Je retrouve la même principe que pour l'ILI9341.

j'ai joint en annexe le principe de déplacement de l'ILI avec ces commandes. j'ai un peu galéré pour le comprendre

l'utilisation de tes macros simplifies grandement le passage des commandes pour un rectangle.

H8 macro val ;
movlw val ;
endm ;

L8 macro val ;
movlw val ;
endm ;

Val_8H macro val ;
H8 (val)/0x100 ;
endm ;

Val_8L macro val ;
L8 (val)%0x100 ;
endm ;

+A

Francois
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Ecran LCD ILI9341 pour les nuls en assembleur
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#14 Message par satinas » mar. 14 févr. 2023 20:13

Toujours très bien documenté, bravo :)
C'est 0 à 319 et pas 0 à 320.
Pourquoi tu n'écris pas directement movlw (val)/0x100 dans la macro Val_8H ?
Le préprocesseur peut manipuler des données numériques 16 bits et même 32 bits, par contre les instructions ne traitent que des données 8 bits.

Ecran LCD ILI9341 pour les nuls en assembleur
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#15 Message par francois77 » mar. 14 févr. 2023 20:26

Pour 320, j'ai un petit bug dans mon programme

je découvre --> movlw (val)/0x100

A+

Ecran LCD ILI9341 pour les nuls en assembleur
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#16 Message par satinas » mar. 14 févr. 2023 21:26

Contrairement aux apparences, le préprocesseur ne fait aucun calcul dans les #define et macros, il se contente de remplacer du texte. Le calcul se fait dans la phase d'assemblage.
Donc si tu fais Val_8H 260 après expansion de la macro, l'assembleur récupère movlw (260)/0x100 et il sait faire.
Les parenthèses, c'est pour le cas Val_8H 260+5, l'assembleur récupère movlw (260+5)/0x100, correct.
Sans les parenthèses movlw 260+5/0x100, résultat faux.

Ecran LCD ILI9341 pour les nuls en assembleur
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2903
Enregistré en : juillet 2016
Localisation : Terre

#17 Message par Temps-x » mer. 15 févr. 2023 01:45

Bonsoir francois77, satinas, et tout le forum,

satinas a écrit :Source du message movlw (260+5)/0x100


Si je te suis, tu te places en mémoire le nombre (260+5) puis tu divises par 256

Dans la logique des choses, pour ce placer à l'emplacement mémoire d'une variable en fait comme ceci movlw loop2

Mais on ne pourras jamais dépasser 255 dans une variable, 0x100 font bien 256 décimal

(c'est nouveau pour moi cette façon de procéder, et c'est bien pour cela que je voulais des précisions)

Merci ! pour le retour

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

Ecran LCD ILI9341 pour les nuls en assembleur
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#18 Message par satinas » mer. 15 févr. 2023 06:07

Bonjour Temps-x et à tous,
Le préprocesseur ne manipule que du texte. J'ai écrit plus haut qu'il sait gérer des valeurs 16 et 32 bits, en fait il ne se pose pas de questions, tout passe.
C'est l'assembleur qui sera capable d'évaluer les expressions, il en fait autant que les langages plus évolués. Et si le résultat supérieur à 255 est placé dans une instruction 8 bits, il affiche un warning ou une erreur. Pour beaucoup d'erreurs de syntaxe c'est lui qui rouspète, car le préprocesseur n'a rien vu.
MPLAB affiche le listing avec macros étendues, tu peux visualiser comment cela se passe.

Ecran LCD ILI9341 pour les nuls en assembleur
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#19 Message par francois77 » mer. 15 févr. 2023 08:22

Bonjour à tous

Satinas : ou trouver de la doc sur ces explications ?

Temps-x : dans tes programmes tu initialise les variables de la bank0 en 0X20 pourquoi ?
Page 86/539 de la doc
Je dis peut être une bêtise mais les variables bank0 se situe de 0x000 a 0x100h ?
Quel est la raison ?

Avec l'astuce de Satinas tu aurais pu gérer tes écrans sans limite de taille ? 65535 * 65535 pixel

Désolé c'est basique comme question : sifflotte:

A+
Francois

Ecran LCD ILI9341 pour les nuls en assembleur
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#20 Message par satinas » mer. 15 févr. 2023 08:46

Bonjour François,
La doc de MPASM est assez succincte, c'est plus par habitude des langages. Ce n'est pas parce qu'il génère des instructions bas niveau qu'il doit être limité dans ses fonctionnalités.
https://www.google.fr/search?q=+MPASM+M ... nt=gws-wiz

Page 41 Intermediate values in constant expressions are treated as 32-bit unsigned
integers. Whenever an attempt is made to place a constant in a field for
which it is too large, a truncation warning will be issued.


A la page 43 il y a l'ordre de priorité des opérateurs. Cela explique pourquoi dans movlw 260+5/0x100 il fait la division avant l'addition.

Page 155 un exemple de macro qui découpe en 4 octets une valeur numérique 32 bits.


Retourner vers « Langage ASM »

Qui est en ligne

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