最近写程序用的模拟iic,更改控制某寄存器值较方便,记录一下。
#include "I2C.h"
IntraII2C xdata IntraI2C;
/*
SCL 400 KHz
ReStart min 0.6us
SCL_Low min 1.3us
SCL_High min 0.6us
*/
void DelayI2C(void)
{
unsigned short i = 3; // scl-low 8(2us) -- 3(0.9us)
while(--i>0);
}
/************************
* send start
* in:SCL-H out:SCL-L;SDA-H(SDA release)
************************/
void I2C_Start(void)
{
DelayI2C();
SETH_SCL;
DelayI2C();
SETH_SDA;
DelayI2C();
SETL_SDA;
DelayI2C();
SETL_SCL;
DelayI2C();
SETH_SDA;
DelayI2C();
}
/**********************
* send restart
* in:clk-l out:scl-l;sda-h
***********************/
void I2C_ReStart(void)
{
DelayI2C();
SETH_SDA;
DelayI2C();
SETH_SCL;
DelayI2C();
SETL_SDA;
DelayI2C();
SETL_SCL;
DelayI2C();
SETH_SDA;
DelayI2C();
}
/**********************
* send stop
* in:clk-l out:scl-h;sda-h
***********************/
void I2C_Stop(void)
{
DelayI2C();
SETL_SDA;
DelayI2C();
SETH_SCL;
DelayI2C();
SETH_SDA;
DelayI2C();