打印
[AVR单片机]

谁有mega8的nrf2401程序,我这的调不通,来一份必重谢!

[复制链接]
1197|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaojc123|  楼主 | 2015-8-13 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
badbud| | 2015-9-15 17:54 | 只看该作者
BOOL USBTOI2C::SlaveReadS(ULONG iIndex,UCHAR SLA_addres,UCHAR Conmand_ID,UCHAR size,PUCHAR oInByte)       
{
        for(UCHAR i=0;i<6;i++)
        {
            if(I2CDelayR[i]>5000)
                    I2CDelayR[i] = 1000;
        }
        if(I2CDelayR[2]>4500)
                 I2CDelayR[2] = 14000;
        UCHAR RSize=size;

    if(!I2C_IssueStart(iIndex))
                //return FALSE;
        //I2C_IssueStart(iIndex);
        Delayus(I2CDelayR[0]);

    if(!I2C_OutByteCheckAck(iIndex,SLA_addres))   // 输出一字节数据并检查应答是否有效// 指定USB2I2C设备序号// 准备写出的数据
                return FALSE;
        //I2C_OutByteCheckAck(iIndex,SLA_addres);
        Delayus(I2CDelayR[1]);

    if(!I2C_OutByteCheckAck(iIndex,Conmand_ID))  // 输出一字节数据并检查应答是否有效// 指定USB2I2C设备序号// 准备写出的数据
        {
                //Delayus(14000);
                if((I2CDelayR[2]%100)==99)
                {
            USBIO_ResetDevice(iIndex );
                    Delayus(1000);
                }
        }
        Delayus(I2CDelayR[2]);

    if(!I2C_IssueStart(iIndex))
                return FALSE;
        //I2C_IssueStart(iIndex);
        Delayus(I2CDelayR[3]);
        
    if(!I2C_OutByteCheckAck(iIndex,(SLA_addres|1)))  // 输出一字节数据并检查应答是否有效// 指定USB2I2C设备序号// 准备写出的数据
                return FALSE;
        //I2C_OutByteCheckAck(iIndex,(SLA_addres|1));
        Delayus(I2CDelayR[4]);

    //I2C_InBlockByAck(iIndex,(RSize-1),oInByte);
        for(UCHAR i=0;i<(RSize-1);i++)
        {       
        if(!I2C_InBlockByAck(iIndex,1,oInByte+i))   // 输入数据块,每输入一个字节都产生有效应答// 指定USB2I2C设备序号// 准备读取的数据字节数,单次必须小于32字节// 指向一个缓冲区,返回后是读入的数据
                         return FALSE;//*(oInByte+i)=0;//
                //I2C_InBlockByAck(iIndex,1,oInByte+i);
        Delayus(I2CDelayR[5]);
        }

    if(!I2C_InByteNoAck(iIndex,(oInByte+RSize-1)))  // 输入一字节数据,但是不产生应答// 指定USB2I2C设备序号
                return FALSE;  
    //I2C_InByteNoAck(iIndex,(oInByte+RSize-1));
        Delayus(I2CDelayR[5]);

    if(!I2C_IssueStop(iIndex))
                 return FALSE;

    //USBIO_FlushBuffer(  // 清空mUSBIO_PACKET_LENGTH的缓冲区
        //iIndex );  // 指定mUSBIO_PACKET_LENGTH设备序号
        Delayus(I2CDelayR[5]);
    return( TRUE );  
}

使用特权

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

本版积分规则

19

主题

35

帖子

1

粉丝