单片机模拟I2C读写E2PROM

发布者:太白山人最新更新时间:2016-03-28 来源: eefocus关键字:单片机  模拟I2C  读写E2PROM 手机看文章 扫描二维码
随时随地手机看文章
单片机模拟I2C读写E2PROM

//Name: I2C standard program

//Author: Ares
//Date:    2005.11.4

#i nclude
#i nclude

sbit SDA=P2^5;
sbit SCL=P1^0;

#define uchar unsigned char
#define uint unsigned int
#define byte unsigned char

void delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}


void delayms (uint x)
{
byte j;
while(x--){
     for(j=0;j<125;j++){;}
      }
}

void I2C_Start()                      //I2C START
{
SDA=1;
_nop_();
SCL=1;
delay();
   SDA=0;
   delay();
SCL=0;
_nop_();
}

void I2C_Stop()             //I2C STOP
{
SDA=0;
_nop_();
SCL=1;
delay();
SDA=1;
delay();
}

bit I2C_ReceiveAck()
{
bit ck;
SDA=1;                  //THE HOST RELEASE THE BUS
_nop_();
_nop_();
SCL=1;          
_nop_();
_nop_();
ck=SDA;
_nop_();
_nop_();
SCL=0;
_nop_();
return(ck);
}


void I2C_SendAck()

{
SDA=0;
_nop_();
_nop_();
SCL=1;
delay();          //remain
SCL=0;
_nop_();
_nop_();
}

void I2C_SendNoAck()

{
SDA=1;
_nop_();
_nop_();
SCL=1;
delay();   //remain
SCL=0;
_nop_();
_nop_();
}

void I2C_SendByte(byte SData)
{uchar i;
for(i=0;i<8;i++)
{ SDA=(bit)(SData&0x80);
   SData=SData<<1;
   SCL=1;
   delay();
   SCL=0;
}
}

byte I2C_ReceiveByte()
{uchar i;
byte RData;
RData=0;

for(i=0;i<8;i++)
{ SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
RData=RData<<1;
RData=RData|SDA;
_nop_();
_nop_();
SCL=0;
}
return(RData);
}

void I2C_SendToSubAddress(byte SlaveAddress,byte SubAddress,byte *pSData,uchar N)
{uchar i;
I2C_Start();
I2C_SendByte(SlaveAddress);    //send slave address(write device)
I2C_ReceiveAck();
I2C_SendByte(SubAddress);    //send sub address
I2C_ReceiveAck();

for(i=0;i {
I2C_SendByte(pSData[i]);
I2C_ReceiveAck();
}
I2C_Stop();
}

void I2C_ReceiveFromSubAddress(byte SlaveAddress,byte SubAddress,byte *pRData,uchar N)
{uchar i;
I2C_Start();
I2C_SendByte(SlaveAddress);    //send slave address(write device)
I2C_ReceiveAck();
I2C_SendByte(SubAddress);    //send sub address
I2C_ReceiveAck();
I2C_Start();                              //I2C Start Again!
I2C_SendByte(SlaveAddress+1);    //send slave address(read device)
I2C_ReceiveAck();
for(i=0;i {
   pRData[i]=I2C_ReceiveByte();
   I2C_SendAck();
}
pRData[i]=I2C_ReceiveByte();
I2C_SendNoAck();
I2C_Stop();
}

main()
{byte *pData;
byte a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
pData=a;
I2C_ReceiveFromSubAddress(0xA0,0x20,pData,16);
I2C_SendToSubAddress(0xA0,0,pData,16);
}

关键字:单片机  模拟I2C  读写E2PROM 引用地址:单片机模拟I2C读写E2PROM

上一篇:AVR相比51系列单片机的优势特征
下一篇:单片机c语言中code的用法

推荐阅读最新更新时间:2024-03-16 14:48

PIC单片机引脚中断程序的设计技巧
1 简 述 所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7"RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假
[单片机]
AVR单片机中断实现
中断嵌套 对于中断嵌套的处理,不同的单片机处理的方式是不同的,应根据所使用单片机的特点正确实现中断嵌套的处理。 按照通常的规则,当MCU正在响应一个中断B的过程中,又产生一个其它的中断A申请时,如果这个新产生中断A的优先级比正在响应的中断B优先级高的话,就应该暂停当前的中断B的处理,转入响应高优先级的中断A,待高优先级中断A处理完成后,再返回原来的中断B的处理过程。如果新产生中断A的优先级比正在处理中断B的优先级低(或相同),则应在处理完当前的中断B后,再响应那个后产生的中断A申请(如果中断A条件还成立的话)。 一些单片机(如8051结构)的硬件能够自动实现中断嵌套的处理,既单片机内部的硬件电路能够识别中断的优先级,并根据优先
[单片机]
32位单片机知识讲解:Microchip PIC32系列(三)
工作原理   中断控制器负责对来自一些片上外设的中断请求(IRQ)进行预处理,并按相应顺序将它们送入   处理器。   图8-2 给出了PIC32MX 中的中断处理的图示。中断控制器设计为最多可从处理器内核、能够产生中断的片上外设和5 个外部输入处接收96 个IRQ。所有IRQ 都在SYSCLK 下降沿进行采样,并锁存到关联的IFSx 寄存器中。待处理的IRQ 由IFSx 寄存器中的标志位等于1 来指示。如果中断允许(IECx)寄存器中的相应位清零,则待处理的IRQ 不会得到进一步处理。IECx 位用于对中断标志进行门控。如果允许中断,则所有IRQ 将编码为5 位宽的向量编号。5 位向量可产生编号为0 至63 的唯
[模拟电子]
STC12系列单片机冷启动、热启动
冷启动——是指在断电状态下重新上电。冷启动,是在下载程序开始时,为了是单片检测有无下载信号。若有则下载;若无则执行原来的程序。 热启动——是指已经处于上电状态,给复位端加复位信号(还有其他类型的复位),程序重新运行。 怎样判断是冷启动、热启动? 可通过查询PCON寄存器中的POF位来判断,单片机上电冷启动后,POF位变为1,可由软件清0 实际判断流程图: 怎样才能产生冷启动复位、热启动复位? (更详细信息请参考STC12系列单片机数据手册)
[单片机]
STC12系列<font color='red'>单片机</font>冷启动、热启动
STM8单片机+RC522电路原理图+读写卡源代码
基于stm8的ds1302模块千万别把数据写在第3个区,不然卡就锁住了,只能写在第2个区 电路原理图如下: stm8单片机源码: /* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/ #include stm8s.h #include stm8s_clk.h #include intrinsics.h #include stm8s
[单片机]
STM8<font color='red'>单片机</font>+RC522电路原理图+<font color='red'>读写</font>卡源代码
MSP430单片机查错
1、设置IAR软件Tab键缩进字符个数 方法:Tools-Options-Editor-Tab Size,按习惯改后面数字. 2、Error : Undefined external LcdInit referred in main( E:\MSP430 \UDP\Debug\Obj\main.r43 ) 原因:工程中有多个.c文件,但不在工程中. 解决:把.c文件加到工程里。 3、Error : Entry ReadingData in module DS1302 ( E:\MSP430 \Module\DS1302\Debug\Obj\DS1302.r43 ) redefined in modul
[单片机]
以C8051F020单片机为控制核心的人机交互系统设计
在现代各类仪器的开发中,人机交互功能正起着无可替代的作用。人机交互界面友好的仪器将更容易操作和使用,从而提高工作效率。液晶显示器(LCD)具有功耗低、价格低、寿命长、接口控制方便等特点,在科研与设计领域正发挥着越来越大的作用。FPGA 作为单片机外设的接口芯片,可以大大简化接口电路,通过对FPGA 进行编程,可以实现常用的译码、地址选通等功能。 本文以C8051F020 单片机与FPGA 互连系统为控制核心,以液晶显示控制器T6963C 为例,结合行扫描键盘,简述了一种人机交互功能的设计。 1 系统设计方案: FPGA 可在很大程度上扩展单片机的资源,然而人机交互功能仍应尽量减少对单片机及FPGA 的资源消耗, 以便将更多
[单片机]
以C8051F020<font color='red'>单片机</font>为控制核心的人机交互系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved