亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c1.c

?? 用PIC16F73編寫的SMBUS通信測試程序
?? C
字號:
#include	<pic.h>
#include	"delay.h"
#include 	"i2c.h"

/*
 *	I2C functions for HI-TECH PIC C - master mode only
 */

/*
 * 	TIMING - see Philips document: THE I2C-BUS SPECIFICATION
 */


/*
 * 	Send stop condition
 * 	  - data low-high while clock high
 */
#bits flag

void
i2c_Stop(void)
{
	/* don't assume SCL is high on entry */


	flag.1=0;
        SDA_LOW();                      /* ensure data is low first */
        SCL_HIGH();

	DelayUs(I2C_TM_DATA_SU);

	SCL_DIR = I2C_INPUT;		/* float clock high */
	DelayUs(I2C_TM_STOP_SU);
        SDA_HIGH();                     /* the low->high data transistion */
	DelayUs(I2C_TM_BUS_FREE);	/* bus free time before next start */
        SDA_DIR = I2C_INPUT;            /* float data high */

	return;
}

/*
 * 	Send (re)start condition
 * 	  - ensure data is high then issue a start condition
 * 	  - see also i2c_Start() macro
 */

void
i2c_Restart(void)
{
        SCL_LOW();                      /* ensure clock is low */
        SDA_HIGH();                     /* ensure data is high */

	DelayUs(I2C_TM_DATA_SU);

	SCL_DIR = I2C_INPUT;		/* clock pulse high */
	DelayUs(I2C_TM_SCL_HIGH);

        SDA_LOW();                      /* the high->low transition */
        DelayUs(I2C_TM_START_HD);
	return;
}

/*
 * 	Send a byte to the slave
 * 	  - returns true on error
 */

unsigned char
i2c_SendByte(unsigned char byte)
{
	signed char i;

	for(i=7; i>=0; i--)
	{
                SCL_LOW();                      /* drive clock low */
						/* data hold time = 0, send data now */
                SDA_DIR = ((byte>>i)&0x01);
                if ((byte>>i)&0x01) {           /* bit to send */
                    SDA_HIGH();
                }
                else {
                    SDA_LOW();
                }
		DelayUs(I2C_TM_DATA_SU);
		SCL_DIR = I2C_INPUT;		/* float clock high */

		if(i2c_WaitForSCL())		/* wait for clock release */
			return TRUE;		/* bus error */

		DelayUs(I2C_TM_SCL_HIGH);	/* clock high time */
	}


	return FALSE;
}

/*
 * 	send an address and data direction to the slave
 * 	  - 7-bit address (lsb ignored)
 * 	  - direction (FALSE = write )
 */

unsigned char
i2c_SendAddress(unsigned char address, unsigned char rw)
{
        return i2c_SendByte(address | (rw?1:0));
}

/*
 * 	Check for an acknowledge
 * 	  - returns ack or ~ack, or ERROR if a bus error
 */

signed char
i2c_ReadAcknowledge(void)
{
	unsigned char ack;

        SCL_LOW();                              /* make clock is low */
	SDA_DIR = I2C_INPUT;			/* disable data line - listen for ack */
	DelayUs(I2C_TM_SCL_TO_DATA);		/* SCL low to data out valid */
	SCL_DIR = I2C_INPUT;			/* float clock high */
	DelayUs(I2C_TM_DATA_SU);
	ack = SDA;				/* read the acknowledge */

	/* wait for slave to release clock line after processing byte */
	if(i2c_WaitForSCL())
		return I2C_ERROR;
	return ack;
}

/*
 * 	Read a byte from the slave
 * 	  - returns the byte, or I2C_ERROR if a bus error
 */

int
i2c_ReadByte(void)
{
	unsigned char i;
	unsigned char byte = 0;

	for(i=0; i<8; i++)
	{
                SCL_LOW();                      /* drive clock low */
		DelayUs(I2C_TM_SCL_LOW);	/* min clock low  period */
		SDA_DIR = I2C_INPUT;		/* release data line */

		SCL_DIR = I2C_INPUT;		/* float clock high */
		if(i2c_WaitForSCL())
			return I2C_ERROR;
		DelayUs(I2C_TM_SCL_HIGH);
		byte = byte << 1;		/* read the next bit */
		byte |= SDA;
	}
	return (int)byte;
}

/*
 * 	Send an (~)acknowledge to the slave
 * 	  - status of I2C_LAST implies this is the last byte to be sent
 */

void
i2c_SendAcknowledge(unsigned char status)
{
        SCL_LOW();
        if ( status & 0x01) {
            SDA_LOW();                          /* drive line low -> more to come */
        }
        else { 
            SDA_HIGH();
	}
	DelayUs(I2C_TM_DATA_SU);
	SCL_DIR = I2C_INPUT;			/* float clock high */
	DelayUs(I2C_TM_SCL_HIGH);
	return;
}

/*
 * 	Send a byte to the slave and acknowledges the transfer
 * 	  - returns I2C_ERROR, ack or ~ack
 */

signed char
i2c_PutByte(unsigned char data)
{
	if(i2c_SendByte(data))
		return I2C_ERROR;
	return i2c_ReadAcknowledge();	/* returns ack, ~ack */
}

/*
 * 	Get a byte from the slave and acknowledges the transfer
 * 	  - returns true on I2C_ERROR or byte
 */

int
i2c_GetByte(unsigned char more)
{
	int byte;

	if((byte = i2c_ReadByte()) == I2C_ERROR)
		return I2C_ERROR;

	i2c_SendAcknowledge(more);

	return byte;
}

/*
 * 	Send an array of bytes to the slave and acknowledges the transfer
 * 	  - returns number of bytes not successfully transmitted
 */

int
i2c_PutString(const unsigned char *str, unsigned char length)
{
	signed char error;

	while(length)
	{
		if((error = i2c_PutByte(*str)) == I2C_ERROR)
			return -(int)length;		/* bus error */
		else
			if(error)
				return (int)length;	/* non acknowledge */
		str++;
		length--;
	}

	return FALSE;					/* everything OK */
}

/*
 * 	Reads number bytes from the slave, stores them at str and acknowledges the transfer
 * 	  - returns number of bytes not successfully read in
 */

unsigned char
i2c_GetString(unsigned char *str, unsigned char number)
{
	int byte;

	while(number)
	{
		if((byte = i2c_GetByte(number-1)) == I2C_ERROR)
			return number;			/* bus error */
		else
			*str = (unsigned char)byte;
		str++;
		number--;
	}

	return FALSE;					/* everything OK */
}

/*
 * 	Opens communication with a device at address. mode
 * 	indicates I2C_READ or I2C_WRITE.
 * 	  - returns TRUE if address is not acknowledged
 */

unsigned char
i2c_Open(unsigned char address, unsigned char mode)
{
	i2c_Start();
	i2c_SendAddress(address, mode);
        if(i2c_ReadAcknowledge()) 
		return TRUE;

	return FALSE;
}

/*
 * 	wait for the clock line to be released by slow slaves
 * 	  - returns TRUE if SCL was not released after the
 * 	    time out period.
 * 	  - returns FALSE if and when SCL released
 */

unsigned char
i2c_WaitForSCL(void)
{
	/* SCL_DIR should be input here */

	if(!SCL)
	{
		DelayUs(I2C_TM_SCL_TMO);
		/* if the clock is still low -> bus error */
		if(!SCL)
			return TRUE;
	}
	return FALSE;
}
void
i2c_Free()
{
	unsigned char ucI;

	SDA_DIR=I2C_INPUT;
	for(ucI=0;ucI!=9;ucI++)
	{
                SCL_HIGH();
		DelayUs(5);
                SCL_LOW();
		DelayUs(5);
	}
}

unsigned char i2c_read(unsigned char ucAdr)
{
	unsigned char ucDat;

	if (i2c_ReadFrom(ucAdr)==0)
	{
		ucDat=i2c_GetByte(I2C_MORE);
		i2c_Stop();

	}

	return(ucDat);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本免费新一区视频| 欧美日韩免费电影| 国产精品一区在线| 国产在线麻豆精品观看| 麻豆freexxxx性91精品| 日本欧美大码aⅴ在线播放| 午夜精品一区二区三区电影天堂| 亚洲一区视频在线观看视频| 夜夜嗨av一区二区三区| 亚洲高清视频的网址| 丝袜a∨在线一区二区三区不卡| 亚洲国产精品久久不卡毛片| 日韩精品一卡二卡三卡四卡无卡| 日日骚欧美日韩| 麻豆91在线播放免费| 国产一区在线观看麻豆| 成人午夜视频免费看| 99视频超级精品| 91久久精品一区二区二区| 欧美性猛交xxxx乱大交退制版| 欧美性感一区二区三区| 日韩视频免费观看高清完整版在线观看| 欧美伦理电影网| 欧美电影精品一区二区| 久久精品亚洲一区二区三区浴池 | 久久五月婷婷丁香社区| 国产日本亚洲高清| 亚洲麻豆国产自偷在线| 五月婷婷久久丁香| 国内成+人亚洲+欧美+综合在线| 国产精品一线二线三线| 91美女片黄在线| 欧美一级二级在线观看| 国产欧美一区二区三区鸳鸯浴| 自拍偷拍国产精品| 日本强好片久久久久久aaa| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产成人免费在线| 在线精品视频小说1| 日韩一区二区三区电影| 日本一区二区三级电影在线观看| 一区二区在线观看免费视频播放| 日韩综合一区二区| 成人一道本在线| 欧美日韩一区精品| 国产欧美一区二区精品忘忧草| 亚洲男人电影天堂| 理论片日本一区| 色综合天天综合狠狠| 日韩欧美在线123| 亚洲天堂2014| 久久aⅴ国产欧美74aaa| 色婷婷香蕉在线一区二区| 欧美变态凌虐bdsm| 亚洲影院在线观看| 国产69精品久久久久毛片| 欧美日韩亚洲综合| 国产精品毛片久久久久久| 亚洲午夜免费视频| 久久综合九色综合久久久精品综合| 中文字幕亚洲一区二区av在线| 三级亚洲高清视频| 91免费视频观看| 久久久天堂av| 免费视频最近日韩| 在线观看日韩毛片| 国产精品久久久久久久久搜平片| 奇米影视在线99精品| 欧美在线视频日韩| 国产精品午夜春色av| 精品伊人久久久久7777人| 欧美色爱综合网| 中文字幕亚洲一区二区av在线 | 麻豆91免费观看| 在线观看国产91| 国产精品久久久久久久岛一牛影视| 久久不见久久见免费视频7| 欧美三级一区二区| 亚洲欧美色一区| 丁香激情综合国产| 久久久九九九九| 美腿丝袜在线亚洲一区| 欧美精品在线视频| 亚洲综合成人在线| 色综合天天狠狠| 国产精品婷婷午夜在线观看| 国产一区二区三区不卡在线观看 | 成人av综合在线| 2021中文字幕一区亚洲| 日韩不卡一区二区三区| 欧美日韩免费在线视频| 亚洲精选一二三| 91同城在线观看| 国产精品久久久久久久久免费桃花| 国产盗摄女厕一区二区三区| 精品国产一区二区三区av性色| 日本不卡一二三区黄网| 欧美人成免费网站| 五月天一区二区| 欧美日韩精品电影| 五月婷婷欧美视频| 制服丝袜亚洲网站| 日本va欧美va瓶| 制服视频三区第一页精品| 欧美综合一区二区| 一区二区三区四区中文字幕| 日本高清成人免费播放| 亚洲另类春色国产| 欧美日韩在线播放| 日韩av一级电影| 精品理论电影在线观看 | 欧美专区亚洲专区| 亚洲制服欧美中文字幕中文字幕| 在线视频国内自拍亚洲视频| 一区二区三区.www| 欧美日本精品一区二区三区| 三级在线观看一区二区| 日韩欧美一二三| 国产一区二区日韩精品| 国产欧美综合在线观看第十页| 成人精品小蝌蚪| 中文字幕日韩av资源站| 91久久奴性调教| 免费日本视频一区| 欧美国产精品一区二区| 99麻豆久久久国产精品免费| 久久超碰97中文字幕| 久久久久久亚洲综合影院红桃| 国产精品一区二区你懂的| 国产精品免费视频网站| 色狠狠一区二区| 日韩av在线发布| 久久尤物电影视频在线观看| jiyouzz国产精品久久| 日韩欧美色综合| 欧美欧美欧美欧美首页| 日韩欧美在线影院| 国产午夜一区二区三区| 亚洲图片你懂的| 欧美精品久久一区二区三区| 色88888久久久久久影院野外| 不卡免费追剧大全电视剧网站| 99久久er热在这里只有精品66| 91浏览器在线视频| 欧美性猛片xxxx免费看久爱| 91精品国产色综合久久| 国产三级一区二区| 亚洲视频你懂的| 丝袜亚洲另类丝袜在线| 国产中文字幕精品| 色综合天天在线| 欧美一区二区在线看| 国产日韩欧美高清| 亚洲综合免费观看高清完整版在线 | 亚洲色欲色欲www在线观看| 亚洲444eee在线观看| 精品在线播放免费| 色综合一个色综合亚洲| 日韩亚洲欧美成人一区| 中文在线免费一区三区高中清不卡| 一区二区三区视频在线看| 美女网站视频久久| 色综合久久综合| 欧美tickling网站挠脚心| 亚洲免费毛片网站| 极品少妇xxxx精品少妇偷拍| 一本到一区二区三区| 精品sm在线观看| 午夜视频久久久久久| 国产夫妻精品视频| 欧美一区二区三区在线观看| 国产精品国产精品国产专区不蜜 | av在线播放成人| 欧美一卡二卡三卡四卡| 亚洲色欲色欲www| 久久精品国产一区二区三| 一本色道**综合亚洲精品蜜桃冫| 日韩色在线观看| 亚洲成人免费av| 91在线播放网址| 久久久99久久精品欧美| 日韩av电影一区| 欧美影院午夜播放| 中文字幕在线视频一区| 国产综合色产在线精品| 6080午夜不卡| 亚洲高清免费视频| 色综合一区二区| 一区二区中文视频| 国产黄人亚洲片| 精品乱人伦小说| 老司机免费视频一区二区三区| 欧美美女网站色| 亚洲第一综合色| 欧美四级电影在线观看| 亚洲精品伦理在线| 一本色道亚洲精品aⅴ| 中文字幕亚洲视频| 99在线视频精品| 亚洲日本护士毛茸茸|