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

Passionné- Messages : 307
- Enregistré en : avril 2022
Ecran LCD ILI9341 pour les nuls en assembleur
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 ?
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é- Messages : 307
- Enregistré en : avril 2022
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
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
Ecran LCD ILI9341 pour les nuls en assembleur
-
francois77

Passionné- Messages : 307
- Enregistré en : avril 2022
Ecran LCD ILI9341 pour les nuls en assembleur
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.
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
Bonsoir francois77, satinas, et tout le forum,
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)
pour le retour
A+
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)
pour le retourEcran LCD ILI9341 pour les nuls en assembleur
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.
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é- Messages : 307
- Enregistré en : avril 2022
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
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
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.
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

