非常实用的模拟I2C程序_第1页
非常实用的模拟I2C程序_第2页
非常实用的模拟I2C程序_第3页
非常实用的模拟I2C程序_第4页
非常实用的模拟I2C程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档/* File Name : SI2C.c* Author : zhang* Version : V1.0.0* Date : 2011.12.08*/* Inlcudes -*/#include SI2C.h#include delay.h/* defines -*/#define Slave_Address_W 0xa0#define Slave_Address_R 0xa1#define Byte_Address 0x00#define SDA_PORT GPIOE#define SDA_PIN GPIO_PIN_2#define SDA_HIGH() GPIO_WriteHigh(SDA_PORT,SDA_PIN)#define SDA_LOW() GPIO_WriteLow(SDA_PORT,SDA_PIN)#define SCL_PORT GPIOE#define SCL_PIN GPIO_PIN_1#define SCL_HIGH() GPIO_WriteHigh(SCL_PORT,SCL_PIN)#define SCL_LOW() GPIO_WriteLow(SCL_PORT,SCL_PIN)#define SDA_READ() GPIO_ReadInputPin(SDA_PORT,SDA_PIN)/* function -*/* Function Name : SI2C_GPIOConfigration* Description : 初始化模拟I2C通用端口 * Input : None* Output : None* Return : None*/ void SI2C_GPIOConfigration(void) GPIO_Init(SDA_PORT,SDA_PIN,GPIO_MODE_OUT_OD_LOW_FAST); /SDA开漏输出 GPIO_Init(SCL_PORT,SCL_PIN,GPIO_MODE_OUT_PP_LOW_FAST); /SCL推挽输出 /*I2C总线初始为高电平*/ SDA_HIGH(); SCL_HIGH(); /* Function Name : SI2C_Start* Description : I2C起始条件 * Input : None* Output : None* Return : None*/void SI2C_Start(void) SDA_HIGH(); SCL_HIGH(); /delay(10); / nop(); /起始条件建立时间大于4.7us /nop(); SDA_LOW(); /起始条件锁定时间大于4us / nop(); / nop(); SCL_LOW(); /钳住总线准备发数据/* Function Name : SI2C_Stop* Description : I2C结束条件 * Input : None* Output : None* Return : None*/void SI2C_Stop(void) SDA_LOW(); SCL_HIGH(); /发送总线时钟信号 / nop(); / nop(); /结束总线时间大于4us SDA_HIGH(); /结束总线 / nop(); / nop(); /* Function Name : SI2C_SendAck* Description : 主机发送ACK * Input : None* Output : None* Return : None*/void SI2C_SendAck(void) SDA_LOW(); SCL_HIGH(); /nop(); / nop(); SCL_LOW(); SDA_HIGH(); /* Function Name : SI2C_SendNAck* Description : 主机发送ACK * Input : None* Output : None* Return : None*/void SI2C_SendNAck(void) SDA_HIGH(); SCL_HIGH(); / nop(); / nop(); SCL_LOW(); SDA_LOW(); /* Function Name : SI2C_SendByte* Description : I2C发送一个字节 * Input : SendByte :要发送的字节* Output : None* Return : None*/void SI2C_SendByte(u8 SendByte) u8 i; for( i = 0 ; i 8 ; i +) (SendByte & 0x80) = 0x80) ? SDA_HIGH():SDA_LOW(); SCL_HIGH(); /nop(); /nop(); SCL_LOW(); SendByte = SendByte 1; /* Function Name : Test_Ack* Description : 应答位检测程序 * Input : None* Output : None* Return : FALSE or TRUE*/int Test_Ack(void) SDA_HIGH(); /*为输入做准备,确保从机ACK真正为低*/ SCL_HIGH(); / nop(); / nop(); if (SDA_READ() SCL_LOW(); SDA_LOW(); / nop(); / nop(); return FALSE; else SDA_LOW(); SCL_LOW(); / nop(); / nop(); return TRUE; /* Function Name : SI2C_ReadByte* Description : I2C读取一个字节 * Input : None* Output : None* Return : None*/u8 SI2C_ReadByte(void) u8 readbyte = 0; u8 i ; for( i = 0; i 8 ; i + ) readbyte = readbyte 1; SDA_HIGH(); SCL_HIGH(); / nop(); / nop(); if(SDA_READ() readbyte |= 0x01; SCL_LOW(); / nop(); / nop(); return readbyte; /* Function Name : SI2C_Write24c02* Description : SI2C_Write24c02 operation* Input : None* Output : None* Return : None*/ void SI2C_Write24c02(u8 data) SI2C_Start(); SI2C_SendByte(Slave_Address_W); Test_Ack(); SI2C_SendByte(Byte_Address); Test_Ack(); SI2C_SendByte(data); Test_Ack(); SI2C_Stop(); delay(1000); /* Function Name : I2C_Read24c02* Description : I2C_Read24c02 operation* Input : None* Output : None* Return : None*/ u8 SI2C_Read24c02(void) u8 con; SI2C_Start(); SI2C_SendByte(Slave_Address_W); Test_Ack(); SI2C_SendByt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论