资源简介
本人亲自写的I2C读写24C256和24C02程序,程序直接可以,根据硬件修改下即可。
代码片段和文件信息
#include //包含文件
#include
#include
#include
#include“i2c.h“
#define Byte unsigned char//宏定义
#define uint unsigned int
#define uchar unsigned char
#define device_16bit_Waddress 0xa0//器件写数据地址24c256
#define device_16bit_Raddress 0xa1//器件读数据地址24c256
#define device_8bit_Waddress 0xa2 //定义PCF8563的写数据地址
#define device_8bit_Raddress 0xa3 //定义PCF8563的读数据地址
sbit SCL= P3^5;
sbit SDA =P3^4;
/*sbit SCL= P1^5;
sbit SDA =P1^6;*/
/*延时子程序大概10ms左右*/
void delay()
{
uint ij;
for(i=0;i<10;i++)
{
for(j=0;j<1000;j++)
{
;
}
}
}
/*开始I2C数据发送或接收*/
void Start_I2C()//在时钟线为高,数据线从高电平跳到低电平时,开始传送
{
SDA=1; //数据先
_nop_(); //延时一段时间
_nop_();
SCL=1; //时钟线为高等数据线下降才开始
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0; //数据线下降拉启动了
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
/*结束数据传送*/
void Stop_I2C()
{
SDA=0; //时钟线为高时数据线上升沿为结束信号
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
/*发送字节子程序入口参数为要发送的数据无返回变量分8位进行发送*/
void Sent_Byte(Byte Data)
{
Byte BitCount; //定义发送的位数
for(BitCount=0;BitCount<8;BitCount++)
{
_nop_();
_nop_();
if((Data< else SDA=0;
_nop_();
_nop_();
SCL=1; //置位SCL通知从器件开始接收数据SCL上升沿发数据
_nop_(); //SCL为1数据线电平不能变
_nop_();
_nop_();
_nop_();
SCL=0; //钳住总线,等下次接收
}
}
/*应答子程序无入口参数返回值是应答位*/
bit Ack_Check()
{
SDA=1; //先置时钟线为高第九位数据过来会强行把数据线拉低
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
F0=SDA; //将数据线上的该位保存到F0中
SCL=0;
if(F0==1)
return 1;//没有应答返回1否则返回0
else return 0;
}
/*接收字节子函数,先接收高位再接收低位无入口参数,返回值是一个无符号型的一个8位的数*/
Byte Rec_Byte()
{
Byte BitCount RecData=0;
for(BitCount=0;BitCount<8;BitCount++)
{
SDA=1; //数据线先给1的话如果从器件发0给主器件
_nop_(); //SDA会拉低那主器件接收到的为0否则不拉低接收到的为1
_nop_(); //这相当释放数据总线一样
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
F0=SDA; //用F0来保存当前数据线上的值
SCL=0;
if(F0)
{
RecData=RecData<<1;
RecData=RecData|0x01;
}
else RecData=RecData<<1;
}
return(RecData);
}
/*发送数据子函数,入口参数是16位的器件地址和要发送的数据,无返回值*/
Sent_Data16(uint addressByte Data)
{
bit ack_temp; //响应寄存位
uchar addr_Haddr_L;
addr_H=(uchar)(addre
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5471 2009-09-07 09:13 I2C读写24c02和24c56\DebugRel\i2c
文件 3074 2009-09-07 09:13 I2C读写24c02和24c56\DebugRel\i2c.hex
文件 81 2009-09-07 09:13 I2C读写24c02和24c56\DebugRel\i2c.lnp
文件 22862 2009-09-07 09:13 I2C读写24c02和24c56\DebugRel\i2c.M51
文件 5967 2009-09-07 09:13 I2C读写24c02和24c56\DebugRel\i2c.obj
文件 2432 2009-09-07 09:13 I2C读写24c02和24c56\DebugRel\Serial.obj
文件 7750 2009-09-07 09:13 I2C读写24c02和24c56\i2c.c
文件 373 2009-09-04 11:22 I2C读写24c02和24c56\i2c.h
文件 821 2009-09-07 09:23 I2C读写24c02和24c56\i2c.muo
文件 2428 2009-09-07 09:23 I2C读写24c02和24c56\i2c.xmp
文件 2096 2009-09-04 11:27 I2C读写24c02和24c56\Serial.c
文件 136 2009-09-04 11:06 I2C读写24c02和24c56\Serial.h
目录 0 2009-09-07 09:13 I2C读写24c02和24c56\DebugRel
目录 0 2009-09-04 11:14 I2C读写24c02和24c56
----------- --------- ---------- ----- ----
53491 14
- 上一篇:基于压缩感知的MIMO信道估计算法
- 下一篇:淘淘商城项目有源码
相关资源
- 第十届蓝桥杯省赛代码
- 用SST89系列单片机读取SD卡与TLC5620播放
- 基于51单片机矩阵键盘的实现含仿真原
- 用51单片机驱动DS1302时间模块+DS18B20温
- PIC单片机温度控制
- 普通单片机IO口模拟UART程序
- 51单片机与PS2鼠标C程序带滚轮识别,
- 飞思卡尔MC9S12单片机教程
- 流水灯Protues图和程序
- 单片机产生SPWM设计报告
- 78K0-Kd2系列单片机demo源码
- 组态王与51单片机ASCII通信
- 基于51单片机的两轮平衡车程序
- SiI9134配置完整程序,单片机上已测试
- 基于51单片机的RFID智能门禁系统源码
- 基于51单片机的电子密码锁源码+电路
- 51单片机超声波测距数码管显示
- 51单片机超声波测距1602LCD显示
- 51单片机+tlc5615+信号发生器正弦波 方
- 电能收集充电器 51单片机实现
- 51单片机超声波测距HC-SR04程序
- NRF905无线PC控制台操作界面及单片机程
- 51单片机小车巡线L298N驱动
- 基于51单片机的多路温湿度实时监测的
- -交通灯单片机.zip
- 单片机 万年历 proteus
- silicon 单片机 PWM 马达控制
- 基于STC89C52单片机的舵机测试程序
- MC9S12XDP512的CAN编程
- 51单片机实现的485通讯程序
评论
共有 条评论