Jak mohu použít Port2 buď vstup nebo výstup??

F

fatihbasaris

Guest
Zdravím všechny,

I am using Keil a AT89C51RC2.I připojení LCD a ADC rozhraní k PORT2.Mezi LCD a PORT2 používám 74ls374 (zámek a tři státní buffer) Za prvé, jsem poslal něco (např. "panel ayarlandi") na LCD.a není žádný problém.Pak jsem dělat to (74ls374) zdravotně postižených.Chci číst 8 bitů z ADC.pak pište na LCD.ale já didnt uspět.

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Smutný" border="0" />

Vzhledem k tomu, PORT2 fisrt pomocí výstupů, později pak vstup výstup .????

Prosím, pomozte mi!

Kódy:
# Include <89c51rd2.H>
# Include <stdio.h>
# Include <stdlib.h>

# Include <float.h>

# Define SIL 1
# Define doma 2
# Define solayaz 4
# Define sagayaz 6
# Define kursorgizle 12
# Define kursoryanson 15
# Define kursorgeri 16
# Define kaydirsaga 24
# Define kaydirsola 28
# Define displaykapat 0
# Define birincisatir 128
# Define ikincisatir 192
# Define karakuretadres 64
# Define ciftsatir8bit 56# Define oe2 P3_5
# Define OE P3_6
# Define hodiny P3_7

# Define DATA P2
# Define RS P3_0
# Define RW P3_1
# Define EN P3_2

neplatné lcdgecikme (int zpoždění)
(
int i, j;
pro (j = 0; j <zpoždění; j )
pro (i = 0; i <2000; i );
)

neplatné DATAkomut (int komut)
(
RS = 0; lcdgecikme (1);
RW = 0; lcdgecikme (1);
EN = 1; lcdgecikme (1);
Hodiny = 0;
DATA = komut;
Hodiny = 1;
EN = 0; lcdgecikme (1);
)

neplatné DATAveri (char veri [])
(
int i = 0;
while (veri ! = 0)
(
RS = 1; lcdgecikme (1);
RW = 0; lcdgecikme (1);
EN = 1; lcdgecikme (1);
Hodiny = 0;
DATA = veri ;
Hodiny = 1;
EN = 0; lcdgecikme (1);
i ;

)
)

neplatné LCDac (void)
(
int baslangic [] = (kursorgizle, ciftsatir8bit, sagayaz), t;
pro (t = 0; t <3; t )
DATAkomut (baslangic [t]); lcdgecikme (1);
)neplatné degeroku ()
(
int k;
float i;
unsigned char dizitam [3];
unsigned char diziondalik [3];
unsigned char Port2_deger;

oe = 1; / / první 74ls374 je zakázáno.

lcdgecikme (10);Port2_deger = P2, / / 8 bitů je čtení ...
i = (Port2_deger * 5) / 255,0;
k = i * 10;
dizitam [0] = k / 10 0x30;
dizitam [1] = 0x00;

diziondalik [0] = k% 10 0x30;
diziondalik [1] = 0x00;OE = 0;
DATAkomut (ikincisatir);
DATAveri (dizitam);
DATAveri (",");
DATAveri (diziondalik);
DATAveri ("volt");

)

void main ()
(

OE = 0; / / první 74ls374 je povolen.
oe2 = 1; / / secaond 74ls374 zdravotně postižené.LCDac ();
DATAkomut (birincisatir);
DATAveri ("panel ayarlandi");
while (1)
(
degeroku ();
)
)

 
Pokud chcete číst z portu 2 je vhodné nastavit všechny výstupy na 1 před čtením.

Zkuste toto:p2 = 0xFF;

Port2_deger = P2, / / 8 bitů je čtení ...
i = (Port2_deger * 5) / 255,0;

doufám, že to pomůže

 
Zkoušel jsem to dřív.

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Smutný" border="0" />ale systém, napsal pouze 5V na LCD displeji.

Díky moc.

 
fatihbasaris napsal:

Zkoušel jsem to dřív.
<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Smutný" border="0" />

ale systém, napsal pouze 5V na LCD displeji.Díky moc.
 
Nastavení portů 8051 jako vstupy nebude vám Tri-State výstup na rozdíl od ostatních mikroprocesorů.Nastavení 8051 jako vstupy bude klást logické 1 v přístavu, nárazníky, ale má slabé pullups, které lze snadno stáhl do logiky 0 nebo zem.

Pokud budete číst přístavu buffer, budete mít logiku 0 injekčně do něj.

 
Musíte dávat pozor na obvody ADC.ADC výstup a port2 výstup může mít pád.Než uděláte poslední výstup port2, musíte vypnout výstup ADC první.

doufejme, že úspěch!

 

Welcome to EDABoard.com

Sponsor

Back
Top