⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 多点温度检测系统
💻 C
字号:
 #include <reg52.h>
 #include <INTRINS.H>
 #include "i2c.h"
 
 void I2CSomeNOP(void)
 {
 	_nop_();_nop_();_nop_();
 	_nop_();_nop_();_nop_();
 }

 void I2CStart(void)
 {
 EA=0;
 I2CSDA=1; I2CSCL=1; I2CSomeNOP();//INI
 I2CSDA=0; I2CSomeNOP(); //START
 I2CSCL=0;
 }

 void I2CStop(void)
 {
 I2CSCL=0; I2CSDA=0; I2CSomeNOP(); //INI
 I2CSCL=1; I2CSomeNOP(); I2CSDA=1; //STOP
 EA=1;
 }

 bit I2CWaitAck(void)
 {
 unsigned char errtime=255;//因故障接收方无ACK,超时值为255。
 I2CSDA=1;I2CSomeNOP();
 I2CSCL=1;I2CSomeNOP();
 while(I2CSDA) {errtime--; if (!errtime) {I2CStop();return false;}}
 I2CSCL=0;
 return true;
 }

 void I2CSendAck(void)
 {
 I2CSDA=0; I2CSomeNOP();
 I2CSCL=1; I2CSomeNOP();
 I2CSCL=0;
 }

 void I2CSendNotAck(void)
 {
 I2CSDA=1; I2CSomeNOP();
 I2CSCL=1; I2CSomeNOP();
 I2CSCL=0;
 }

 void I2CSendByte(unsigned char ch)
 {
 unsigned char i=8;
 while (i--)
	 {
	 I2CSCL=0;_nop_();
	 I2CSDA=(bit)(ch&0x80); ch<<=1; I2CSomeNOP();
	 I2CSCL=1; I2CSomeNOP();
	 }
 I2CSCL=0;
 }

 unsigned char I2CReceiveByte(void)
 {
 unsigned char i=8;
 unsigned char ddata=0;
 I2CSDA=1;
 while (i--)
	 {
	 ddata<<=1;
	 I2CSCL=0;I2CSomeNOP();
	 I2CSCL=1;I2CSomeNOP();
	 ddata|=I2CSDA;
	 }
 I2CSCL=0;
 return ddata;
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -