📄 i2c.c
字号:
#include "mqb.h"extern BYTE WaitWriteTime;bit ClockI2C(void){ bit sample; MEMCLK=1; _nop_(); sample=MEMDATA; MEMCLK=0; _nop_(); return(sample);}void AnswerI2C(void){ MEMDATA=0; ClockI2C(); MEMDATA=1;}void NoAnswerI2C(void){ MEMDATA=1; ClockI2C();}void InitI2C(void){ MEMDATA=0; MEMDATA=0;_nop_(); MEMCLK=1; _nop_(); MEMDATA=1;_nop_();}void StartI2C(void){ MEMCLK=1; _nop_(); MEMDATA=0;_nop_(); MEMCLK=0; _nop_();}void StopI2C(void){ MEMDATA=0;_nop_(); MEMCLK=1; _nop_(); MEMDATA=1;_nop_();}BYTE ReadI2C(void){ BYTE ch=0; BYTE i=0x80; while (i) { if (ClockI2C()) ch=ch|i; i=i>>1; } return ch;}bit WriteI2C(BYTE ch){ BYTE i=8; while (i--) { MEMDATA=ch&0x80; ClockI2C(); ch=ch<<1; } MEMDATA=1; return 0;}BYTE RdI2CByte(BYTE addr){BYTE ch; StartI2C(); if (!WriteI2C(0xa0)) {StopI2C();return 0xff;} if (!WriteI2C(addr)) {StopI2C();return 0xff;} StopI2C(); StartI2C(); if (!WriteI2C(0xa1)) {StopI2C();return 0xff;} ch=ReadI2C(); NoAnswerI2C(); return ch;}bit WrI2CByte(BYTE addr,BYTE ch){ while (WaitWriteTime) { } StartI2C(); if (WriteI2C(0xa0)) { WriteI2C(addr); WriteI2C(ch); StopI2C(); WaitWriteTime=1; return TRUE; } StopI2C(); return FALSE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -