void mcp9801()
{
/*********************************配置为比较器输出*/
i2cStart();
writeByte(0x9e);//写
do{}
while(I2C0STAT!=0x18);//写控制,等待MCP9801响应
writeData(0x01); //00温度寄存器 01配置寄存器 10温度迟滞寄存器 11温度限制寄存器
writeData(0x00);
i2cStop();
/**********************************************设置为下限为0度*/
i2cStart();
writeByte(0x9e);//写
do{}
while(I2C0STAT!=0x18);//写控制,等待MCP9801响应
writeData(0x02);
writeData(0x00);
i2cStop();
/**********************************************设置为上限为45度*/
i2cStart();
writeByte(0x9e);//写
do{}
while(I2C0STAT!=0x18);//写控制,等待MCP9801响应
writeData(0x03);
writeData(0x5a);
i2cStop();
/************************************************下面开始读值****/
i2cStart();
writeByte(0x9e);//写
do{}
while(I2C0STAT!=0x18);//写控制,等待MCP9801响应
writeData(0x00); //选择温度寄存器
//writeData(0x00);//因为温度寄存器为只读寄存器,所以写入也无效。但是按照他们给的DATASHEET,写个内容过去还是没有用。
i2cStop();
i2cStart();
writeByte(0x9f);//读
do{}
while(I2C0STAT!=0x40);//读,等待MCP9801响应
I2C0CONCLR=AA;
I2C0CONCLR=SI;
do{}
while(I2C0STAT!=0x58); //等待接收数据直接和非ACK
printf("%02d",I2C0DAT);// 为什么这里通过串口输出的值一直都是00呢???????
printf("℃");
} |