////////////////////////////////////////////////////////////////
//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. BZOJ 1877 晨跑

    http://www.lydsy.com/JudgeOnline/problem.php?id=1877 思路:拆点费用流,答案就是最大流量和最小费用. #include<algorithm&g ...

  2. HDU 3507 PrintArticle (单调队列优化)

    题意:给出一个数列C,一个数字M,将数列分成若干段,每段的代价为(设这段的数字为k个): dp[i]=min(dp[j]+(sum[i]-sum[j])*(sum[i]-sum[j])+M) 若j1& ...

  3. tyvj1297 小气的小B

    描述 其实你们都不知道,小B是很小气的.一天小B带着他的弟弟小B'一起去摘果子,走着走着,他们忽然发现了一颗长满了果子的树.由于弟弟长得太矮了,弟弟只有让哥哥小B帮他摘一些果子下来.哥哥小B说:&qu ...

  4. Base64 加密之中文乱码

    ase64编码将二进制数据按照每三个字节转换成四个字节可读字符,编码后的字符长度大约为136.1%.字符范围为 A-Z  a-z  0-9  \  +.但编码后的字符串不太适合使用URL传输,中文加密 ...

  5. 【HDU1166】敌兵布阵(树状数组或线段树)

    是一道树状数组的裸题,也可以说是线段树的对于单点维护的裸题.多做这种题目可以提高自己对基础知识的理解程度,很经典. #include <iostream> #include <cst ...

  6. 笔试、面试重点总结:WIN32、MFC与Linux

    win32 1. Win32应用程序的基本类型. 2. 创建win32窗口程序的几个步骤,及使用到的函数. 3. nmake 与 makefile. 4. 有哪些字符集? Win32对于各种字符集如何 ...

  7. struts——拦截器

    什么是拦截器 拦截器(Interceptor)是Struts 2的一个强有力的工具,有许多功能都是构建于它之上,如国际化(前两篇博客介绍过).转换器,校验等. 拦截器是动态拦截Action调用的对象. ...

  8. The Frog's Games(二分)

    The Frog's Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) ...

  9. redmine fastcgi常常崩溃的解决方式

    最终找到了解决方法,在以下的文件里加入两行就可以: /home/redmine/redmine-2.5.1/public/dispatch.fcgi require 'rubygems' requir ...

  10. Oracle安装基本步骤

    安装数据库 .建立用户组及用户 groupadd oinstall groupadd dba groupadd oper useradd -g oinstall -G dba oracle passw ...