打印
[51单片机]

基于51单片机的MAX30100官方驱动,为何数据口一直返回255

[复制链接]
1310|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

# include <reg52.h>
# include <stdio.h>
# include <intrins.h>

sbit IIC_SCL    =P3^5;   
sbit IIC_SDA    =P3^7;  
bit  IIC_ACK;              
int  rda;                  


void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}

void iic_start()
{  
IIC_SDA=1;
_nop_();
_nop_();
IIC_SCL=1;         
_nop_();
_nop_();
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
}


void iic_stop()
{  
IIC_SCL=0;
_nop_();
_nop_();
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SDA=1;
_nop_();
_nop_();
}

void iic_sendbyte(unsigned char c)
{
unsigned char bitcnt;
for(bitcnt=0;bitcnt<8;bitcnt++)
{
if((c<<bitcnt)&0x80)
IIC_SDA=1;
else
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SCL=0;
}
_nop_();
_nop_();
IIC_SDA=1;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
if(IIC_SDA==0)
IIC_ACK=0;
else
IIC_ACK=1;
IIC_SCL=0;
_nop_();
_nop_();
}

int iic_rcvbyte_nack()
{
unsigned char retc;
unsigned char bitcnt;
retc=0;
IIC_SDA=1;
for(bitcnt=0;bitcnt<8;bitcnt++)
{
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
retc=retc<<1;
if(IIC_SDA==1)
retc=retc+1;
_nop_();
_nop_();
}

_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SDA=1;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
return(retc);
}

int iic_rcvbyte_ack()
{
unsigned char retc;
unsigned char bitcnt;
retc=0;
IIC_SDA=1;
for(bitcnt=0;bitcnt<8;bitcnt++)
{
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
retc=retc<<1;
if(IIC_SDA==1)
retc=retc+1;
_nop_();
_nop_();
}
//¸ø³öACKÐźÅ
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
return(retc);
}


void wr_max30100_one_data(int address,int saddress,int w_data )
{
_nop_();
iic_start();
_nop_();
iic_sendbyte(address);
_nop_();
iic_sendbyte(saddress);
_nop_();
iic_sendbyte(w_data);
_nop_();
iic_stop();
_nop_();
}

void rd_max30100_one_data(int address,int saddress)
{
iic_start();
_nop_();
iic_sendbyte(address);
_nop_();
iic_sendbyte(saddress);
_nop_();
address=address+1;
_nop_();
iic_start();
_nop_();
iic_sendbyte(address);
_nop_();
rda=iic_rcvbyte_nack();
_nop_();
iic_stop();
}

main()
{
double temp,temp1,temp2;

TMOD=0x20;                  
SCON=0x50;
TH1=0xF3;
TL1=0xF3;
PCON=0X80;                          
TR1=1;   
ES=1;
EA=1;
        TI=1;

while(1)
{

wr_max30100_one_data(0xae,0x06,0x0b);  

rd_max30100_one_data(0xae,0xff);         
printf("MAX30100 ID =%d\n",rda);            

wr_max30100_one_data(0xae,0x07,0x43);      
delayms(10);   

wr_max30100_one_data(0xae,0x09,0x66);   
delayms(50);                              
rd_max30100_one_data(0xae,0x16);           
printf("temp1=%d\n",rda);                  
temp1=rda;
rd_max30100_one_data(0xae,0x17);            
printf("temp2=%d\n",rda);                  
temp2=rda;
temp=temp1+(temp2*0.0625);               
printf("µ±Ç°Î¶È=%.4f\n",temp);           
delayms(100);  
printf("\n");                           
}
}


【温度-心率-血氧-检测)资料】.rar

3.62 MB

使用特权

评论回复

相关帖子

沙发
新塘初级用户|  楼主 | 2020-9-9 09:57 | 只看该作者

串口输出是这样的

206085f58367379b9e.png (10.91 KB )

206085f58367379b9e.png

使用特权

评论回复
板凳
新塘初级用户|  楼主 | 2020-9-9 09:58 | 只看该作者
而且我试过,把IIC数据口和时钟口反接,他还是可以输出上面那个数据

使用特权

评论回复
地板
食蜂操祈| | 2022-11-20 09:22 | 只看该作者
引脚电压高了

使用特权

评论回复
5
zwsam| | 2024-3-25 09:04 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

36

帖子

0

粉丝