////////////////////////////////////////////////////////////////
//24c16读写驱动程序
//
//模块调用:
//读数据:read(unsigned int address)
//写数据:write(unsigned int address,unsigned char dd)   dd为要写的 数据字节*/
////////////////////////////////////////////////////////////////
#define unsigned char Uchar
#define unsigned int Uint
sbit sda = P3^;
sbit scl = P3^;

sbit a0 = ACC^;                  //定义ACC的位,利用ACC操作
//速度最快
sbit a1 = ACC^;
sbit a2 = ACC^;
sbit a3 = ACC^;
sbit a4 = ACC^;
sbit a5 = ACC^;
sbit a6 = ACC^;
sbit a7 = ACC^;

//------------------------------------------------------------------------------

#pragma disable
//起始函数
void s24(void)
{
    _nop_();
    scl = ;
    sda = ;
    scl = ;
    _nop_();
    sda = ;
    _nop_();
    _nop_();
    scl = ;
    _nop_();
    _nop_();
    sda = ;
}

//------------------------------------------------------------------------------

#pragma disable
//停止函数
void p24(void)
{
    sda = ;
    scl = ;
    _nop_();
    _nop_();
    sda = ;
}

//------------------------------------------------------------------------------

#pragma disable
Uchar rd24(void)         //从24c16读一字节数据
{
    ACC = 0x00;
    sda = ;
    scl = ;a7 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    scl = ;a6 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    scl = ;a5 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    scl = ;a4 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    scl = ;a3 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    scl = ;a2 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    scl = ;a1 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    scl = ;a0 = sda;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = ;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; /// ///////////////24c16的一位回答位。
    return(ACC);
}
//------------------------------------------------------------------------------

#pragma disable
void wd24(Uchar dd) ////////////////向24c16写一字节数据
{
    sda = ;
    ACC = dd;
    sda = a7;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = a6;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = a5;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = a4;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = a3;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = a2;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = a1;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = a0;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ;
    sda = ;scl = ;//scl=0;(在下面程序中)
}
//---------------------------------------------------------------------------

#pragma disable
Uchar read(Uint address)
{
    Uchar dd;
    s24();                          //开始条件
    wd24(0xa0);                     //写器件地址(写命令)
    _nop_();_nop_();_nop_();_nop_();
    scl = ;                          //接收器件地址确认信号
    wd24(address);                  // 写数据地址
    _nop_();_nop_();_nop_();_nop_();
    scl = ;
    s24();                          //开始条件
    wd24(0xa1);                     //写器件地址(读命令)
    scl = ;
    dd = rd24();                      //读一字节
    p24();                          //停止条件
    return(dd);
}
//------------------------------------------------------------------------------

#pragma disable
void write(Uint address,Uchar dd)
{
    s24();                           //开始条件
    wd24(0xa0);                      //写器件地址;
    scl = ;
    wd24(address);                   //写数据地址
    scl = ;
    wd24(dd);                        //写dd数据
    scl = ;
    p24();                           //停止条件
}

24c16读写驱动程序的更多相关文章

  1. I2C的读写操作实验

    [实验任务]   利用24C08断电以后存储的数据不消失的特点,可以做一个断电保护装置.首先利用单片机做一个0-99秒的自动计时器.然后随机关断电源,在 通电以后计时器接着断电前的状态继续计时. [实 ...

  2. 理解select,poll,epoll实现分析

    mark 引用:http://janfan.cn/chinese/2015/01/05/select-poll-impl-inside-the-kernel.html 文章 select()/poll ...

  3. select()/poll() 的内核实现

    mark 引用:http://janfan.cn/chinese/2015/01/05/select-poll-impl-inside-the-kernel.html 文章 select()/poll ...

  4. 外设:K9F2G08 nandflash 底层读写、控制驱动程序,可随机读写

    /****************************************************************************** Copyright (C), 2001- ...

  5. 内核驱动程序中如何读写user space的文件,方便调试程序

    需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.但是在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() f ...

  6. nandflash驱动程序编写

    NAND FLASH是一个存储芯片 那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地 ...

  7. 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序

    Nor Flash和Nand Flash的不同: 类型 NOR Flash  Nand Flash  接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...

  8. 15.linux按键驱动程序(二)

    linux按键驱动程序 包含内容定时器延时去抖动,阻塞型设备驱动设计 一.定时器延时去抖 按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开.因而 ...

  9. 14.linux按键驱动程序(一)

    按键驱动程序 本文学习主要包含按键硬件的实现.中断分层管理.按键定时器去抖.阻塞性驱动程序设计.这里面需要使用到混杂设备驱动和中断处理程序的内容. 一.创建按键混杂设备驱动模型 int key_ope ...

随机推荐

  1. ubuntu install express

    1:全局安装express 2:查看Express安装的版本信息 3:运行express 创建工程,提示express未安装 4:重新安装Express4,这次安装成功 5:使用Express构建项目 ...

  2. JVM性能调优博客

    http://houjixin.blog.163.com/blog/static/35628410201411275719843/ http://blog.csdn.net/lastsweetop/a ...

  3. SGU 194 Reactor Cooling

    http://acm.sgu.ru/problem.php?contest=0&problem=194 题意:m条有向边,有上下界,求最大流. 思路:原图中有u-v low[i],high[i ...

  4. keil C 应注意的几个问题

    我们使用Keil C调试某系统时积累的一些经验 1.在Windows2000下面,我们可以把字体设置为Courier,这样就可以显示正常.2.当使用有片外内存的MCU(如W77E58,它有1K片外内存 ...

  5. PS抠图神器: KnockOut 2.0安装汉化和使用教程

    PS抠图神器: KnockOut 2.0安装汉化和使用教程 http://jingyan.baidu.com/article/6b97984d8aeadc1ca2b0bf3b.html

  6. MySQL存储过程事务处理

    BEGIN ; ; START TRANSACTION; #这边放sql语句,涉及到的表必须都为InnoDB THEN ROLLBACK; ELSE COMMIT; END IF; END 转自:ht ...

  7. 团队介绍 | 魅动 Magic Motion

    团队介绍 | 魅动 Magic Motion 魅动 Magic Motion 是专注于研发.设计和生产智能化私密生活用品的创新品牌.魅动 Magic Motion 将无线移动通信技术与私密生活产品相结 ...

  8. Linux shell编程02 shell程序的执行 及文件权限

    第一个shell脚本 1.       shell编程的方式 交互式shell编程 非交互式shell编程:执行的语句存放到一个文件 shell脚本:可以任意文件名,建议扩展名为sh 2.       ...

  9. iOS-网络编程(一)HTTP协议

    一. 网络编程基础 在移动互联网时代,几乎所有应用都需要用到网络,只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力.一个好的移动网络应用不仅要有良好的UI和良好的用户体验也要具备实时更 ...

  10. Hacker(12)----个人计算机安全防护策略

    了解了黑客的常用入侵方法,针对这些方法分别指定对应的防护策略不太现实,因此用户只能掌握个人计算机安全的常见防护策略,以确保计算机处在一个相对安全的环境中.常见个人计算机防护策略有:安装并及时升级杀毒软 ...