i2c

来源:互联网 发布:手机淘宝彩票 编辑:程序博客网 时间:2024/05/03 20:16

测试代码,有删减
就是
void I2CStart(void)
{
EA=0;
SDA=1; SCL=1; SomeNOP();//INI
SDA=0; SomeNOP(); //START
SCL=0;
}

=================================================
另外给出arm(44b0)测试代码.有删减.以前写这个是花了些时间的,在arm,51,avr都做了移植,比较方便.希望对你有所帮助.

void DoTestAT24CXX(void)
{
    AT24CXX    g_at24cxx = {0};
    FNIIC    g_fnIIC = {0};
    INT8U nData = 0;
    WORD i = 0;
    BYTE szBuffer[AT24C256_PAGE_SIZE] = {0};

    g_fnIIC.nIICBitSeq = IIC_BITSEQHL;
    g_fnIIC.btIIC_LL = 0;
    g_fnIIC.btIIC_HH = 1;    
    g_fnIIC.pfnSetIICSDA = Set_IIC_SDA;
    g_fnIIC.pfnGetIICSDA = Get_IIC_SDA;     
    g_fnIIC.pfnSetIICSCL = Set_IIC_SCL;
    g_fnIIC.pfnGetIICSCL = Get_IIC_SCL;

    g_at24cxx.nDeviceAddressBitsCount = AT24C256_DEVICE_ADDRESS_BITS_COUNT;
    g_at24cxx.nWordAddressBitsCount = AT24C256_WORD_ADDRESS_BITS_COUNT;
    g_at24cxx.nBytesPerPage = AT24C256_PAGE_SIZE;
    g_at24cxx.pfnIIC = &g_fnIIC;

    for (i=0; i<AT24C256_PAGE_SIZE; i++)
        szBuffer[i] = i*2+1;

    for (i=0; i<AT24C256_PAGE_SIZE; i++)
    {
        AT24CXX_ByteWrite(&g_at24cxx, AT24_FIRM_DEVICE_ADDRESS, i+1, szBuffer[i]);
        DelayMS(Delay1MS, 20);        //two byte write should delay 5ms
    }
    for (i=0; i<AT24C256_PAGE_SIZE; i++)
        szBuffer[i] = 0;
    for (i=0; i<AT24C256_PAGE_SIZE; i++)
        szBuffer[i] = AT24CXX_RandomtRead(&g_at24cxx, AT24_FIRM_DEVICE_ADDRESS, i+1);     
    SendDataToCOM(szBuffer, AT24C256_PAGE_SIZE);
}

void Set_IIC_SDA(BIT btValue)
{    
    rPCONF = rPCONF&(~0x0c)|0x04;    
    btValue &= 0x01;
    rPDATF = (rPDATF&(~(1<<IIC_SDA_BIT)))|(btValue<<IIC_SDA_BIT);
        DelayMS(Delay1MS, 1);            
}

BIT Get_IIC_SDA(void)
{
    BIT btValue = 0;
    
    rPCONF = rPCONF&(~0x0c)|0x00;    
    btValue = (rPDATF>>IIC_SDA_BIT)&0x01;         
        DelayMS(Delay1MS, 1);    
    return btValue&0x01;    
}

void Set_IIC_SCL(BIT btValue)
{
    rPCONF = rPCONF&(~0x03)|0x01;    
    btValue &= 0x01;
    rPDATF = (rPDATF &(~(1<<IIC_SCL_BIT)))|(btValue<<IIC_SCL_BIT);
        DelayMS(Delay1MS, 1);    
}

BIT Get_IIC_SCL(void)
{
    BIT btValue = 0;
    rPCONF = rPCONF&(~0x03)|0x00;        
    btValue = (rPDATF>>IIC_SCL_BIT)&0x01;     
        DelayMS(Delay1MS, 1);    
    return btValue&0x01;
}

原创粉丝点击