i2c

测试代码,有删减
就是
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值