#include "reg52.h"
#define SDA P1^0
#define SCL P1^1
//延时函数,根据MCU时钟不同调整到1ms void delay_ms(u16 x) { u8 i; for(;x>0;x--) { for(i=217;i>0;i--); } } static void set_sda(u8 lev){ if(lev) SDA = 1; else SDA = 0; } static void set_scl(u8 lev){ if(lev) SCL = 1; else SCL = 0; } static void sda_input_mode(void){// TODO
} static void SomeNOP(void) { u16 i=14; while(i--); } /*-------------------------------------------------------------------------------- I2C start ---------------------------------------------------------------------------------*/ static void I2CStart(void) { set_sda(1); set_scl(1); SomeNOP();//INI set_sda(0); SomeNOP(); //START set_scl(0); } /*-------------------------------------------------------------------------------- I2C stop ---------------------------------------------------------------------------------*/ static void I2CStop(void) { set_sda(0); SomeNOP(); //INI set_scl(1); SomeNOP(); set_sda(1); //STOP } /*-------------------------------------------------------------------------------- check ACK ---------------------------------------------------------------------------------*/ static u8 WaitAck(void) { u8 errtime=255; //ACK timeout count set_sda(1); SomeNOP(); set_scl(1); SomeNOP(); sda_input_mode(); SomeNOP(); while(SDA) { errtime--; if(!errtime) { I2CStop(); return 1; } } set_scl(0); return 0; } /*-------------------------------------------------------------------------------- send no ACK ---------------------------------------------------------------------------------*/ static void SendNotAck(void) { set_scl(1); SomeNOP(); set_sda(1); SomeNOP(); set_scl(0); } /******************************************************** send ACK *********************************************************/ static void SendAck(void) { set_sda(0); SomeNOP(); set_scl(1); SomeNOP(); set_scl(0); SomeNOP(); set_sda(1); } /*-------------------------------------------------------------------------------- write byte ---------------------------------------------------------------------------------*/ static void I2CSendByte(u8 ch) { u8 i=8; while(i--) { set_scl(0); SomeNOP(); if(ch&0x80) set_sda(1); else set_sda(0); ch关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?