On Jul 15, 11:29 pm, vede
Oui : une bonne idee serait de laisser tomber le Basic pour le C ou l'ASM ...
Bon, voila ton code sans les bugs, avec des variables *non signees* :
Mmc_Fat_Read(mymsb) ' read MSB Mmc_Fat_Read(mylsb) ' read LSB data =3D mymsb ' conversion 8 bits vers 16 bits data =3D (data * $100) + mylsb ' concatenation if data >=3D $8000 then data =3D $FFFF - data ' conversion end if mymsb =3D data DIV $100 ' deconcatenation mylsb =3D data MOD $100 ' deconcatenation PORTD =3D mymsb ' ecriture CNA PORTB =3D mylsb ' ecriture CNA
Essaye ca (declare les variables en non-signe)
void WriteCna(void) { unsigned char msb, lsb; // 8 bits unsigned int n; // sample 16 bits
// lecture d'un sample WAV 16 bits mono Mmc_Fat_Read(msb); // MSB Mmc_Fat_Read(lsb); // LSB
// concatenation n =3D ( ((unsigned int)(msb)) 0x7FFF ) n =3D 0xFFFF - n;
// deconcatenation avec cast implicite msb =3D n >> 8; // MSB lsb =3D n & 0xFF; // LSB
// ecriture sur le CNA PORTD =3D msb; // ecrit le MSB vers le CNA PORTB =3D lsb; // ecrit le LSB vers le CNA }
Il y a + speed, mais ca c'est du code pedagogique !