24C01的IIC 讀寫的c51程式
/*------------------------------------------------------------------------------
為了安全起見,程式中很多NOP是冗餘的,希望讀者能進一步精簡,但必須經過驗證。
Atmel 24C01 比較特殊,為簡約型.
51晶振為11.0592MHz
------------------------------------------------------------------------------*/
#include "reg51.h"
#include "intrins.h"
sbit SCL= P1^;
sbit SDA= P1^;
delay()
{
unsigned ;
while(i--);
}
/*------------------------------------------------------------------------------
調用方式:write_8bit(unsigned char ch)
函數說明:內函數,私有,用戶不直接調用。
------------------------------------------------------------------------------*/
void write_8bit(unsigned char ch)
{
unsigned ;
SCL=;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
while (i--)
{
SDA=(bit)(ch&0x80);
_nop_();_nop_();_nop_();_nop_();_nop_();
ch<<=;
SCL=;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
/*------------------------------------------------------------------------------
調用方式:void ACK(void)
函數說明:內函數,私有,用戶不直接調用。
------------------------------------------------------------------------------*/
void ACK(void)
{
unsigned char time_1;
SDA=;
SCL=;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=;
time_1=;
while(SDA) {if (!time_1) break;} //ACK
SCL=;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
unsigned char ReadIIC_24C01(unsigned char address)
{
unsigned ;
unsigned ;
SCL=;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
SDA=;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=; //START
write_8bit( (address<<) | 0x01); //寫頁位址和操作方式
ACK();
while (i--)
{
SDA=;
ddata<<=;
SCL=;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=;
if (SDA)
ddata|=0x01;
}
SCL=;
_nop_();
SCL=;
_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=;
_nop_();
SCL=;
_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=; //STOP
delay();
return ddata;
}
void WriteIIC_24C01(unsigned char address,unsigned char ddata)
{
SCL=;
_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
SDA=;
_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=; //START
write_8bit( (address<<) & 0xfe); //寫頁位址和操作方式,對於24C32-24C256,page不起作用
ACK();
write_8bit(ddata); //發送資料
ACK();
SDA=;
_nop_();
SCL=;
_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=; //STOP
delay();
}
24C01的IIC 讀寫的c51程式的更多相关文章
- mysql proxy讀寫分流(二)-加入RW splitting
上一篇中提到 安裝LUA及MySQL Proxy後,接下來就是RW splitting(讀寫分流)的部份了 整體的概念圖跟上一篇MySQL Proxy安裝方式相同,丫忠再補上一個對應port的圖表: ...
- 使用Device IO Control 讀寫 USB Mass Storage
http://www.ezblog.idv.tw/Download/USBStorage.rar 這是一個不透過檔案系統,去讀寫USB Mass Storage 任何位置(包含FAT)的方式 首先需安 ...
- (C/C++) FILE 讀寫檔案操作
在C/C++ 讀寫檔案操作比較常見應該是利用 FILE.ifstream.ofstream 在這篇筆記裡頭記錄 FILE.fstream 使用方法及操作 #include <iostream&g ...
- 安卓初級教程(2):SD創建file,儲存與讀寫的方法(1)
package com.sdmadik; import java.io.*; import android.app.Activity; import android.os.Bundle; import ...
- [ASP.NET] 檔案讀寫權限問題
今天遇到一個問題,環境如下: IIS Server: Server 2008 R2 沒加域 File Server: Server 2003 加域 當我的Web程序需要把位於File Server的一 ...
- IIS ApplicationPoolIdentity(配置IIS讀寫網站文件)
原创地址:http://www.cnblogs.com/jfzhu/p/4067297.html 转载请注明出处 从IIS 7.5开始,Application Pool Identity的Built- ...
- Caffe 源碼閱讀(一) Blob.hpp
Blob 四維度(N K H W) N : SGD 一次 mini-batch 個數 K : 如果是圖片表示圖片通道數 如果是中間結果 則理解爲 feature map 個數 H.W : 如果是圖片理 ...
- 無法使用 system/bin/r 讀取 pmic pm8937 hardware regitster 的原因
Platform Qualcomm MSM8917 + PM8937 + PMI8940 起因 同事問我 PM8937 的 VREG_L17 如何設定成 3.3V, 從 PM8937 hardware ...
- Python 基礎 - 文件操作_v2
嗯,那如何要把游標的位置給打印來? #!/usr/bin/env python3 # -*- coding:utf-8 -*- f = open('test', 'r') print(f.tell() ...
随机推荐
- 如何用VS2010打开VS2012编辑的项目
找到打开项目的开始图标:,右键点击,选择有文本编辑器打开,用下面的语句将文件里面的前两句替换掉.Microsoft Visual Studio Solution File, Format Versi ...
- altium designer Summer09出现的问题解决方案
在编译原理图时,引脚和连线旁边出现很多红线,提示 error:signal with no driver. 原理图没有加入到Project里. 第一次导入没问题,但是改了个元件的封装,在更新一下(De ...
- Linq to BBJECT之非延时标准查询操作符
非延时标准查询操作符是指不具备延时查询特性的标准查询操作符,这些操作符一般用于辅助延时标准查询操作符使用. 1.ToArray操作符 ToArray操作符用于将一个输入序列转换成一个数组. 方法原型: ...
- sql模糊匹配
执行 数据库查询时,有完整查询和模糊查询之分. 一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,%:表示任意0个 ...
- AS3读取加密XML
首先要确定xml使用了哪些加密方式,这样在As3中就反过来解密. 我加密xml的方式是先将xml文件打包为一个压缩文件,然后将压缩文件进行RC4加密,最后用base64将加密过的压缩包转为base64 ...
- 编程:C#调用Python模块
当下,C#与Python都是比较热门的计算机编程语言,他们各有优缺点,如果能让他们互相配合工作,那是多么美好的事情,今天我来讲解一下如何利用C#来调用Python. 如果让C#支持调用Python模块 ...
- 关于初学者上传文件到github的方法
转:http://blog.csdn.net/steven6977/article/details/10567719 说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传 ...
- Web Service-- 使用 JDK 发布 WS
Web Service,即“Web 服务”,简写为 WS,从字面上理解,它其实就是“基于 Web 的服务”.而服务却是双方的,有服务需求方,就有服务提供方.服务提供方对外发布服务,服务需求方调用服务提 ...
- StretchDIBits使用方法
转自:http://blog.csdn.net/giantchen547792075/article/details/6996011 StretchDIBits 函数把DIB.JPEG.PNG图像中一 ...
- App版本更新时对SQLite数据库升级或者降级遇到的问题
SQLite是Android内置的一个很小的关系型数据库.SQLiteOpenHelper是一个用来辅助管理数据库创建和版本升级问题的抽象类.我们可以继承这个抽象类,实现它的一些方法来对数据库进行自定 ...