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

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

?? i2c.h

?? iccavr的各模塊的函數庫
?? H
字號:
/*********************************************************************
	微 雪 電 子   WaveShare   http://www.waveShare.net            	
		                                                        
目    的:   建立I2C操作庫
	
目標系統:   基于AVR單片機
		                                                                
應用軟件:   ICCAVR
		                                                                
版    本:   Version 1.0                                                          
		                                                                
圓版時間:   2005-06-25
	
開發人員:   SEE

說    明:   若用于商業用途,請保留此段文字或注明代碼來源
	
	深 圳 市 微 雪 電 子 有 限 公 司 保 留 所 有 的 版 權     
*********************************************************************/

/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
版本更新記錄:

----------------------------------------------------------------------
入口參數說明:

----------------------------------------------------------------------
待定參數說明:

----------------------------------------------------------------------	
對外變量說明:

----------------------------------------------------------------------
對外函數說明:

----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/

#ifndef I2C_H
#define I2C_H

/* TWSR values (not bits) */
/* Master */
#define I2C_START			0x08
#define I2C_RESTART			0x10

/* Master Transmitter */
#define I2C_MT_SLA_ACK		0x18
#define I2C_MT_SLA_NACK		0x20
#define I2C_MT_DATA_ACK		0x28
#define I2C_MT_DATA_NACK	0x30
#define I2C_MT_ARB_LOST		0x38

/* Master Receiver */
#define I2C_MR_ARB_LOST		0x38
#define I2C_MR_SLA_ACK		0x40
#define I2C_MR_SLA_NACK		0x48
#define I2C_MR_DATA_ACK		0x50
#define I2C_MR_DATA_NACK	0x58

/* Slave Transmitter */
#define I2C_ST_SLA_ACK			0xA8
#define I2C_ST_ARB_LOST_SLA_ACK 0xB0
#define I2C_ST_DATA_ACK			0xB8
#define I2C_ST_DATA_NACK		0xC0
#define I2C_ST_LAST_DATA		0xC8

/* Slave Receiver */
#define I2C_SR_SLA_ACK				0x60
#define I2C_SR_ARB_LOST_SLA_ACK		0x68
#define I2C_SR_GCALL_ACK			0x70
#define I2C_SR_ARB_LOST_GCALL_ACK	0x78
#define I2C_SR_DATA_ACK				0x80
#define I2C_SR_DATA_NACK			0x88
#define I2C_SR_GCALL_DATA_ACK		0x90
#define I2C_SR_GCALL_DATA_NACK		0x98
#define I2C_SR_STOP					0xA0

/* Misc */
#define I2C_NO_INFO			0xF8
#define I2C_BUS_ERROR		0x00

/*
 * The lower 3 bits of TWSR are reserved on the ATmega163.
 * The 2 LSB carry the prescaler bits on the newer ATmegas.
 */
#define I2C_STATUS_MASK	(_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3))
#define I2C_STATUS		(TWSR & I2C_STATUS_MASK)

/*
 * R/~W bit in SLA+R/W address field.
 */
#define I2C_READ		1
#define I2C_WRITE		0

#define I2CStart()    	(TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
#define I2CStop()     	(TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
#define I2CWaitAck()	{while(!(TWCR&(1<<TWINT)));}
#define I2CChkAck() 	(TWSR&0xf8)					//check ack
#define I2CSendAck()	(TWCR|=(1<<TWEA))
#define I2CSendNoAck()	(TWCR&=~(1<<TWEA))
#define I2CSendByte(x)	{TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 
#define I2CRcvNckByte()	(TWCR=(1<<TWINT)|(1<<TWEN))
#define I2CRcvAckByte()	(TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))

/* For Program */
#define I2C_Stop()		I2CStop()
#define I2C_SendAck()	I2CSendAck()
#define I2C_SendNoAck() I2CSendNoAck()
#define I2C_WaitAck()	I2CWaitAck()

/* I2C Config */
#define I2C_ERR			0
#define I2C_CRR			1

/*--------------------------------------------------------------------
函數名稱:I2C Start
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_Start()					
{
	I2CStart();						
	I2CWaitAck();
	if( I2CChkAck()!=I2C_START ) 
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C ReStart
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_Restart()					
{
	I2CStart();						
	I2CWaitAck();
	if( I2CChkAck()!=I2C_RESTART ) 
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:發送 7位 器件寫地址: XXXX XXX0
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendWrDAdr(uint8 wrDAdr)	
{
	I2CSendByte(wrDAdr);			//設置 器件寫地址
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MT_SLA_ACK )  
		return I2C_ERR;
	return I2C_CRR;		
}
/*--------------------------------------------------------------------
函數名稱:發送 10位 器件寫地址: 1111 0XX0, XXXX XXXX
函數功能:
注意事項:
提示說明:兼容 發送 7位 器件寫地址: XXXX XXX0
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendWrDAdr_(uint16 wrDAdr)	
{
	if( wrDAdr&0xF000 == 0xF000 )	//判斷是否為 10位 器件地址
		if( I2C_SendWrDAdr( (uint8)wrDAdr>>8 )==I2C_ERR )	//設置 (高位)器件寫地址
			return I2C_ERR;
	if( I2C_SendWrDAdr( (uint8)wrDAdr )==I2C_ERR )	//設置 (低位)器件寫地址
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:發送 7位 器件讀地址: XXXX XXX1
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendRdDAdr(uint8 rdDAdr)	
{
	I2CSendByte(rdDAdr);			//設置 器件讀地址
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MR_SLA_ACK )  
		return I2C_ERR;
	return I2C_CRR;	
}
/*--------------------------------------------------------------------
函數名稱:發送 10位 器件讀地址: 1111 0XX0, XXXX XXXX
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendRdDAdr_(uint8 rdDAdr)	
{
	if( rdDAdr&0xF000 == 0xF000 )	//判斷是否為 10位 器件地址
		if( I2C_SendWrDAdr( (uint8)rdDAdr>>8 )==I2C_ERR )	//設置 (高位)器件讀地址
			return I2C_ERR;
	if( I2C_SendWrDAdr( (uint8)rdDAdr )==I2C_ERR )	//設置 (低位)器件讀地址
		return I2C_ERR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C發送數據
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_SendDat(uint8 configDat)	
{
	I2CSendByte(configDat);			
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MT_DATA_ACK ) 
		return I2C_ERR;
	return I2C_CRR;	
}
/*--------------------------------------------------------------------
函數名稱:I2C接收數據且不產生應答
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_RcvNAckDat(uint8 *pRdDat)	
{
	I2CRcvNckByte();
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MR_DATA_NACK )
		return I2C_ERR;
	*pRdDat=TWDR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C接收數據且產生應答
函數功能:
注意事項:
提示說明:
輸    入:
返    回:
--------------------------------------------------------------------*/
bool I2C_RcvAckDat(uint8 *pRdDat)	
{
	I2CRcvAckByte();					
	I2CWaitAck();
	if( I2CChkAck()!=I2C_MR_DATA_ACK )
		return I2C_ERR;
	*pRdDat=TWDR;
	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C寫器件,寫一個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 dat: data 數據
返    回:
--------------------------------------------------------------------*/
bool I2C_Write(uint16 wrDAdr,uint8 wordAdr,uint8 dat)
{
	if( I2C_Start()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(wordAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(dat)==I2C_ERR )
		return I2C_ERR;

	I2C_Stop();

	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C寫器件,寫N個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 *pWrDat: p->write data 寫入數據指針
		 num: number 寫入數據個數
返    回:
--------------------------------------------------------------------*/
//bool I2C_Write_(uint16 wrDAdr,uint8 wordAdr,
//				  uint8 *pWrDat,uint8 num)
//{
//
//} 
/*--------------------------------------------------------------------
函數名稱:I2C讀器件,讀一個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 rdDAdr: read device-address 讀器件地址
		 *pRdDat: p->read data 讀取數據指針
返    回:
--------------------------------------------------------------------*/
bool I2C_Read(uint16 wrDAdr,uint8 wordAdr,
			  uint8 rdDAdr,uint8 *pRdDat)
{
	if( I2C_Start()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(wordAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_Restart()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
		return I2C_ERR;

	I2C_Stop();

	return I2C_CRR;
}
/*--------------------------------------------------------------------
函數名稱:I2C讀器件,讀N個數據
函數功能:
注意事項:
提示說明:
輸    入:wrDAdr: write device-address 寫器件地址
		 wordAdr: word address 字地址
		 rdDAdr: read device-address 讀器件地址
		 *pRdDat: p->read data 讀取數據指針
		 num: number 讀取數據個數
返    回:
--------------------------------------------------------------------*/
bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
			   uint8 rdDAdr,uint8 *pRdDat,uint8 num)
{
 	uint8 i;
	
	if( I2C_Start()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendDat(wordAdr)==I2C_ERR )
		return I2C_ERR;

	if( I2C_Restart()==I2C_ERR )
		return I2C_ERR;

	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
		return I2C_ERR;

	for(i=0;i<num-1;i++)
		if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
			return I2C_ERR;
	
	if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
			return I2C_ERR;

	I2C_Stop();
	
	return I2C_CRR;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美成人午夜| 日韩精品一区第一页| 亚洲国产裸拍裸体视频在线观看乱了| 日日夜夜一区二区| 成人97人人超碰人人99| 欧美精品高清视频| 亚洲视频图片小说| 国产精品一级二级三级| 在线播放/欧美激情| 亚洲人成精品久久久久久| 久久精品国产亚洲高清剧情介绍| 欧美性高清videossexo| 国产精品―色哟哟| 国产真实精品久久二三区| 欧美精品xxxxbbbb| 亚洲网友自拍偷拍| 972aa.com艺术欧美| 国产亚洲欧美日韩日本| 国内精品国产三级国产a久久| 欧美乱熟臀69xxxxxx| 亚洲尤物视频在线| 色综合激情久久| 亚洲欧美色一区| av影院午夜一区| 国产精品久久久久影院| 国产成人午夜精品5599| 久久精品亚洲国产奇米99| 九九国产精品视频| 欧美精品一区二区蜜臀亚洲| 日韩av电影一区| 正在播放一区二区| 免费av网站大全久久| 欧美一区在线视频| 麻豆视频观看网址久久| 精品美女一区二区| 精品一二线国产| 精品美女被调教视频大全网站| 男女激情视频一区| 久久免费午夜影院| 成人高清视频免费观看| 中文字幕一区二区不卡| 91美女片黄在线| 亚洲小少妇裸体bbw| 欧美久久久久免费| 美女视频黄a大片欧美| 精品国产99国产精品| 国产成人综合精品三级| 亚洲日本电影在线| 欧美日本一区二区在线观看| 日韩成人免费电影| www激情久久| 成人黄色一级视频| 天天做天天摸天天爽国产一区| 欧美一区二区网站| 国产精品99久久久久久久女警| 国产精品久久久久久亚洲伦| 色美美综合视频| 蜜臀精品一区二区三区在线观看| 精品国产电影一区二区| 成人动漫一区二区三区| 亚洲 欧美综合在线网络| 久久久欧美精品sm网站| 色8久久精品久久久久久蜜| 免费日韩伦理电影| 中文字幕一区二区三区乱码在线| 欧美三电影在线| 国产激情偷乱视频一区二区三区 | 制服丝袜一区二区三区| 国产麻豆精品在线观看| 一区二区日韩av| 亚洲精品一区二区三区香蕉| 色综合欧美在线| 久久电影网电视剧免费观看| 最好看的中文字幕久久| 日韩欧美在线网站| 97精品超碰一区二区三区| 青椒成人免费视频| 国产精品久久福利| 日韩免费看的电影| 91在线云播放| 精品一区二区三区免费| 亚洲视频一区二区在线| 2017欧美狠狠色| 欧美日韩亚洲国产综合| 丁香五精品蜜臀久久久久99网站 | 另类小说图片综合网| 亚洲综合在线电影| 日本一区二区三区四区| 91精品国产综合久久婷婷香蕉| 91蜜桃在线观看| 国产福利91精品一区二区三区| 三级影片在线观看欧美日韩一区二区| 国产精品成人午夜| 国产亚洲一二三区| 欧美大片免费久久精品三p| 日本高清无吗v一区| 成人深夜在线观看| 国产精品伊人色| 毛片av一区二区| 日本成人在线电影网| 一区二区高清视频在线观看| 国产精品少妇自拍| 国产农村妇女精品| 久久久久久**毛片大全| 精品电影一区二区| 欧美一区二区三区视频| 欧美日韩国产大片| 欧美色精品在线视频| 色999日韩国产欧美一区二区| 成人免费福利片| 大桥未久av一区二区三区中文| 国产精品影视在线观看| 国产一区二区三区在线观看精品| 精品在线免费视频| 国产尤物一区二区| 韩国毛片一区二区三区| 国产成人福利片| 国产成人免费av在线| 国产美女在线观看一区| 国产ts人妖一区二区| 成人免费视频国产在线观看| 国产精品一线二线三线| 国产精品亚洲第一| 高清beeg欧美| 97超碰欧美中文字幕| 欧美日韩一二三| 欧美日本一区二区在线观看| 日韩免费观看高清完整版| 欧美mv和日韩mv国产网站| 久久久久青草大香线综合精品| 国产欧美日韩在线看| 国产精品精品国产色婷婷| 亚洲另类在线一区| 天天综合色天天| 久久成人免费网站| av网站免费线看精品| 在线免费亚洲电影| 欧美一区二区三区男人的天堂| 26uuu亚洲综合色| 亚洲品质自拍视频| 午夜日韩在线观看| 国产伦精品一区二区三区视频青涩| 国产成人综合在线播放| 欧美在线啊v一区| 欧美一区午夜精品| 国产婷婷一区二区| 亚洲成a人在线观看| 国产老女人精品毛片久久| 色婷婷综合五月| 日韩欧美高清一区| 一区二区三区精品在线| 免费美女久久99| 97se亚洲国产综合自在线| 欧美一区二区免费| 中文字幕在线一区免费| 午夜久久久久久久久| heyzo一本久久综合| 欧美一区二区精品| ●精品国产综合乱码久久久久| 日韩精品国产欧美| 成人avav影音| 欧美不卡123| 亚洲综合一区二区| 国产精品1区二区.| 欧美日韩国产123区| 国产精品久久久久久亚洲伦| 男男成人高潮片免费网站| 色哟哟精品一区| 久久久精品人体av艺术| 日韩在线a电影| 色悠久久久久综合欧美99| 国产视频一区在线播放| 天堂成人国产精品一区| 色婷婷av一区二区三区大白胸| 久久久久亚洲蜜桃| 麻豆精品在线播放| 7777精品久久久大香线蕉| 一区二区三区不卡视频| 成人app软件下载大全免费| 精品国产一区a| 日本亚洲一区二区| 欧美性高清videossexo| 一个色在线综合| 色综合久久久久久久| 国产精品美女久久久久av爽李琼 | 久久亚洲二区三区| 日韩福利视频导航| 欧美三级午夜理伦三级中视频| 国产精品国产三级国产普通话三级| 国产一区二区三区香蕉| 日韩美女视频在线| 日韩1区2区日韩1区2区| 欧美日韩国产小视频| 亚洲成人动漫在线观看| 91福利精品第一导航| 樱花草国产18久久久久| 色综合天天综合色综合av| 自拍偷拍国产精品| 91浏览器在线视频| 亚洲国产日产av|