初级会员
- 积分
- 100
- 金钱
- 100
- 注册时间
- 2019-8-28
- 在线时间
- 11 小时
|
1金钱
问题描述:STC89C52RC单片机开机能读取DHT12数据,之后不能读取数据,请教是什么原因?请帮忙分析参考时序图。谢谢!IIC部分程序:
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=25;y>0;y--);
}
void delay1()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void start()
{
sda=1;
delay1();
scl=1;
delay1();
sda=0;
delay1();
}
void stop()
{
sda=0;
delay1();
scl=1;
delay1();
sda=1;
delay1();
}
void respons()
{
char i;
scl=1;
delay1();
while((sda==1)&&(i<250))i++;
scl=0;
delay1();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay1();
sda=CY;
delay1();
scl=1;
delay1();
}
scl=0;
delay1();
sda=1;
delay1();
}
uchar read_byte()
{
uchar i,k;
scl=0;
delay(5);
sda=1;
delay(5);
for(i=0;i<8;i++)
{
scl=1;
delay(5);
k=(k<<1)|sda;
scl=0;
delay(5);
}
sda=0;
return k;
}
uchar dht12read(uchar address)
{
uchar date;
start();
write_byte(0xb8);
respons();
write_byte(address);
respons();
start();
write_byte(0xb9);
respons();
date=read_byte();
stop();
return date;
}
5字节读取函数:
void read5byte()
{
uchar a;
dat[0]=dht12read(0x00);
dat[1]=dht12read(0x01);
dat[2]=dht12read(0x02);
dat[3]=dht12read(0x03);
dat[4]=dht12read(0x04);
a=dat[0]+dat[1]+dat[2]+dat[3];
if(a==dat[4])
{
return;
}
}
|
-
|