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

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

?? isr_i2c.c

?? 51單片機C語言常用模塊與綜合系統設計實例精講
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CRxPrepareACK (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為I2C的接收應答時序的前的準備
//*-----------------------------------------------------------------------------
void I2CRxPrepareACK (I2Cdesc *I2C_pt)
//* Begin
{
    //* set SCL line
    SCL_SET();

    if(I2C_pt->mode == STOP)
        //* change interrupt handler to
        I2C_pt->I2CTCHandler = I2CTxPrepareSTOP;

    else
        //* change interrupt handler to I2CRxDoACK
        I2C_pt->I2CTCHandler = I2CRxDoACK;

//* End
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CTxWaitACK (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為I2C的等待芯片的應答
//*-----------------------------------------------------------------------------
void I2CTxWaitACK (I2Cdesc *I2C_pt){
    if(SDA_VAL() == 0){	    //* if ACK (SDA = 0)...
		switch(I2C_pt->mode){
	    	case STOP :
            SCL_CLR();		//* clear SCL line
	          I2C_pt->I2CTCHandler = I2CTxPrepareSTOP;		//* change interrupt handler to
				    break;
		    case DEVICE_READ :
				    SCL_CLR();		//* clear SCL line
		        I2C_pt->I2CTCHandler = I2CDeviceRead;			//* change interrupt handler to
        		break;
		    case DATA_READ :
		        I2C_pt->I2CTCHandler = I2CRxReceiveByte;		//* change interrupt handler to
				    break;
		    default :
				    SCL_CLR();		//* clear SCL line
				    //* change interrupt handler to
				    I2C_pt->I2CTCHandler = I2CTxSendByte;
				break;
		}
    }
    else{
        I2C_pt->nb_ACK--;							//Decrease the counter. 
		    if(I2C_pt->nb_ACK == 0)
	    	    I2C_pt->I2CTCHandler = I2CError;	//Timeout, change interrupt handler to I2C
    }
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CRxDoACK (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為主動發送應答給I2C設備
//*-----------------------------------------------------------------------------
void I2CRxDoACK (I2Cdesc *I2C_pt)
//* Begin
{
    //* clear SCL line
    SCL_CLR();

    //* change interrupt handler to
    I2C_pt->I2CTCHandler = I2CRxReceiveByte;

//* End
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CTxSetSCL (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為在發送數據時把I2C的SCL線設置為高電平
//*-----------------------------------------------------------------------------
void I2CTxSetSCL (I2Cdesc *I2C_pt){
    SCL_SET();		    //* set SCL line
    //* change interrupt handler to I2CTxSendBit
    I2C_pt->I2CTCHandler = I2CTxSendBit;
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CTxClearSCL (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為在發送數據時把SCL線設置為低電平
//*-----------------------------------------------------------------------------
void I2CTxClearSCL (I2Cdesc *I2C_pt)
//* Begin
{
    //* Clear SCL line

  	SCL_CLR();

    if(I2C_pt->countBit == 0)
    	//* set SDA line as an input

    //* change interrupt handler to I2CTxSendBit
    I2C_pt->I2CTCHandler = I2CTxSendBit;

//* End
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CRxSetSCL (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為在接收數據時把SCL線設置為高電平
//*-----------------------------------------------------------------------------
void I2CRxSetSCL (I2Cdesc *I2C_pt)
//* Begin
{
    //* set SCL line
    SCL_SET();

    //* change interrupt handler to I2CRxReceiveBit
    I2C_pt->I2CTCHandler = I2CRxReceiveBit;

//* End
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CRxClearSCL (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為在接收數據時把SCL線設置為低電平
//*-----------------------------------------------------------------------------
void I2CRxClearSCL (I2Cdesc *I2C_pt)
//* Begin
{
    //* Clear SCL line
    SCL_CLR();

    if(I2C_pt->countBit == 0)
      {
	    //* change interrupt handler to I2CI2CRxPrepareACK
  	    I2C_pt->I2CTCHandler = I2CRxPrepareACK;

            //* set SDA line as an output

	    //* clear SDA line
 	    SDA_CLR();
      }
    else
	//* change interrupt handler to I2CRx
	I2C_pt->I2CTCHandler = I2CRxReceiveBit;

//* End
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CRxReceiveByte (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為在從I2C中接收一個字節的數據
//*-----------------------------------------------------------------------------
unsigned int ttmp=0;
void I2CRxReceiveByte (I2Cdesc *I2C_pt)
//* Begin
{
	//* set SDA line as an input
	//* clear SCL line
	SCL_CLR();

	//* initialize countBit
	I2C_pt->countBit = 8;
	*I2C_pt->RxEnd=0;
	ttmp=0;
    I2C_pt->nbI2CByte--;
    if(I2C_pt->nbI2CByte == 0)
        //* next mode
        I2C_pt->mode = STOP;

	//* change interrupt handler to I2C
	I2C_pt->I2CTCHandler = I2CRxReceiveBit;

//* End
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : I2CRxReceiveBit (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//* 輸出變量       : 無
//* 功能           :為在從I2C中接收一個比特的數據
//*-----------------------------------------------------------------------------
void I2CRxReceiveBit (I2Cdesc *I2C_pt)
//* Begin
{
	unsigned char bit_val;
 	
     //* set SCL line
    SCL_SET();

	//* decrement countBit
	I2C_pt->countBit--;

	//* get bit
	if(SDA_VAL()){
	    bit_val = 1;
		//printk("r1 ");
	}
	else{
	    bit_val = 0;
		//printk("r0 ");
	}
	//* if bit counter > 0
	if(I2C_pt->countBit > 0){
	    //* update working byte
	    *I2C_pt->RxEnd |= (bit_val << I2C_pt->countBit);
		ttmp |= (bit_val << I2C_pt->countBit);
	}
	else{
	     *(I2C_pt->RxEnd++) |= (bit_val << I2C_pt->countBit) ;
		 ttmp |= (bit_val << I2C_pt->countBit);
		 //printk("\r\n ");
	}

    //* change interrupt handler to I2CRxClearSCL
    I2C_pt->I2CTCHandler = I2CRxClearSCL;

//* End
}


//*-----------------------------------------------------------------------------
//* 函數名稱       : Timer_I2C (I2Cdesc *I2C_pt)
//* Object         : I2C
//* 輸入參數       : 無
//* 輸出變量       : 無
//* 功能           :為I2C的中斷定時器,I2C的一切函數都由此中斷來驅動
//*-----------------------------------------------------------------------------
void Timer_I2C()    interrupt T0_INT {//timer 1 interrupt.
	if(!I2c_timer_cnt){
    	(*(I2c.I2CTCHandler))(&I2c);	//call automate state handler
	}
	else{
		I2c_timer_cnt--;
	}
}

//*-----------------------------------------------------------------------------
//* 函數名稱       : I2C_lineOpen (I2Cdesc *I2C_pt, unsigned int us)
//* Object         : I2C
//* 輸入參數       : <I2C_pt> =  為I2C的描述指針,其結構定義在source.h中
//*                :us 為I2C中斷的時中斷時間長度,此參數表示I2C的SCL的頻率
//* 輸出變量       : 無
//* 功能           :初始化I2C的設備和定時器
//*-----------------------------------------------------------------------------
void I2C_lineOpen (I2Cdesc *I2C_pt, unsigned int us){
	/*****Set Up Paramter ***/
    int tmp;
	I2C_pt->deviceAddress = 0;
	/*****Set Up Line****/
    I2C_pt->state = OK;
    SDA_SET();;		//* set SDA line high
    SCL_SET();     //* set SCL line high
	/*****Setup Interrupt **/
	/*****Setup Timer **/
	I2C_pt->Timer_Gap_us=us;
	Init_I2c_Timer(us); 
	Start_I2c_Timer(us);  
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
看电影不卡的网站| 国产精品自拍三区| 91精品久久久久久久久99蜜臂| 视频在线观看一区| 欧美国产丝袜视频| 欧美一区二区三区免费在线看| 国产传媒日韩欧美成人| 亚洲一二三四区| 久久精品夜色噜噜亚洲aⅴ| 在线观看日韩av先锋影音电影院| 日本一不卡视频| 亚洲国产cao| 亚洲精品欧美激情| 国产欧美精品在线观看| 日韩美女一区二区三区四区| 91美女视频网站| 高清不卡一区二区| 国产在线精品一区二区| 日韩在线一二三区| 一区二区三区久久| 自拍视频在线观看一区二区| 久久久天堂av| 久久毛片高清国产| 精品日韩在线观看| 欧美精品在线观看一区二区| 在线看国产一区| 91久久一区二区| 91麻豆精东视频| 91成人看片片| 色综合天天做天天爱| 一本大道av一区二区在线播放| 成人精品亚洲人成在线| 国产白丝网站精品污在线入口| 国内成人免费视频| 成人一级片网址| av动漫一区二区| 日本高清不卡在线观看| 欧美羞羞免费网站| 91久久香蕉国产日韩欧美9色| 91香蕉视频在线| 91精品国产综合久久久蜜臀图片| 日韩欧美成人午夜| 欧美经典三级视频一区二区三区| 国产精品人人做人人爽人人添| 亚洲色大成网站www久久九九| 亚洲曰韩产成在线| 国产精品亚洲午夜一区二区三区| 成人短视频下载| 欧美精品一二三| 中文字幕av资源一区| 婷婷夜色潮精品综合在线| 国产一区二区h| 欧美影院精品一区| 国产亚洲精品久| 蜜桃一区二区三区在线观看| 一本一本久久a久久精品综合麻豆| 欧美三日本三级三级在线播放| 久久老女人爱爱| 久久国产成人午夜av影院| 91一区二区在线| 欧美国产一区二区| 国产精品12区| 国产亚洲制服色| 国产伦精品一区二区三区视频青涩| 欧美久久久久免费| 亚洲一区免费在线观看| 色香蕉久久蜜桃| 亚洲日本免费电影| 日本道色综合久久| 亚洲地区一二三色| 这里只有精品99re| 日本欧美加勒比视频| 精品1区2区3区| 麻豆免费精品视频| 国产清纯白嫩初高生在线观看91| 国产一区二区三区蝌蚪| 亚洲国产成人午夜在线一区| 成人国产精品免费网站| 亚洲国产视频网站| 欧美肥妇毛茸茸| 精品成人a区在线观看| 蜜臀av一区二区在线免费观看| 欧美精品三级在线观看| 午夜精品一区二区三区免费视频| 色狠狠一区二区| 久久综合色播五月| 成人手机电影网| 日韩一区二区三区四区五区六区| 麻豆精品一二三| 1000精品久久久久久久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 中文字幕av不卡| 在线观看日韩电影| 捆绑紧缚一区二区三区视频| 日本一区二区三区在线不卡 | 欧美日韩国产在线播放网站| 午夜欧美一区二区三区在线播放| 日韩午夜小视频| 日本韩国欧美三级| 婷婷夜色潮精品综合在线| 久久精品网站免费观看| 欧美三级午夜理伦三级中视频| 麻豆精品一区二区av白丝在线| 久久精品亚洲精品国产欧美kt∨ | 国产精品88888| 亚洲成人免费在线观看| 中文字幕成人网| 精品久久一区二区三区| 91精品啪在线观看国产60岁| 99国产欧美另类久久久精品 | 亚洲人成7777| 一区二区中文视频| 国产日韩视频一区二区三区| 欧美一级日韩免费不卡| 欧美视频日韩视频| 欧美亚洲免费在线一区| av在线综合网| 成人福利视频网站| 91小视频在线观看| 色婷婷久久久亚洲一区二区三区 | 宅男在线国产精品| 91精品国产一区二区三区| 欧美日韩在线免费视频| 欧美日韩国产123区| 制服丝袜激情欧洲亚洲| 精品久久久久久久久久久久久久久 | 成人免费三级在线| hitomi一区二区三区精品| a级精品国产片在线观看| 在线中文字幕一区二区| 欧美日韩中文国产| 久久综合久久综合久久综合| 久久久国产午夜精品| 中文字幕高清不卡| 婷婷久久综合九色综合绿巨人| 美日韩一区二区| 懂色av一区二区三区免费看| 欧美中文字幕久久| www成人在线观看| 亚洲bt欧美bt精品777| 99久久99久久精品国产片果冻| 国产xxx精品视频大全| 色av成人天堂桃色av| 日韩你懂的在线观看| 国产精品国产三级国产aⅴ中文| 亚洲午夜在线观看视频在线| 久久国内精品自在自线400部| 色就色 综合激情| 日本一区二区三区高清不卡| 午夜欧美在线一二页| 9久草视频在线视频精品| 日韩欧美在线一区二区三区| 日韩美女精品在线| 免费高清视频精品| 欧美乱妇20p| 亚洲精品一二三| 91在线云播放| 亚洲最大成人综合| 国产成人在线影院| 2017欧美狠狠色| 精品一区二区久久久| 色婷婷av一区| 亚洲一级二级在线| 欧美私模裸体表演在线观看| 国产精品美女久久福利网站| 国产ts人妖一区二区| 中文字幕欧美三区| caoporn国产一区二区| 亚洲欧美日韩一区二区| 欧洲生活片亚洲生活在线观看| 亚洲天堂免费在线观看视频| 色哟哟一区二区在线观看| 1024成人网| 日韩一区和二区| 国产盗摄精品一区二区三区在线 | 欧美日韩日日摸| 天堂精品中文字幕在线| 久久久久久久性| 在线中文字幕一区二区| 精品一区二区三区免费播放 | 日本高清无吗v一区| 亚洲影视在线观看| 精品卡一卡二卡三卡四在线| 97精品久久久久中文字幕| 午夜精品福利一区二区蜜股av| 337p日本欧洲亚洲大胆精品| 激情深爱一区二区| 亚洲一区二区欧美| 亚洲国产高清在线观看视频| 欧美日韩免费观看一区二区三区| 国产精品一二三四五| 午夜精品123| 夜夜嗨av一区二区三区四季av | www.亚洲色图.com| 美日韩黄色大片| 日韩精品五月天| 亚洲国产精品一区二区久久| 亚洲人精品一区| 亚洲免费观看高清在线观看| 国产欧美久久久精品影院|