关于iic的问题

2019-08-22 13:12发布

我使用原子哥的iic程序去操作一个温湿度原件可是连应答都没都 我把原件资料和代码贴出来 希望有大神帮我找出问题     我接的是4.7的上拉电阻 Vcc=3.3
[mw_shl_code=c,true]#include "dht11_iic.h" #include"myiic.h" #include "delay.h" #include "sys.h" u16 ws_rec[10];//存放接受到的温湿度 void dht_write(void)//向传感器发送指令 { IIC_Start(); IIC_Send_Byte(0XB8); //发送写命令 delay_us(1500); IIC_Stop();//产生一个停止条件 delay_ms(2); IIC_Start(); IIC_Send_Byte(0XB8); //发送写命令 IIC_Wait_Ack(); IIC_Send_Byte(0x03);//发送功能码 IIC_Wait_Ack(); IIC_Send_Byte(0x00);//发送起始地址 IIC_Wait_Ack(); IIC_Send_Byte(0x04);//读取寄存器个数 IIC_Wait_Ack(); IIC_Stop();//产生一个停止条件 delay_ms(2); } void dht11_rec(void)//接受传感器数据 { u8 i; IIC_Start(); IIC_Send_Byte(0XB9); //进入接收模式 IIC_Wait_Ack(); delay_us(50); for(i=0;i<8;i++) //接收从机发来的字节 ws_rec=IIC_Read_Byte(1); IIC_Stop();//产生一个停止条件 } unsigned short crc16(u16 *ptr, unsigned char len) { unsigned short crc=0xFFFF; unsigned char i; while(len--) { crc ^=*ptr++; for(i=0;i<8;i++) { if(crc & 0x01) { crc>>=1; crc^=0xA001; } else { crc>>=1; } } } return crc; } void data_deal(u8 *tem,u8 *huim)//获取温湿度 { dht_write(); delay_ms(10); dht11_rec(); ws_rec[8]=ws_rec[7]<<8+ws_rec[6]; // if (ws_rec[8]==crc16(ws_rec,6)) { *huim=ws_rec[3]; *tem=ws_rec[5]; } }[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
gamerskyer
2019-08-23 02:55
另外,楼主一定要注意一个问题,那就是这个传感器特别容易损坏。
我买了3个AM2320,第一个引脚上焊了4条线,接到开发板的I2C总线上,调试了一整天,发现传感器没有任何反应,然后换第二个,引脚上焊了4条线,接到开发板上,终于出结果了,为了在I2C总线上挂接其它元件,又焊了4条线,然后在没接其它其它元件的情况下,这个传感器也没有任何反应,这时候我才意识到这个问题,最后换上第三个,迅速焊了4条线,赶紧用嘴吹气降温,接上开发板,终于好了,之后再也不敢把这个碰烙铁了。
所以,如果调试时发现传感器没有任何反应,可以考虑是不是坏掉了。
烙铁我也用很久了,从来没有把某个元件或芯片搞坏过,我想应该不是烙铁的问题。
也不知道我是不是买到次品了?

一周热门 更多>