24aa64.c

来自「msp430 非常经典的教材 希望对 msp430 的学者有帮助」· C语言 代码 · 共 177 行

C
177
字号
#include "24AA64.h"
#include "i2c.h"

//设备码 1010
void readByte24AA64(int addr,char pBuf[])
{
    char hi;
    char low;
    
    //高地址
    hi = (char)((addr >> 8) & 0xff);
    hi &= 0x1F;
    //低地址
    low = (char)(addr & 0xff);
    
    // 启动数据总线
    I2C_START();			
    // 发送写命令
    I2C_TxHToL(0xA0);			
    // 等待 ACK
    I2C_GetACK();	
    //发送高地址
    I2C_TxHToL(hi);	
    // 等待 ACK
    I2C_GetACK();
    //发送低地址
    I2C_TxHToL(low);	
    // 等待 ACK
    I2C_GetACK();
    
    // 启动数据总线
    I2C_START();	
    // 发送读命令
    I2C_TxHToL(0xA1);	
    // 等待 ACK
    I2C_GetACK();	
    //读一个数据
    pBuf[0] = I2C_RxHToL();
    //设置NAK
    I2C_SetNAk();
    // 停止总线
    I2C_STOP();
    
    return;
}
void writeByte24AA64(int addr,char pBuf[])
{
    char hi;
    char low;
    
    //高地址
    hi = (char)((addr >> 8) & 0xff);
    hi &= 0x1F;
    //低地址
    low = (char)(addr & 0xff);
    
    // 启动数据总线
    I2C_START();			
    // 发送写命令
    I2C_TxHToL(0xA0);			
    // 等待 ACK
    I2C_GetACK();	
    //发送高地址
    I2C_TxHToL(hi);	
    // 等待 ACK
    I2C_GetACK();
    //发送低地址
    I2C_TxHToL(low);	
    // 等待 ACK
    I2C_GetACK();
    //写入数据
    I2C_TxHToL(pBuf[0]);
    // 等待 ACK
    I2C_GetACK();
    // 停止总线
    I2C_STOP();	
    
    return;
}
int readPage24AA64(int addr,char pBuf[],int len)
{
    char hi;
    char low;
    int i;
    
    //高地址
    hi = (char)((addr >> 8) & 0xff);
    hi &= 0x1F;
    //低地址
    low = (char)(addr & 0xff);
    
    //高地址
    hi = (char)((addr >> 8) & 0xff);
    hi &= 0x1F;
    //低地址
    low = (char)(addr & 0xff);
    
    // 启动数据总线
    I2C_START();			
    // 发送写命令
    I2C_TxHToL(0xA0);			
    // 等待 ACK
    I2C_GetACK();	
    //发送高地址
    I2C_TxHToL(hi);	
    // 等待 ACK
    I2C_GetACK();
    //发送低地址
    I2C_TxHToL(low);	
    // 等待 ACK
    I2C_GetACK();
    
    // 启动数据总线
    I2C_START();	
    // 发送读命令
    I2C_TxHToL(0xA1);	
    // 等待 ACK
    I2C_GetACK();	
    for(i = 0;i < len - 1;i++)
    {
        //读一个数据
        pBuf[i] = I2C_RxHToL();
        //设置ACK
        I2C_SetACK();
    }
    //最后一个数据
    pBuf[len -1] = I2C_RxHToL();
    //设置NAK
    I2C_SetNAk();
    // 停止总线
    I2C_STOP();
    //读32个数据
    return len;
}
void writePage24AA64(int addr,char pBuf[],int len)
{
    char hi;
    char low;
    int i;
    
    //高地址
    hi = (char)((addr >> 8) & 0xff);
    hi &= 0x1F;
    //低地址
    low = (char)(addr & 0xff);
    
    //页写最多能写入32个数据
    if(len > 32) len = 32;
    
    // 启动数据总线
    I2C_START();			
    // 发送写命令
    I2C_TxHToL(0xA0);			
    // 等待 ACK
    I2C_GetACK();	
    //发送高地址
    I2C_TxHToL(hi);	
    // 等待 ACK
    I2C_GetACK();
    //发送低地址
    I2C_TxHToL(low);	
    // 等待 ACK
    I2C_GetACK();
    for(i = 0;i < len;i++)
    {
        //写入数据
        I2C_TxHToL(pBuf[i]);
        // 等待 ACK
        I2C_GetACK();
    }
    // 停止总线
    I2C_STOP();	
    
    return;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?