V
vinash
Guest
Salut,
J'ai essayé de l'interface et ADC0804 HY62256 (S-RAM) à microcontrôleur AT89C52.L'idée est de faire une conversion A / D à l'aide ADC 0804 et que le stockage des données entrées dans la SRAM.Le code que j'avais développés ci-dessous pour référence.Il ne semble pas fonctionner.Quelqu'un pourrait-il s'il vous plaît me dire si il ya quelque chose de mal avec mon code.Merci.
# Include <reg52.h>
retard (void);
xdata données * addr unsigned char = 0x0000, / / déclare un pointeur regarder de l'adresse mémoire externe de 0x0000
sbit WRITE = ^ P3 0; / / définition du WR et INTR épingles
INTR sbit P3 = ^ 2; / / La broche INTR est connecté à la cheville dans, de sorte que chaque fois qu'il passe au niveau bas, il cause une interruption
sbit LED = ^ P3 1;
advalue unsigned int, la valeur, j;ex0_isr (void) interrompre 0 / / interruption qui est activé chaque fois que P3 ^ 2 passe au niveau bas
(P1 = 0xFF; / / P1 déclarant que les données d'entrée après la conversion A / D
advalue = P1; / / l'attribution des bits d'entrée (A / D bits) à advalue
if (adr! = 0xFFFF) / / continuer à stocker les bits 8 valeurs obtenues de l'ADC dans l'adresse à partir de 0x0000 jusqu'à
/ / Le S-RAM est pleine.
(LED = 1; / / pour vérifier s'il existe une conversion
for (j = 0; j <2000; j );
* Addr = value;
LED = 0; / / pour vérifier s'il existe une conversion
retard (); / fonction de retard /
)
d'autre
(
EX0 = 0; / / Si le S-RAM est pleine, désactiver externe 0 interrompre et l'interruption indicateur global
EA = 0;
)
)void main (void) (
EX0 = 1; / / Activer EX0 d'interruption, cette fonction est de permettre à (la série) ou désactiver (clair) 0 extérieures intrrupt
EA = 1; / / Activer Global indicateur d'interruption
IT0 = 0; / / 0 bit.Set interruption de contrôle de type / compensé par un logiciel de préciser front descendant / niveau bas déclenché interruption externe
P1 = 0xFF; / / Déclaration de P1 en tant que contribution
while (1) (
WRITE = 0; / / conversion AD;
WRITE = 1;
while (INTR == 1);
retard ();
)
)retard (void) / / Delay Timer fonction en utilisant 0 pour 50 ms.
(
TMOD & = 0xF0;
TMOD | = 0x01;
ET0 = 0;
TH0 = 0x3C;
TL0 = 0xB0;
TF0 = 0;
TR0 = 1;
while (TF0 == 0);
TR0 = 0;
)
J'ai essayé de l'interface et ADC0804 HY62256 (S-RAM) à microcontrôleur AT89C52.L'idée est de faire une conversion A / D à l'aide ADC 0804 et que le stockage des données entrées dans la SRAM.Le code que j'avais développés ci-dessous pour référence.Il ne semble pas fonctionner.Quelqu'un pourrait-il s'il vous plaît me dire si il ya quelque chose de mal avec mon code.Merci.
# Include <reg52.h>
retard (void);
xdata données * addr unsigned char = 0x0000, / / déclare un pointeur regarder de l'adresse mémoire externe de 0x0000
sbit WRITE = ^ P3 0; / / définition du WR et INTR épingles
INTR sbit P3 = ^ 2; / / La broche INTR est connecté à la cheville dans, de sorte que chaque fois qu'il passe au niveau bas, il cause une interruption
sbit LED = ^ P3 1;
advalue unsigned int, la valeur, j;ex0_isr (void) interrompre 0 / / interruption qui est activé chaque fois que P3 ^ 2 passe au niveau bas
(P1 = 0xFF; / / P1 déclarant que les données d'entrée après la conversion A / D
advalue = P1; / / l'attribution des bits d'entrée (A / D bits) à advalue
if (adr! = 0xFFFF) / / continuer à stocker les bits 8 valeurs obtenues de l'ADC dans l'adresse à partir de 0x0000 jusqu'à
/ / Le S-RAM est pleine.
(LED = 1; / / pour vérifier s'il existe une conversion
for (j = 0; j <2000; j );
* Addr = value;
LED = 0; / / pour vérifier s'il existe une conversion
retard (); / fonction de retard /
)
d'autre
(
EX0 = 0; / / Si le S-RAM est pleine, désactiver externe 0 interrompre et l'interruption indicateur global
EA = 0;
)
)void main (void) (
EX0 = 1; / / Activer EX0 d'interruption, cette fonction est de permettre à (la série) ou désactiver (clair) 0 extérieures intrrupt
EA = 1; / / Activer Global indicateur d'interruption
IT0 = 0; / / 0 bit.Set interruption de contrôle de type / compensé par un logiciel de préciser front descendant / niveau bas déclenché interruption externe
P1 = 0xFF; / / Déclaration de P1 en tant que contribution
while (1) (
WRITE = 0; / / conversion AD;
WRITE = 1;
while (INTR == 1);
retard ();
)
)retard (void) / / Delay Timer fonction en utilisant 0 pour 50 ms.
(
TMOD & = 0xF0;
TMOD | = 0x01;
ET0 = 0;
TH0 = 0x3C;
TL0 = 0xB0;
TF0 = 0;
TR0 = 1;
while (TF0 == 0);
TR0 = 0;
)