当前位置:首页 > 单片机 > 单片机
[导读] #ifndef __AT24C02_H__ #define __AT24C02_H__ #include"stm32f10x.h" void iICinit(void); void iicwrite(u8 add,u8 Achar); u8 iicread(u8 add); #endif #include"stm32f10x.h" #include"a

#ifndef __AT24C02_H__

#define __AT24C02_H__

#include"stm32f10x.h"

void iICinit(void);

void iicwrite(u8 add,u8 Achar);

u8 iicread(u8 add);

#endif

#include"stm32f10x.h"

#include"at24c02.h"

void iicstart(void);

void iicstop(void);

void ack(void);

void iicwritebyte(u8 a);

u8 iicreadbyte(void);

void iicwrite(u8 add,u8 Achar);

u8 iicread(u8 add);

void iicinit(void);

/////////////////////////////

void delay5us(void)//ums

{

unsigned short i, j;

unsigned short time;

time=5;

for(; time > 0; time--){

for(j = 0; j < 5; j++){

for(i = 0; i < 1; i++);

}

}

}

void delayms(unsigned short time)//nms

{

unsigned short i, j;

for(; time > 0; time--){

for(j = 0; j < 10; j++){

for(i = 0; i < 1004; i++);

}

}

}

void iicinit(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphCLOCkCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_PIN= GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void iicstart(void)

{

GPIO_SetBits(GPIOB,GPIO_Pin_7); //sda=1;

delay5us();

GPIO_SetBits(GPIOB,GPIO_Pin_6); //scl=1;

delay5us();

GPIO_ResetBits(GPIOB,GPIO_Pin_7); //sda=0;

delay5us();

}

void iicstop(void)

{

GPIO_ResetBits(GPIOB,GPIO_Pin_7); //sda=0;

delay5us();

GPIO_SetBits(GPIOB,GPIO_Pin_6); //scl=1;

delay5us();

GPIO_SetBits(GPIOB,GPIO_Pin_7); //sda=1;

delay5us();

}

void ack(void)

{

u16 i;

GPIO_SetBits(GPIOB,GPIO_Pin_6);//scl=1;

delay5us();

while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)&&(i<0x2b0)) {i++;}

GPIO_ResetBits(GPIOB,GPIO_Pin_6);//scl=0;

delay5us();

}

void iicwritebyte(u8 a)

{

u16 i;

GPIO_ResetBits(GPIOB,GPIO_Pin_6); //scl=0;

delay5us();

for(i=0;i<8;i++)

{

if(a&0x80)

GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

else

GPIO_ResetBits(GPIOB,GPIO_Pin_7);;

a=a<<1;

GPIO_SetBits(GPIOB,GPIO_Pin_6);//scl=1;

delay5us();

GPIO_ResetBits(GPIOB,GPIO_Pin_6);//scl=0;

delay5us();

}

GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

delay5us();

}

u8 iicreadbyte()

{

u8 i,temp;

temp=0;

GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

delay5us();

GPIO_ResetBits(GPIOB,GPIO_Pin_6); //scl=0;

delay5us();

for(i=0;i<8;i++)

{

GPIO_SetBits(GPIOB,GPIO_Pin_6); //scl=1;

delay5us();

delay5us();

temp=(temp<<1)|GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);

delay5us();

GPIO_ResetBits(GPIOB,GPIO_Pin_6); //scl=0;

delay5us();

}

GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

delay5us();

GPIO_ResetBits(GPIOB,GPIO_Pin_6);//scl=0;

delay5us();

return temp;

}

void iicwrite(u8 add,u8 Achar)

{

iicstart();

iicwritebyte(0xa0);

ack();

iicwritebyte(add);

ack();

iicwritebyte(Achar);

ack();

iicstop();

delayms(20);

}

u8 iicread(u8 add)

{

u8 temp;

iicstart();

iicwritebyte(0xa0);

ack();

iicwritebyte(add);

ack();

iicstart();

iicwritebyte(0xa1);

ack();

temp=iicreadbyte();

ack();

iicstop();

return temp;

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在这篇文章中,小编将对PLC的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: PLC 模块化 程序

对程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个予盾的统一。一般是优化了代码的尺寸,就会带来执行时间的增加;如果优化了程序的执行速度,通常会带来代码增加的副作用。很难鱼与熊掌兼得,只能在...

关键字: 单片机 程序

一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。要编写高性能的程序,必须选择合适的算法和数据结构。

关键字: CPU 程序 缓存

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。

关键字: 单片机 仿真器 程序

步进电动机是将电脉冲激励信号转换成相应的角位移或线位移的离散值控制电动机,这种电动机每当输入一个电脉冲就动一步,所以又称脉冲电动机。

关键字: 步进电机 正反转 程序

KeilμVision4是Keil软件公司为8051系列微控制器及其兼容产品设计的集成式软件开发环境。μVision4集成了C51编译器和A51汇编器,其界面类似于Microsoft VS,支持C语言和汇编语言程序的编写...

关键字: 程序 编译 链接

双方各执一词,谁也不退让,吴雄昂的身份成为薛定谔的猫:在Arm公司眼中,他已经被罢免一切职位;在安谋中国声明里,吴仍然一切照常。这种叠加态或许还会持续一段时间,但叠加态应该很快就会塌缩成一个确定结果。同样,安谋中国董事会...

关键字: ARM 中国董事会 程序

除了指令空间,自定义指令对应的程序出入口也有严格限制。自定义指令在使用过程中出现任何错误时,Arm的工具链都能及时对其进行识别、提取,并且进行相应的控制。目前也已经有第三方编译器,可以识别自定义指令集可能会出现的错误。专...

关键字: 指令空间 程序 ARM

如果说一众美国科技公司遵循特朗普命令断供华为,还算某种程度上维护所谓程序正义不得已而为之;那么各路本应对政治保持中立的国际技术标准组织,先后宣布剔除华为成员资格,绝对算助纣为虐;而联邦快递将华为委托寄送目的地为中国的快递...

关键字: 快递 华为 程序

在软件开发过程中,我们希望软件可以运行无误。但是常常事与愿违,程序经常跑飞,或者卡死。原因有很多,有可能是因为软件系统设计的原因,或者外部传感器的失效,再或者是程序的Bug等。为了防止程序在出现问题之后,可以顺利复位和重...

关键字: 软件 程序 传感器
关闭