Làm thế nào tôi có thể sử dụng Port2 hoặc là đầu vào hoặc đầu ra?

F

fatihbasaris

Guest
Hi all,

Tôi đang sử dụng Keil và AT89C51RC2.Tôi kết nối với một giao diện LCD và adc để PORT2.Giữa LCD và PORT2 tôi sử dụng một 74ls374 (chốt và đệm bang ba) đầu tiên, tôi đã gửi một cái gì đó (ví dụ: "ayarlandi bảng") cho LCD.và không có vấn đề.ı sau đó làm cho nó (74ls374) vô hiệu hoá.Tôi muốn đọc từ ADC 8 bit.sau đó ghi vào LCD.nhưng ı didnt thành công.

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

Bởi vì PORT2 fisrt sử dụng sản lượng, sản lượng .???? sau đó nhập vào sau đó

Xin hãy giúp tôi!

MÃ:
# include <89c51rd2.H>
# include <stdio.h>
# include <stdlib.h>

# include <float.h>

# define sil 1
# define nhà 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 P3_6 oe
# define P3_7 đồng hồ

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

void lcdgecikme (int chậm trễ)
(
int i, j;
for (i = 0; j <chậm trễ; i )
for (i = 0; i <2000; i );
)

void DATAkomut (int komut)
(
RS = 0; lcdgecikme (1);
RW = 0; lcdgecikme (1);
EN = 1; lcdgecikme (1);
đồng hồ = 0;
DATA = komut;
đồng hồ = 1;
EN = 0; lcdgecikme (1);
)

void DATAveri (char veri [])
(
int i = 0;
trong khi (veri = 0!)
(
RS = 1; lcdgecikme (1);
RW = 0; lcdgecikme (1);
EN = 1; lcdgecikme (1);
đồng hồ = 0;
DATA = veri ;
đồng hồ = 1;
EN = 0; lcdgecikme (1);
i ;

)
)

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

oe = 1; / / 74ls374 đầu tiên là vô hiệu hoá.

lcdgecikme (10);Port2_deger = P2; / / 8 bit được đọc ...
i = (Port2_deger * 5) / 255,0;
i * k = 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; / / 74ls374 đầu tiên được kích hoạt.
oe2 = 1; / / secaond 74ls374 vô hiệu hoá.LCDac ();
DATAkomut (birincisatir);
DATAveri ( "bảng ayarlandi");
trong khi (1)
(
degeroku ();
)
)

 
Nếu bạn muốn xem từ cổng 2 nó là một ý tưởng tốt để đặt tất cả các kết quả đầu ra để 1 trước khi đọc.

Hãy thử này:p2 = 0xFF;

Port2_deger = P2; / / 8 bit được đọc ...
i = (Port2_deger * 5) / 255,0;

hy vọng điều này sẽ giúp

 
Tôi đã thử nó trước.

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Buồn" border="0" />nhưng hệ thống đã viết chỉ 5V trên các lcd.

cảm ơn rất nhiều.

 
fatihbasaris đã viết:

Tôi đã thử nó trước.
<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Buồn" border="0" />

nhưng hệ thống đã viết chỉ 5V trên các lcd.cảm ơn rất nhiều.
 
Thiết lập các cổng của 8.051 là đầu vào sẽ không cung cấp cho bạn tri-đầu ra nhà nước không giống như vi điều khiển khác.Đặt 8.051 như đầu vào sẽ đặt một logic 1 tại cổng bộ đệm của nó nhưng có pullups yếu có thể dễ dàng kéo xuống bởi một logic 0 hoặc mặt đất.

Nếu bạn đọc bộ đệm của cảng, bạn sẽ nhận được logic 0 tiêm vào nó.

 
Bạn cần phải chú ý đến mạch ADC.ADC sản lượng và sản lượng port2 có thể có một vụ tai nạn.Trước khi bạn làm cho sản lượng cuối cùng của port2, bạn phải vô hiệu hóa đầu ra ADC đầu tiên.

hy vọng thành công!

 

Welcome to EDABoard.com

Sponsor

Back
Top