新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2015-12-29
- 在线时间
- 5 小时
|
1金钱
本帖最后由 umbreLLa 于 2015-12-29 17:56 编辑
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "myiic.h"
int main(void)
{
u32 ADC;
u16 PROM;
SystemInit();
delay_init(72);
NVIC_Configuration();
uart_init(9600);
LED_Init();
KEY_Init();
IIC_Init();
while(1)
{
delay_ms(1000);
// MS5611_reset();
MS5611_CONV();
MS5611_ADC_read();
ADC = MS5611_ADC_answer();
printf ("%X\n",ADC);
// MS5611_reset();
}
void MS5611_reset(void)
{
IIC_Start();
IIC_Send_Data(0xEC); //MS5611地址 = 1110 1100 = 0xEC
IIC_Wait_Ack();
IIC_Send_Data(0x1E); //MS5611复位命令:0001 1110
IIC_Wait_Ack();
IIC_Stop();
}
void MS5611_CONV(void)
{
IIC_Start();
IIC_Send_Data(0xEC); //MS5611Ð地址 = 1110 1100 = 0xEC
IIC_Wait_Ack();
IIC_Send_Data(0x48); //MS5611开启ADC转换 0100 1000
IIC_Wait_Ack();
IIC_Stop();
}
void MS5611_ADC_read(void)
{
IIC_Start();
IIC_Send_Data(0xEC); //MS5611地址 = 1110 1100 = 0xEC
IIC_Wait_Ack();
IIC_Send_Data(0x00); //MS5611读ADC 0000 0000
IIC_Wait_Ack();
IIC_Stop();
}
u32 MS5611_ADC_answer(void)
{
u32 data0,data1,data2;
u32 data;
IIC_Start();
IIC_Send_Data(0xED); //MS5611地址+1 = 1110 1101 = 0xED
IIC_Wait_Ack();
data0 = IIC_Read_Data(1); //高8位
data1 = IIC_Read_Data(1); //中8位
data2 = IIC_Read_Data(0); //低8位
IIC_Stop();
data = (data0<<16)+(data1<<8)+data2;
return data;
}
}
[/mw_shl_code]
这个是我写的代码,拜托大家看看有没有问题,运行之后,显示FFFFFF,明显不起作用,不知道哪有问题。
|
最佳答案
查看完整内容[请看2#楼]
已经解决了。
在开启MS5611的ADC转换后,要有一个延时才让MS5611进入ADC读模式。
在 MS5611_CONV();后加delay_ms(20);就能正常地读数了。
希望遇到同样问题的人看看吧。
|