Ce n'est pas (encore) l'appel du 18 juin !
mais j'en appelle aux specialistes de l'ASM , pour un simple décalage de bit sur un mot de 96 bits..
pour realiser le defilement de texte , pixel by pixel sur un ensemble de 3 Matrices de 4 modules MAX7219 leds 8x8
ce qui represente un texte de 3x4x8 =96 bits de large ( matrice car 8x8) et donc 96 bytes .
ces 96 bytes organisés par 3 long de 32 bits consécutifs..
pour etre sur qu'ils le soient placés par le compilateur , et à une adresse connue , donc accessible en ASM par le compilateur en C.
usage de absolute adresse
Code : Tout sélectionner
static signed long L10 absolute 0x40;
static signed long L11 absolute 0x44;
static signed long L12 absolute 0x48;
static char Bn[12] absolute 0x040;
char * P_Byte;
le langage C permet le decalage de bit , mais ne se souscie pas du report Carry bit ..
sous la forme langage C , voilà comment j'opere pour decaler 96 bits à gauche ..
mais c'est quand meme TRES LOURD.
Code : Tout sélectionner
// --- test zone ----
// init de l' ensemble pour megamot de 96 bits
L10=0x40555453; //LSB
L11=0xFFAAFF20; //MSB
L12=0x0102FF80; //HSB
for (i=0;i<12;i++)
{
Decompile_byte(Bn[i],0) ;CRLF1();
}
CRLF1(); CRLF1();
Delay_ms(3000);
P_Byte=0x000040;
for (i=0;i<12;i++)
{
ByteToHex(*(P_Byte+i),CRam1);
UART1_Write_Text(CRam1);
CRLF1();
}
Delay_ms(3000);
CRLF1(); CRLF1();
// decalage de 1 bit de l'ensemble
// visu AVANT
Binarise_32bits(L12,CRam1); UART1_Write_Text(CRam1);UART1_Write('-');
Binarise_32bits(L11,CRam1); UART1_Write_Text(CRam1);UART1_Write('-');
Binarise_32bits(L10,CRam1); UART1_Write_Text(CRam1);;CRLF1();
CRLF1();
//hypothese de depart carry=0
c1=0;
L10=L10<<1;
L10=L10 +c1;
if ((L10 & 0x8000) == 0x8000) c1=1; else c1=0;
L11=L11<<1;
L11=L11 +c1;
if ((L11 & 0x8000) == 0x8000) c1=1; else c1=0;
L12=L12<<1;
L12=L12 +c1;
// visu APRES
Binarise_32bits(L12,CRam1); UART1_Write_Text(CRam1);UART1_Write('-');
Binarise_32bits(L11,CRam1); UART1_Write_Text(CRam1);UART1_Write('-');
Binarise_32bits(L10,CRam1); UART1_Write_Text(CRam1);;CRLF1();
CRLF1();
je pense qu'une solution 100%ASM serait beaucoup plus concise et rapide ..
mais c'est maintenant trop loin pour moi..
Si un de vous peut se pencher sur mon probleme ?
je joins ici le projet MikroC complet, affichage fixe OK sur 12 matrices , mais defilement stopé sur ce probleme de decalage bit.
affichage terminal: