IIC Read 函数,买了原子的板子有不懂的问题

2019-08-19 19:59发布


u8 IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
    for(i=0;i<8;i++ )
                        {
        IIC_SCL=0;
        delay_us(2);
                    IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)
                                {
                                        receive++;
        }                                       
                     delay_us(1);
                        }                                         
                                if (!ack)
                                        IIC_NAck();//·¢&#203;ínACK
                                else
                                        IIC_Ack(); //·¢&#203;íACK   
                                return receive;

}

上面我有两个地方不明白, 第一个 IIC_Read_Byte(unsigned char ack)   这个ack,在这里做形参吗?有什么用。
                                       第二个是return receive   ,这个值是返回给那个函数调用的。有什么用

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
super910906
1楼-- · 2019-08-20 00:51
 精彩回答 2  元偷偷看……
dingdi
2楼-- · 2019-08-20 03:19
super910906 发表于 2017-5-4 08:53
如果需要发送应答信号,入参是1,不用应答,入参是0,return receive是你读到的数据。

我在主函数要怎么写
void main(void)
{
     IIC_init();
     delay_init()
     
     IIC_Start()
     IIC_Send_byte(0x18);
     IIC_Wait_akc();
     delay_us(10);
     
     IIC_Send_byte(0x32);
     IIC_Wait_akc();
     delay_us(10);
     
      IIC_Send_byte(0x21);
     IIC_Wait_akc();
     delay_us(10);
  
     下面开始读代码
     IIC_Start()
     IIC_Send_byte(0x19);
     IIC_Wait_akc();
     delay_us(10);
     
     
     IIC_Read_byte();
     IIC_Read_byte();

}

请帮我看看,这部分read 函数对不对。括号里面要写什么吗?
super910906
3楼-- · 2019-08-20 06:00
dingdi 发表于 2017-5-4 14:10
我在主函数要怎么写
void main(void)
{

不对,IIC_Read_byte();有问题,这个函数返回一个变量,你要把返回的变量赋值给另一个变量。如:Read_Data=IIC_Read_byte(1);(定义:uint8_t Read_Data)
小陀螺爱炒蛋
4楼-- · 2019-08-20 08:11
学习下IIC通信协议~就知道了
电子&mcu爱好者
5楼-- · 2019-08-20 14:00
这个是回应参数,有俩种情况,非应答与应答
dingdi
6楼-- · 2019-08-20 18:45
 精彩回答 2  元偷偷看……

一周热门 更多>