PT2272与51单片机连接的问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 07:36:08
碰到一个很郁闷的问题,有数据编码时,2272的数据管脚直接测电压是4.9V左右,但是接到51的P1口(带4.7K上拉电阻)后,电压就只有1.8V了(已经共地)。

用HC244驱动后,电压正常了。

但是51读P1口的数据很混乱。

我2272的17脚通过一个反向接到51的INT0。

即解码成功后就触发INT0中断,中断程序如下:

void i0(void) interrupt 0 using 2
{
if(P1^0==1)
{
i=1;
}
if(P1^1==1)
{
i=2;
}
if(P1^2==1)
{
i=3;
}
if(P1^3==1)
{
i=4;
}

}

最后I用数码管显示出来,但是我2272数据码不同,51读出的数据都是随机的1234。。。

驱动换LS244也不行。。
2272用的是M4。。 51读数据显得很混乱。。即使我P1什么都没接,他也令I=4了。。有时候接了数据 也直接显示4。。不发生跳变。。 P1我初始赋值为1后 数据不混乱了 但是直接显示4。。不论数据是什么。。。

一步步来,你用的是PT2272-M4/L4还是别的型号?

呵呵,或许我知道原因了——你看你的程序,你说P1口什么都没接,I=4是肯定的!因为P1.3=1,我想你应该把程序该一下,每一个if后都加一个返回:
unsigned char i0(void) interrupt 0 using 2
{
if(P1^0==1)
{
i=1;
return(1);
}
if(P1^1==1)
{
i=2;
return(1);
}
if(P1^2==1)
{
i=3;
return(1);
}
if(P1^3==1)
{
i=4;
return(1);
}

}

你的程序原来的问题是每个if语句都执行了,无论P1.1~P1.2是0还是1,只要P1.3=1就I=4。现在的程序保证只有某一个端口位为1时就从中断中返回,而不考虑其他端口的情况,如P1.0=0且P1.1=1,则函数返回I=2,P1.2和P1.3无论是0还是1都无所谓。

I/O口 要先写1 , 再读取 ,才能准确 ,建议你看看 IO口内部结够图

先写入高电平后再读数据。其它的没问题了。P1要先写入高电平。

分给我吧.谢谢...嘎嘎!~没几个能回答的!~