標(biāo)題: IIC總線自制代碼可自取 [打印本頁]

作者: 715109131    時間: 2021-11-29 18:56
標(biāo)題: IIC總線自制代碼可自取
void Start(void)
{
SDA=1;
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;
}
void Stop(void)
{
SDA=0;
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;
}
void Ack(void)
{
        SDA=0;
        SCL=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        SCL=0;
        SDA=1;
}
void NoAck(void)
{
        SDA=1;
        SCL=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        SCL=0;
        SDA=0;
}
void SendByte(uchar dat)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                SDA=(bit)(dat&0x80);
                SCL=1;
                _nop_();_nop_();_nop_();_nop_();_nop_();
                SCL=0;
                dat<<=1;
        }
}
uchar RcvByte(void)
{
        uchar i,dat=0;
        SDA=1;
        for(i=0;i<8;i++)
        {
                SCL=1;
                dat<<=1;
                if(SDA==1)dat|=0x01;
                SCL=0;
        }
        return dat;
}
void PCF8591_DAC(uchar dat)
{
        Start();
        SendByte(0x90);
        Ack();
        SendByte(0x40);
        Ack();
        SendByte(dat);
        Ack();
        Stop();
}
uchar PCF8591_ADC(uchar ch)
{
        uchar dat;
        Start();
        SendByte(0x90);
        Ack();
        SendByte(0x40|ch);
        Ack();
        Start();
        SendByte(0x91);
        Ack();
        dat=RcvByte();
        NoAck();
        Stop();
        return dat;
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1