51单片机的简单IO读取操作
你好:下面是我的部分程序:sbitSCL=P3^5;
sbitSDA=P3^4;
SDA=0;
while(1)
{
if(SDA)
UartPutChar(i);
// main1();
i++;
}
P34口外接2K的上拉电阻
读取SDA一直是地电平,用万用表量也是地电平,只用用镊子将P34和电源短一下读出来的才是高,
是怎么回事
我的编译器是KEIL4
单片机的STC的89C52 你上面都把SDA=0;还怎么可能读出高电平出来 SDA=0; 问题就在这里!51单片机中但IO口作为输入口使用是应将IO口置 1,所以改成下面的程序就可以了。
sbitSCL=P3^5;
sbitSDA=P3^4;
SDA = 1;
while(1)
{
if(SDA)
UartPutChar(i);
// main1();
i++;
}
{:funk:}{:funk:}{:funk:}做输入时要先写1 准双向口 要不是你的大学老师没好好教,要不就是你没好好学。51单片机使用最基本的注意事项。 while(1)
{
if(SDA)
UartPutChar(i);
// main1();
i++;
}
//这个i你是要作为SDA高电平次数的计数用吧。如果是这样写也错了。
//UartPutChar(i++);去掉后面的i++
void iic_ack(void)
{
uchar i;
ack_flag =0x00;
SDA =0;
iic_delay();
SCL =0;
iic_delay();
for(i=0;i<200;i++)
{
if((SDA))
{
ack_flag =0x01;
break;
}
iic_delay();
}
SCL =0;
}
我上面是模拟IIC总线操作的,作为主机用的。是先把SDA的总线拉地,然后等待从机拉起回应。
不知道怎么操作,之前用上面的程序操作24C04成功,但是这次控制一个从的单片机不成功。 难道一定要先把IO口输出高,但是这不符合IIC的规定。 IO口输出高,难道IIC线上,一定是高吗!(晕: 金牌会员)
51的基本注意事项,好好查下书籍! 都是先写H,再等一个nop 后再读就对了 高手!! chinabn 发表于 2012-5-7 10:02 static/image/common/back.gif
IO口输出高,难道IIC线上,一定是高吗!(晕: 金牌会员)
51的基本注意事项,好好查下书籍! ...
这个不能说金牌会员就不会犯错了,金牌会员只能说是常在这个论坛发帖回帖,注册的时间较长非常的关注这个论坛而已,不能代表其它. 要在实践中检验!!
页:
[1]