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

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

?? twi.c

?? PTR8000無線通信模塊的單片機控制程序
?? C
字號:

/*函數的使用說明:
1.該twi模塊包含四種工作模式,主發,主收,從收,從發,其中主發由
  twiWriteByte(從機地址,要發送的數據)實現,主收由twiReadByte(從機地址)實現,從機
  的發送與接收均通過中斷實現
2.在從機模式下,需調用twi_init()來使能并初始化twi總線
3.在主機模式下,調用twiWriteByte(從機地址,要發送的數據)向指定的從機寫入數據,
  調用twiReadByte(從機地址)從指定的從機讀取數據,然后可通過查詢錯誤狀態error_state
  的值決定下一步如何操作。
*/

//************************* 頭文件 ******************************************
#include "twi.h"

//TWI同程序的接口參數
//receive_data,error_state不用設置
extern char receive_data;  		 // 接收到的數據
extern char error_state;   		 // twi錯誤狀態
//以下三個參數根據需求進行設置
extern char slave_address;      // 設置從機地址,Bits 7..1:存放從機地址,Bit 0:最低位為廣播識別使能位
extern char bit_race;           // 設置主機模式的比特率,SCL=CPU頻率/(16+2*(TWBR)*4TWPS),TWPS在4的指數位置
extern char send_data;     	    // 從機發送模式下從機向主機發送的數據

//*************************** twi錯誤狀態說明*********************************
// 0:twi傳送無錯誤
// 1:在主發模式下,SLA+W已發送,返回NOT ACK
// 2:在主發模式下,DATA已發送,返回NOT ACK
// 3:在主發模式下,SLA+W或者數據的仲裁失敗
// 4:在主收模式下,SLA+R或者數據的仲裁失敗
// 5:在主收模式下,SLA+R已發送,返回NOT ACK
// 6:在主發模式下,START信號發送不成功
// 7:在主收模式下,START信號發送不成功
// 8:在主收模式下,數據接受完成
// 9:在主收模式下,數據接受不成功
//*****************************************************************************

//*************************** twi stop 信號延時時間 ****************************
//******************************************************************************
void StopDelay(void)
{
	unsigned int i;
	for(i = 0;i < 20;i ++);
}
//******************************* twi 啟動總線*********************************
//******************************************************************************
void start(void)
{
	TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);	//發出start信號
	_NOP();
	_NOP();
}
//************************** twi 釋放總線************************************
//***************************************************************************
void stop(void)
{
	TWCR = (1 << TWINT) |(1 << TWEN)|(1 << TWSTO); //發出stop信號	
	StopDelay();           //等待總線恢復
	TWCR= 0x45;
}
//****************************** twi 初始化*************************************
// TWCR: 控制寄存器,用來控制TWI操作,說明如下:
// Bit 7-TWINT:中斷標志位,Bit 6-TWEA:使能應答位,Bit 5-TWSTA:START狀態位
// Bit 4-TWSTO:STOP狀態位,Bit 3-TWWC: 寫沖突標志,Bit 2-TWEN:TWI使能位
// Bit 1-RES:保留,Bit 0-TWIE:中斷使能                   
// TWSR: 狀態寄存器,Bits 7..3:表示了TWI總線的當前狀態,讀取時需屏蔽低三位的值,Bits 1..0-TWPS:TWI預分頻位
// TWBR: 比特率寄存器,用來設置TWI的工作頻率,計算公式為:SCL=CPU頻率/(16+2*(TWBR)*4TWPS),TWPS在4的指數位置
// TWAR: 從機地址寄存器,Bits 7..1:存放從機地址,Bit 0:最低位為廣播識別使能位
// TWDR: 數據寄存器,用來存放接收或要發送的地址和數據
//******************************************************************************
void twi_init(void)
{
	TWCR= 0x00;    			//disable twi
	TWBR= bit_race;   		//set bit rate
	TWSR= 0x00;             //set prescale為1
	TWAR= slave_address;    //set slave address
	TWCR= 0x45;          //enable twi
}
//************************** 檢測發送時的狀態碼 ****************************
//**************************************************************************
/*void checkstate(void)
{
	unsigned char TWSR_state;
	TWSR_state = TWSR & 0xf8; //屏蔽第三位讀取狀態
	switch(TWSR_state)
	{
	case 0x08:error_state=0;break;  // START已發送
	case 0x18:error_state=0;break;  // SLA+W已發送,接收到ACK
	case 0x20:error_state=1;break;  // SLA+W已發送,接收到NOT ACK
	case 0x28:error_state=0;break;  // 數據已發送,接收到ACK
	case 0x30:error_state=2;break;  // 數據已發送,接收到NOT ACK
	case 0x38:error_state=3;break;  // SLA+W或數據的仲裁失敗
	default: break;
	}
	TWCR=0x45;
}
//********** twi主機發送,向地址為WriteAddress的從機發送1個字節數據************
// 入口參數1:WriteAddress:從機地址
// TWDR中存放的高七位為地址,最低位表示讀寫控制,0為寫,1為讀
// 入口參數2:data,向從機寫的數據
//******************************************************************************
void twiWriteByte(unsigned char WriteAddress,char data)
{
	unsigned char TWCR_state;
	char i=0;
	error_state=0;
	
	//初始化 twi 
	twi_init();
	
	//發送START信號 
	start();
	TWCR_state = TWCR & 0x80;
	while((TWCR_state == 0x00))
	{ 
		i++; 
		if(i>=10){error_state=6;break;}
		TWCR_state = TWCR & 0x80;    //輪循等待START信號發送完成
	}	
	
	//若START發送成功,發送從機地址
	if(error_state==0)
	{
		TWDR = WriteAddress;        //發地址
		_NOP();
		_NOP();
		
		TWCR = (1 << TWINT) | (1 << TWEN);
		TWCR_state = TWCR & 0x80;
		while(TWCR_state == 0x00)
		{TWCR_state = TWCR & 0x80;}	  //輪循查詢地址是否發送
		checkstate();
	}
	
	//若從機地址發送成功,向從機發送數據
	if(error_state==0)
	{
		TWDR = data;               //發數據
		_NOP();
		_NOP();
		TWCR = (1 << TWINT) | (1 << TWEN);
		TWCR_state = TWCR & 0x80;
		while(TWCR_state == 0x00) TWCR_state = TWCR & 0x80;	//輪循查詢數據是否發送
		checkstate();
	}
	
	//發送STOP,退出總線控制
	stop();
}
//************** twi主機接收,從地址為ReadAaddress的從機接收1個字節*************
// 入口參數1:ReadAaddress:從機地址
// TWDR中存放的高七位為地址,最低位表示讀寫控制,0為寫,1為讀
//******************************************************************************
void twiReadByte(unsigned char ReadAaddress)
{
	unsigned char TWCR_state;
	char i=0;
	error_state=0;
	
	//初始化 twi 
	twi_init();
	
	//發送START信號
	start();
	TWCR_state = TWCR & 0x80;
	while((TWCR_state == 0x00))
	{ 
		i++; 
		if(i>=10){error_state=7;break;}
		TWCR_state = TWCR & 0x80;    //輪循等待START信號發送完成
	}	
	
	//若START信號發送完成,發送讀地址,并讀取數據
	if(error_state==0)
	{
		TWDR = ReadAaddress;         //發地址
		_NOP();
		_NOP();
		TWCR = (1 << TWINT) | (1 << TWEN)|( 1<<TWIE )|(1 << TWEA);
		while(error_state==0) 
		{i++;if(i>150){error_state=9;break;}};
	}
	
	//發送STOP,退出總線控制
	stop();
}*/
//************** twi 中斷例程,接收數據 ****************************************
//******************************************************************************
//twi中斷服務程序
char twi_isr(void)
{
	unsigned char TWSR_state;
	TWSR_state = TWSR & 0xf8;
	switch(TWSR_state)
	{
		//從機接收模式下的中斷程序
    case 0x60: TWCR=0xc5;break;      	       // SLA+W已經接收,ACK已返回(從機被尋址,等待主機發送數據)
    case 0x80: receive_data = TWDR;TWCR=0xc5;break;  // 數據已接收,ACK已返回(接收數據)
    case 0x88: TWCR=0xc5;break;			       // 數據已接收,NOT ACK已返回(下一步:退出總線)
	case 0xA0: TWCR=0xc5;break;			       // 接收到STOP或重復的START信號(停止接收數據)
		
	/*	//主機接收模式下的中斷程序
    case 0x38: error_state=4;TWCR=0xc5;break;  // SLA+R或NOT ACK仲裁失?。ㄏ乱徊剑和顺隹偩€)
	case 0x40: TWCR=0xc5; break;               // SLA+R已發送,接收到ACK(從機被尋址,主機等待接收數據)
	case 0x48: error_state=5;TWCR=0xc5;break;  // SLA+R已發送,接收到NOT ACK(下一步:退出總線)
    case 0x50: receive_data = TWDR;_NOP();_NOP();error_state=8;TWCR = 0xc4;break;	// 接收到數據,ACK已返回(接收數據)
	case 0x58: receive_data = TWDR;_NOP();_NOP();error_state=8;TWCR = 0xc4;break;   // 接收到數據,NOT ACK已返回(下一步:退出總線)
		
		//從機發送模式
	case 0xA8: TWDR= send_data;_NOP();_NOP();TWCR= 0x85; break; // SLA+R已接收,ACK已返回(從機被尋址,開送發送數據)
	case 0xB8: TWCR= 0xc5;break;              // TWDR里的數據已發送,接受到ACK(主機接收到數據,繼續發送數據)
	case 0xC0: TWCR= 0xc5;break;			  // TWDR里的數據已發送,接受到NOT ACK(下一步:退出總線)
	case 0xC8: TWCR= 0xc5;break;              // TWEA=0,接收到ACK(停止發送數據,退出發送)
		*/
		//其他狀態碼
	case 0xf8: break;						  // 等待或進行當前傳輸
	case 0x00: TWCR= 0x95;break;              // 非法的START或STOP引起的總線錯誤(釋放總線)
    default:   break;
	}
	return receive_data;					  // 返回接收到的數據
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产另类不卡| 精品制服美女丁香| 色婷婷激情一区二区三区| 国产精品久久久久久久久免费桃花 | 日韩欧美国产精品| 精品一区二区三区影院在线午夜| wwww国产精品欧美| 成人免费高清在线观看| 亚洲精品免费在线| 91麻豆精品国产91久久久资源速度| 喷水一区二区三区| 日本一区二区三区国色天香| 一本一道波多野结衣一区二区| 亚洲午夜精品久久久久久久久| 91麻豆精品国产自产在线观看一区 | 一区二区欧美精品| 欧美精三区欧美精三区| 久久国产精品区| 国产精品久久毛片av大全日韩| 91片在线免费观看| 天天操天天综合网| 久久午夜免费电影| 色综合久久综合| 日本美女一区二区| 国产三级一区二区三区| 色狠狠综合天天综合综合| 日韩电影免费在线看| 国产亚洲精品超碰| 欧美午夜精品久久久| 久久成人综合网| 亚洲资源在线观看| 亚洲精品在线观看网站| 99久久久国产精品| 免费看黄色91| 伊人夜夜躁av伊人久久| 精品日韩欧美在线| 色综合久久99| 国产寡妇亲子伦一区二区| 一区二区三区日韩精品| 久久久久国产精品麻豆ai换脸| 欧美日韩一二三区| 成人97人人超碰人人99| 免费观看久久久4p| 亚洲影院在线观看| 国产精品伦理在线| 精品久久国产字幕高潮| 日本精品一区二区三区四区的功能| 极品美女销魂一区二区三区| 亚洲综合免费观看高清完整版在线| 久久久久久一级片| 欧美一区二区三区不卡| 在线观看视频91| 99re视频精品| 国产成人精品影院| 国产美女精品人人做人人爽| 日韩精品一区第一页| 一区二区三区中文在线观看| 国产日韩欧美精品电影三级在线| 欧美精品免费视频| 在线一区二区三区做爰视频网站| 高清beeg欧美| 国产成人综合在线播放| 国模套图日韩精品一区二区| 日韩不卡免费视频| 视频一区二区三区入口| 亚洲综合丁香婷婷六月香| 中文字幕一区av| 国产精品视频第一区| 久久久久久久网| 久久色成人在线| 日韩精品一区二区三区蜜臀| 欧美老肥妇做.爰bbww视频| 在线观看国产日韩| 91福利国产成人精品照片| av网站一区二区三区| 成人国产精品免费观看视频| 国v精品久久久网| 成人听书哪个软件好| 成人精品高清在线| 北条麻妃一区二区三区| 不卡视频免费播放| 91天堂素人约啪| 一本一道综合狠狠老| 色婷婷久久久久swag精品| 日本韩国欧美在线| 欧美日韩一区二区在线观看视频| 欧美性色黄大片| 91精品欧美久久久久久动漫| 欧美一级理论性理论a| 日韩午夜电影在线观看| 久久综合狠狠综合| 国产精品久久毛片| 亚洲色图一区二区| 亚洲尤物在线视频观看| 五月激情六月综合| 韩国成人福利片在线播放| 国产精品99久久久久久似苏梦涵 | 日日摸夜夜添夜夜添亚洲女人| 日韩精品免费视频人成| 紧缚奴在线一区二区三区| 国产1区2区3区精品美女| 在线免费观看成人短视频| 91 com成人网| 久久久久久久久久久久久久久99| 国产精品蜜臀av| 亚洲一区国产视频| 精品综合免费视频观看| 成人18视频日本| 欧美日韩成人在线一区| 久久婷婷久久一区二区三区| 中文字幕一区二| 蜜桃av噜噜一区| 成人免费高清在线| 欧美精品xxxxbbbb| 日本一区二区免费在线| 亚洲一区精品在线| 丰满亚洲少妇av| 欧美日本在线播放| 欧美国产乱子伦 | 日本午夜一区二区| 国产精品自拍av| 欧美最新大片在线看| 久久午夜色播影院免费高清| 亚洲一区二区精品视频| 国产精品一二一区| 欧美视频一区二区在线观看| 国产亚洲一区二区三区在线观看 | 日韩电影在线一区| 成人app网站| 久久综合一区二区| 一区二区三区 在线观看视频| 国产一区二区三区免费播放| 日本高清不卡在线观看| 久久久另类综合| 亚洲一区二区三区四区在线观看 | 亚洲欧美一区二区不卡| 激情深爱一区二区| 欧美日韩国产一级| 亚洲男人的天堂在线观看| 国产一区二区三区| 制服丝袜日韩国产| 一区二区免费看| 成人aaaa免费全部观看| 久久久久亚洲蜜桃| 韩日欧美一区二区三区| 这里只有精品电影| 午夜成人免费视频| 在线观看91视频| 18涩涩午夜精品.www| 国产+成+人+亚洲欧洲自线| 久久综合丝袜日本网| 秋霞av亚洲一区二区三| 欧美图片一区二区三区| 亚洲精品免费看| 99国产欧美另类久久久精品 | 欧美一区二区三区精品| 亚洲午夜精品网| 91国在线观看| 亚洲精品国产精华液| 99精品久久99久久久久| 日韩美女啊v在线免费观看| 懂色av中文一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 另类调教123区| 精品国产免费一区二区三区四区 | 成人永久看片免费视频天堂| 精品久久久久久久久久久久久久久久久 | 一区二区三区欧美久久| 色综合久久88色综合天天| 亚洲天堂av一区| 色婷婷久久99综合精品jk白丝| 日韩一区在线免费观看| 色一情一乱一乱一91av| 亚洲激情第一区| 欧美探花视频资源| 亚洲bt欧美bt精品| 欧美一区二区日韩一区二区| 天堂成人免费av电影一区| 欧美一区二区女人| 久久成人免费日本黄色| 久久久亚洲精品一区二区三区| 国产精品资源网站| 中文幕一区二区三区久久蜜桃| 成人激情图片网| 亚洲日穴在线视频| 欧美亚洲高清一区| 日韩国产精品大片| 久久综合久久综合久久综合| 国产suv一区二区三区88区| 国产精品久久毛片av大全日韩| 日本高清不卡在线观看| 青青草国产成人99久久| 国产欧美精品一区二区色综合朱莉| 国产69精品久久777的优势| 一区二区三区精品在线| 欧美一区二区在线观看| 国产在线精品视频| 最新热久久免费视频| 欧美精品aⅴ在线视频| 国产一区二区影院|