⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24aa64.c

📁 《MSP430单片机常用模块与综合系统实例精讲》整书的源代码有30个
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -