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

appel aux specialistes ASM decalage 96 bits
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#31 Message par paulfjujo » ven. 7 juin 2019 12:17

Temps-x a écrit :Beaucoup de faut MAX7219 circule, ce qui fait qu'il fonctionne pas correctement voir ICI
==> A+


Dans la mesure ou mon affichage fixe sur les 12 modules 8x8 est correct, sans probleme
je pense que mes MAX7219 doivent etres OK..
je pense olutot à de mauvaises connections neuronales dans ma caboche ..

sur cette version de MAX connections TRAVERSANTE HORIZONTALES
il m'est tres difficile de visulaliser l'algorithm pour ce decalage
alors qu'il est intuitif pour la version MAX7219 connections HAUT en BAS. (version defilement avec 8 afficheurs OK )

quand à decortiquer une librairie arduino en CPP .. compliqué aussi .
Aide toi, le ciel ou FantasPic t'aidera

appel aux specialistes ASM decalage 96 bits
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#32 Message par satinas » ven. 7 juin 2019 12:46

Bonjour à tous,
car on ne peut pas FORCER le bit C du registre STATUS par programme

Avec C18 :
STATUSbits.C = 1;
STATUS = STATUS | 0x01;
STATUS |= 1;

Pour MikroC, cela doit être un truc du genre :
STATUS.C = 1;
STATUS = STATUS | 0x01;
STATUS |= 1;

Voir ici : https://download.mikroe.com/documents/c ... l_bits.htm

appel aux specialistes ASM decalage 96 bits
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#33 Message par JJE » ven. 7 juin 2019 15:41

Je ne comprends pas cette affirmation
paulfjujo a écrit :Source du message car on ne peut pas FORCER le bit C du registre STATUS par programme !

car j'ai déjà souvent utilisé des bsf ou bcf STATUS, C, en particulier dans ces situations de rotation ou décalage d'un registre
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

appel aux specialistes ASM decalage 96 bits
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#34 Message par paulfjujo » ven. 7 juin 2019 17:16

Mille excuses JJE et Satinas, je me suis melangé les pinceaux, apres TROP de test differents
et aussi apres relecture de la datashheet qui pousse à un quiproquo : Status affected none

status_affected_none.jpg





car c'est bien le test du bit C status que j'ai utilisé (au post#26) ..puis par la suite
le test en mode debugger le demontre

le bit de poids zero du STATUS, donc C, suit bien l'etat de CarryX

Test_Forcage_bit_C_du_STATUS..jpg


par contre , je ne sais pas , vu que je ne fais aucune sauvegarde de registres MCU , Wreg et STATUS,
avant de faire ces decalages,
si je ne perturbe pas l'environnement avec le reste du programme qui tourne ... en C
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

appel aux specialistes ASM decalage 96 bits
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#35 Message par JJE » ven. 7 juin 2019 17:58

dans ma maigre culture sur le C, en tous cas sur ce C là, dans les premières passes de son travail, un compilateur génère du code assembleur puis ensuite lance l'assembleur. Donc quand il rencontre la directive asm, il se repose et n'a plus qu'à recopier le code asm qu'il rencontre jusqu'à la fin de bloc asm (son accolade fermante). donc tu ne dois rien perturber du tout.
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

appel aux specialistes ASM decalage 96 bits
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#36 Message par paulfjujo » mar. 5 nov. 2019 20:50

bonsoir,

Je suis revenu sur les MAX7129 + matrice8x8 , derniere version de blocs reçus : affichage inversé haut et bas et sens de defilement inversé aussi !
j'en avais commandé 2 en esperant les accoler à un que j'avais acheté precedement .. et donc pas bon pour faire un montage à 3x4 matrices
Je me cantonne à 2x4 matrices avec des mots de 64 bits = 2 entiers long par ligne
=> 16 entiers long pour 8 caracteres 8x8
j'utilise le decalage en ASM , cité dans les post precedents et un terminal pour afficher en binaire et suivre la progression d'un bit lors des decalages .

Je m'aprecois d'une faille
Test de 128 decalage sur 1 ligne
Ca se passe assez bien, mais pour le rebouclage SORTIE ,vers ENTREE
je me retrouve avec une ligne à ZERO entre la transition fin de ligne et nouvelle ligne au (0063->) 64em decalage
le dernier bit SORT du registre (64bits) et tombe bien dans le Carry que je reporte vers l'ENTREE
mais entre les 2 , tout est à zero , il y a rupture de continuité
Le carry du 64em decalage Rentre bien au ( 0064-->)65em

pour etre CIRCULAIRE, le dernier bit sortie doit se trouver immediatement en position 0 au prochain decalage


:mur: quelque chose m'echappe !



3em test


Test 128 Decalages 32 bit en ASM sur 2 registres 32 bits chainés L10 L11

L10=1 , L11=0 et Carry en ENTREE = 0
00000 -> ................................|..............................*. la valeur 1 de L10 au depart, décalé à gauche donne bien 2
00001 -> ................................|.............................*..
00002 -> ................................|............................*...
00003 -> ................................|...........................*....
00004 -> ................................|..........................*.....
00005 -> ................................|.........................*......
00006 -> ................................|........................*.......
00007 -> ................................|.......................*........
00008 -> ................................|......................*.........
00009 -> ................................|.....................*..........
00010 -> ................................|....................*...........
00011 -> ................................|...................*............
00012 -> ................................|..................*.............
00013 -> ................................|.................*..............
00014 -> ................................|................*...............
00015 -> ................................|...............*................
00016 -> ................................|..............*.................
00017 -> ................................|.............*..................
00018 -> ................................|............*...................
00019 -> ................................|...........*....................
00020 -> ................................|..........*.....................
00021 -> ................................|.........*......................
00022 -> ................................|........*.......................
00023 -> ................................|.......*........................
00024 -> ................................|......*.........................
00025 -> ................................|.....*..........................
00026 -> ................................|....*...........................
00027 -> ................................|...*............................
00028 -> ................................|..*.............................
00029 -> ................................|.*..............................
00030 -> ................................|*...............................
00031 -> ...............................*|................................
00032 -> ..............................*.|................................
00033 -> .............................*..|................................
00034 -> ............................*...|................................
00035 -> ...........................*....|................................
00036 -> ..........................*.....|................................
00037 -> .........................*......|................................
00038 -> ........................*.......|................................
00039 -> .......................*........|................................
00040 -> ......................*.........|................................
00041 -> .....................*..........|................................
00042 -> ....................*...........|................................
00043 -> ...................*............|................................
00044 -> ..................*.............|................................
00045 -> .................*..............|................................
00046 -> ................*...............|................................
00047 -> ...............*................|................................
00048 -> ..............*.................|................................
00049 -> .............*..................|................................
00050 -> ............*...................|................................
00051 -> ...........*....................|................................
00052 -> ..........*.....................|................................
00053 -> .........*......................|................................
00054 -> ........*.......................|................................
00055 -> .......*........................|................................
00056 -> ......*.........................|................................
00057 -> .....*..........................|................................
00058 -> ....*...........................|................................
00059 -> ...*............................|................................
00060 -> ..*.............................|................................
00061 -> .*..............................|................................
00062 -> *...............................|................................
00063 -> ................................|................................
00064 -> ................................|...............................*
00065 -> ................................|..............................*.
00066 -> ................................|.............................*..
00067 -> ................................|............................*...
00068 -> ................................|...........................*....
00069 -> ................................|..........................*.....
00070 -> ................................|.........................*......
00071 -> ................................|........................*.......
00072 -> ................................|.......................*........
00073 -> ................................|......................*.........
00074 -> ................................|.....................*..........
00075 -> ................................|....................*...........
00076 -> ................................|...................*............
00077 -> ................................|..................*.............
00078 -> ................................|.................*..............
00079 -> ................................|................*...............
00080 -> ................................|...............*................
00081 -> ................................|..............*.................
00082 -> ................................|.............*..................
00083 -> ................................|............*...................
00084 -> ................................|...........*....................
00085 -> ................................|..........*.....................
00086 -> ................................|.........*......................
00087 -> ................................|........*.......................
00088 -> ................................|.......*........................
00089 -> ................................|......*.........................
00090 -> ................................|.....*..........................
00091 -> ................................|....*...........................
00092 -> ................................|...*............................
00093 -> ................................|..*.............................
00094 -> ................................|.*..............................
00095 -> ................................|*...............................
00096 -> ...............................*|................................
00097 -> ..............................*.|................................
00098 -> .............................*..|................................
00099 -> ............................*...|................................
00100 -> ...........................*....|................................
00101 -> ..........................*.....|................................
00102 -> .........................*......|................................
00103 -> ........................*.......|................................
00104 -> .......................*........|................................
00105 -> ......................*.........|................................
00106 -> .....................*..........|................................
00107 -> ....................*...........|................................
00108 -> ...................*............|................................
00109 -> ..................*.............|................................
00110 -> .................*..............|................................
00111 -> ................*...............|................................
00112 -> ...............*................|................................
00113 -> ..............*.................|................................
00114 -> .............*..................|................................
00115 -> ............*...................|................................
00116 -> ...........*....................|................................
00117 -> ..........*.....................|................................
00118 -> .........*......................|................................
00119 -> ........*.......................|................................
00120 -> .......*........................|................................
00121 -> ......*.........................|................................
00122 -> .....*..........................|................................
00123 -> ....*...........................|................................
00124 -> ...*............................|................................
00125 -> ..*.............................|................................
00126 -> .*..............................|................................
00127 -> *...............................|................................



Aide toi, le ciel ou FantasPic t'aidera

appel aux specialistes ASM decalage 96 bits
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#37 Message par Temps-x » mer. 6 nov. 2019 01:03

Bonjour paulfjujo, et tout le forum,

J'ai pas tous compris, mais....Tes données sont sur 64 bits si j'ai bien compris, hors carry représente le 65 bits

65 - 64 = 1 qui représente ta ligne zéro, c'est au départ qu'il faut initialisé le Carry, pas simple à faire.....

Ton compteur de décrémentation doit pas être réglé comme il faut.

Cela nous fait 8 variables de 8 bits, à voir si tu sors de ta boucle entre temps par interruption ou autre.

:roll: J'attends pour en savoir un peu plus, et peut être te proposé une solution :wink:

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

appel aux specialistes ASM decalage 96 bits
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#38 Message par paulfjujo » mer. 6 nov. 2019 09:39

bonjour TempsX et à tous,



je vois que tu as saisis mon probleme ...
ce matin j'ai modifié le debut et la fin du decalage de bits,
au lieu d'utiliser le carry de sortie vers l'entree du registre
je reporte seulement le carry de sortie dans le 1er bit du registre !
de sorte à nepas creer ce 65em bit !

-->0062 donc le 63 em bit qui, poussé ensuite ,tombe dans le carry => 64em bit
etat du carry copié dans le bit -> 000 = 1er bit du registre 64 bits (L11-L10)
apres les 128 decalages, je retrouve L10=0x0001 = valeur du point de depart
ça me semble correct

idea ! ton avis ?

Problemo_retour_circulaire_correctif_191106_debut.jpg

Transition au milieu du decalage ..
Problemo_retour_circulaire_correctif_191106_milieu.jpg

Problemo_retour_circulaire_correctif_191106_fin.jpg


:sifflotte: avec le code c'est peut etre plus explicite ..

Code : Tout sélectionner




 CRLF1
();
  UART1_Write_CText(" Test 128 Decalages (2 tours de 64 bits)  en ASM  sur 2 entiers long L10,L11 \r\n");
  Depart=START_Absolute_Adresse;
   L10=1;
   CarryX=0;
  for(i=0;i<8;i++) Carry[i]=0;
  UART1_Write_CText("\r\n L10=1  , L11=0 et  Carry en ENTREE = ");
  UART1_Write(Carry[0]+48);
  CRLF1();
  for (i=0;i<128;i++)
  {
     UART1_Write(' ');WordToStrWithZeros(i,CRam1);
     UART1_Write_Text(CRam1);UART1_Write_CText(" -> ");
     txt=&TEXTE[0];
     CarryX=Carry[0];    // table contenant les reports des 8 mots de 64 bits
    _asm {
    //  bsf STATUS, 0         // set bit C  =>   C=1  bit CARRY du registre STATUS
    //  btfss _CarryX,0,1       // si le bit de position  0 de la variable  _Carry==1  on saute la RAZ de C   , donc C reste à 1
   //   bcf STATUS,0,0         // RAZ bit  C   =>  C=0
   //   nop
   //   nop
      rlcf    _L10+0,1,0       // rotate left through carry de _L10[0] (rlcf _L10,F,ACCESS)
      rlcf    _L10+1,1,0
      rlcf    _L10
+2,1,0
      rlcf    _L10
+3,1,0

      rlcf   _L11
+0,1,0        // 2em partie mot de 64 bits
      rlcf   _L11+1,1,0
      rlcf   _L11
+2,1,0
      rlcf   _L11
+3,1,0

    
//  bcf _CarryX,0
    //  btfsc STATUS,0,1
    //  bsf _CarryX,0
    //  nop
    
   
// modif 06-11-2019 
     bcf _L10,0
     btfsc STATUS
,0,1   //    si Carry=1 => reporté dans le bit 0 du mot de depart
     bsf _L10,0
     nop
     nop
       
}
      Carry[0] = CarryX ;   // memorise report si C=1
     Binarise_32bits(L11,txt);   UART1_Write('|'); Binarise_32bits(L10,txt);
     CRLF1();
   }
   CRLF1();
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

appel aux specialistes ASM decalage 96 bits
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#39 Message par Claudius » mer. 6 nov. 2019 11:25

Bonjour,
Temps-x » mer. 6 nov. 2019 01:03
...
Cela nous fait 8 variables de 8 bits, à voir si tu sors de ta boucle entre temps par interruption ou autre.

Si sortie par interruption (si il y a et si bien programmée notamment par rapport aux éventuelles variables globales qui seraient modifiées dans la routine d'interruption ;-), on ré-entrera de toute façon dans la boucle avec le bon contexte (hors bug du compilateur naturellement)

Maintenant, une piste @... sortie de la boucle si autre, en lisant for (i=0;i<128;i++) ... remplacer i par une variable de nom moins courant et unique dans le programme pour être sûr qu'elle n'est pas utilisée ailleurs

appel aux specialistes ASM decalage 96 bits
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#40 Message par paulfjujo » mer. 6 nov. 2019 12:22

Bonjour Claudius,

j'ai mis GIE_bit=0; pas d'interruptions possible..
mais toujour un resultat NON VALABLE ...
nota: Affichage correct sur les 8 max "01234567" avant decalage !

mais pour verifier et mieux comprendre ce qui se passe, je trace tout sur le terminal
et pister le decalage de Table contenant le texte à afficher
avec ce bout de code

Code : Tout sélectionner


  pB
=START_Absolute_Adresse;  // adresse stockage des 8 long 32 bits = 0x0016
       for (j=0;j<8;j++)
        {
        UART1_Write(TAB); UART1_Write_Text( Bin2Asc( *(pB+j)));  UART1_Write_Text( Bin2Asc( *(pB+j+8)));   ;
        UART1_Write_Text( Bin2Asc( *(pB+j+16)));  UART1_Write_Text( Bin2Asc( *(pB+j+24))); 
         UART1_Write_Text
( Bin2Asc( *(pB+j+32)));  UART1_Write_Text( Bin2Asc( *(pB+j+40))); 
         UART1_Write_Text
( Bin2Asc( *(pB+j+48)));  UART1_Write_Text( Bin2Asc( *(pB+j+56)));   CRLF1();
         }


Problemo_Affichage_8_registres_long_191106.jpg


malgre le test correct du decalage 1ere ligne OK sur 64 ou 128 bits ( 2 loops)
je vois que le carry se repercute dans le bit 0 de chaque mot
melange entre les debuts de chaque lettre ...

Bizarre qu'on ne retouve pas les instructions type motorola 6800 sur ces MCU
ASL (arithmetique Left Shit) .. decalage à gauche ou LSR a droite en poussant le bit extreme dans le carry
MAIS SANS REBOUCLAGE du Carry SUR L'ENTREE
c'est bien gentil ,les MCU avec jeu d'instruction reduits ..mais le Z80 me manque un peu ..

18F27K42 .. pas le choix , ou on pert le bit de sortie RLNCF (sans Carry) ou on remet le carry sur l'entree RLCF
RRCF_instruction.jpg


bon, ça devient :mur: un casse tete pour moi,
je vais revenir sur les decalages en 100% C
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage ASM »

Qui est en ligne

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