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

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

?? i2c.c

?? uCos-ii 2.86 在C8051F410單片機上移植成功!!! 其中包括:UART驅動
?? C
字號:
#include "..\header files\includes.H" 
#include "I2C.h" 

#ifndef  FALSE
#define  FALSE    0
#endif


//static OS_EVENT *I2cMbox;

INT8U COMMAND;     // 在SMBus中斷服務程序中用于保存從地址 + R/W 位。
             
INT8U IIC_dat;        // 保持SMBus要發送的數據字節或剛收到的數據
         
INT8U BYTE_NUMBER; // 在中用于檢查發送的是什么數據
                  // 高地址字節、低地址字節或數據字節
INT8U HIGH_ADD, LOW_ADD; // EEPROM存儲器地址的高、低字節

INT8U SM_BUSY;    // 該位在發送或接收開始時被置1,
                // 操作結束后由中斷服務程序清0



																

INT8U I2cInit(void)	 reentrant
{
	SFRPAGE=SMB0_PAGE;

	SMB0CN = 0x44;  // 允許SMBus在應答周期發送ACK
	SMB0CR=0xD6;    //SMBUS 波特率設置:100KHz
	EIE1|= 0x02;    //開啟SMBUS中斷

	/*   
  I2cMbox = OSMboxCreate((void *)0);   //消息郵箱用于中斷向任務傳遞操作結果 


  if (I2cMbox ==(void *)0 )	       
      return FALSE;
        
 
	*/   
    
  return FALSE;

}

/***********************************************************************
// SMBus 字節寫函數-----------------------------------------------------
// 向給定存儲器地址寫一個字節
//
// out_byte = 待寫數據
// byte_address = 待寫存儲器地址(2字節)
// chip_select = 待寫EEPROM芯片的器件地址

*************************************************************************/

void SM_Send (INT8U chip_select, INT16U byte_address,INT8U len, INT8U out_byte)  reentrant
{
	  	
		while (SM_BUSY); // 等待SMBus空閑
	
		SM_BUSY = 1; // 占用SMBus(設置為忙)			
	
		SFRPAGE=SMB0_PAGE; 
		

		SMB0CN = 0x44; // SMBus允許,應答周期發ACK 		
	
		COMMAND = (chip_select | WRITE); // 片選 + WRITE

		if(len) //2個字節
		{			
		  BYTE_NUMBER = 2; // 2地址字節	
			HIGH_ADD = ((byte_address >> 8) & 0x00FF); // 高8位地址	 		
			LOW_ADD = (byte_address & 0x00FF); // 低8位地址
		}

		else
		{	
		  BYTE_NUMBER = 1; // 1地址字節
			HIGH_ADD =(INT8U)byte_address;  // 高8位地址 	
		  LOW_ADD = (INT8U)byte_address ; // 低8位地址				
		 }
	
		IIC_dat = out_byte; // 待寫數據			
			
	
		SFRPAGE=SMB0_PAGE;
		STA = 1; // 啟動傳輸過程			
	
	
}




/***********************************************************************
// SMBus隨機讀函數-----------------------------------------------------
// 從給定存儲器地址讀一個字節
//
// byte_address = 要讀取的存儲器地址
// chip_select = 待讀EEPROM的器件地址
************************************************************************/
char SM_Receive (char chip_select, INT16U byte_address,INT8U len) reentrant
{	 
  
	while (SM_BUSY); // 等待總線空閑 
	SM_BUSY = 1; //占用SMBus(設置為忙)	

	SFRPAGE=SMB0_PAGE; 		

	SMB0CN = 0x44; // 允許SMBus,應答周期發ACK 
	
	COMMAND = (chip_select | READ); // 片選 + READ

	if(len)//2個字節
	{
		BYTE_NUMBER = 2; // 2地址字節
		HIGH_ADD = ((byte_address >> 8) & 0x00FF); // 高8位地址
		LOW_ADD = (byte_address & 0x00FF); // 低8位地址
		
	 }

	else
	 {
		  BYTE_NUMBER = 1; // 1地址字節
			HIGH_ADD =(INT8U)byte_address;  // 高8位地址 	
		  LOW_ADD = (INT8U)byte_address ; // 低8位地址	

	 } 
	

	SFRPAGE=SMB0_PAGE;
	STA = 1; // 啟動傳輸過程

	while (SM_BUSY); // 等待傳輸結束	
	
	return IIC_dat;
}




//--------------------------------------------------------------------
// 中斷服務程序
//--------------------------------------------------------------------
// SMBus中斷服務程序  

void IIC_isr(void) reentrant
{

  OS_ENTER_CRITICAL();
   
  SFRPAGE=SMB0_PAGE;

	switch (SMB0STA)
	{      // SMBus狀態碼(SMB0STA寄存器)
	       // 主發送器/接收器:起始條件已發送
	       // 在該狀態發送的COMMAND字的R/W位總是為0(W),
	       // 因為對于讀和寫操作來說都必須先寫存儲器地址。
	  case SMB_START:
		    
			SMB0DAT = (COMMAND & 0xFE); // 裝入要訪問的從器件的地址
			STA = 0; // 手動清除START位
			break;
			//主發送器/接收器:重復起始條件已發送。
			// 該狀態只應在讀操作期間出現,在存儲器地址已發送并得到確認之后
	  case SMB_RP_START:
		   
			SMB0DAT = COMMAND; // COMMAND中應保持從地址 + R.
			STA = 0;
			break;
			// 主發送器:從地址 + WRITE已發送,收到ACK。
	  case SMB_MTADDACK:
		    
			SMB0DAT = HIGH_ADD; // 裝入待寫存儲器地址的高字節
			break;
			// 主發送器:從地址 + WRITE已發送,收到NACK。
			// 從器件不應答,發送STOP + START重試
	  case SMB_MTADDNACK:
		   
			STO = 1;
			STA = 1;
			break;
			// 主發送器:數據字節已發送,收到ACK。
			// 該狀態在寫和讀操作中都要用到。BYTE_NUMBER看存儲器地址狀態 – 如果
			// 只發送了HIGH_ADD,則裝入LOW_ADD。如果LOW_ADD已發送,檢查COMMAND
			// 中的R/W 值以決定下一狀態。
	   case SMB_MTDBACK:
			switch (BYTE_NUMBER)
			  {
					case 2: // 如果BYTE_NUMBER=2,
						SMB0DAT = LOW_ADD; // 只發送了HIGH_ADD。
						BYTE_NUMBER--; // 減1,為下一輪作準備
						break;
					case 1: // 如果BYTE_NUMBER=1,LOW_ADD已發送。
						if (COMMAND & 0x01) // 如果R/W=READ,發送重復起始條件
						    STA = 1;
						else
						  {
							   SMB0DAT = IIC_dat; // 如果R/W=WRITE,裝入待寫字節
							   BYTE_NUMBER--;
						  }
						break;
					default: // 如果BYTE_NUMBER=0,傳輸結束
						STO = 1;
	
						//OSMboxPost(I2cMbox, (void *)I2C_WRITE_END);
						SM_BUSY = 0; // 釋放SMBus
			  }
			 break;
					// 主發送器:數據字節已發送,收到NACK。
					// 從器件不應答,發送STOP + START重試
		case SMB_MTDBNACK:
			 STO = 1;
			 STA = 1;
			 break;
					// 主發送器:競爭失敗
					// 不應出現。如果出現,重新開始傳輸過程
		case SMB_MTARBLOST:
			STO = 1;
			STA = 1;
			break;
					// 主接收器:從地址 + READ 已發送。收到ACK。
					// 設置為在下一次傳輸后發送NACK,因為那將是最后一個字節(唯一)。
		case SMB_MRADDACK:
			AA = 0; // 在應答周期NACK。
			break;
					// 主接收器:從地址 + READ 已發送。收到NACK。
					// 從器件不應答,發送重復起始條件重試
		case SMB_MRADDNACK:
			STA = 1;
			break;
					// 收到數據字節。ACK已發送。
					// 該狀態不應出現,因為AA已在前一狀態被清0。如果出現,發送停止條件。
		case SMB_MRDBACK:
			STO = 1;

			//OSMboxPost(I2cMbox, (void *)I2C_ACK_ERR);
			SM_BUSY = 0;
			break;
					// 收到數據字節。NACK已發送。
					// 讀操作已完成。讀數據寄存器后發送停止條件。
		case SMB_MRDBNACK:
			IIC_dat = SMB0DAT;
			STO = 1;
			//OSMboxPost(I2cMbox, (void *)I2C_READ_END);

			SM_BUSY = 0; // 釋放SMBus
			break;
					// 在本應用中,所有其它狀態碼沒有意義。通信復位。
		default:
			STO = 1; // 通信復位。
			SM_BUSY = 0;

			//OSMboxPost(I2cMbox, (void *)I2C_NOT_GET_BUS);
			break;
	  }

   SI=0; // 清除中斷標志

   OS_EXIT_CRITICAL();
}  



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本一道久久a久久精品| 男女男精品视频| 不卡欧美aaaaa| 一区精品在线播放| 91蜜桃网址入口| 亚洲一区在线观看视频| 欧美日韩精品系列| 日韩专区欧美专区| 日韩精品资源二区在线| 国产制服丝袜一区| 亚洲国产电影在线观看| 色国产精品一区在线观看| 亚洲自拍偷拍网站| 日韩一区二区在线免费观看| 国产精品主播直播| 亚洲欧洲性图库| 欧美日韩在线综合| 激情久久久久久久久久久久久久久久| 久久先锋影音av鲁色资源网| 成人动漫视频在线| 亚洲成av人片在线观看| 精品国产一区二区三区av性色| 国产精品自拍三区| 亚洲综合男人的天堂| 日韩精品专区在线| 不卡一区二区三区四区| 石原莉奈在线亚洲三区| 久久蜜桃av一区二区天堂| 91性感美女视频| 看片网站欧美日韩| 亚洲精品欧美二区三区中文字幕| 欧美精三区欧美精三区| 懂色av中文字幕一区二区三区| 亚洲制服欧美中文字幕中文字幕| 精品久久久久久久一区二区蜜臀| 91在线码无精品| 国产一区福利在线| 亚洲中国最大av网站| 中文字幕精品一区二区三区精品| 欧美日韩视频专区在线播放| 国产99久久久国产精品潘金| 午夜久久电影网| 中文字幕一区二区三区四区| 日韩一区二区精品葵司在线| 在线观看一区日韩| 成人免费va视频| 国内成人自拍视频| 亚洲成年人影院| 亚洲丝袜制服诱惑| 久久精品亚洲乱码伦伦中文 | 亚洲欧洲国产专区| 欧美一区三区四区| 91丨国产丨九色丨pron| 国产激情一区二区三区| 美国三级日本三级久久99| 亚洲综合一区二区精品导航| 国产精品久久久久婷婷二区次| 日韩精品一区在线观看| 欧美日韩一区二区三区视频| 91看片淫黄大片一级| 国产不卡一区视频| 精品一区二区在线视频| 午夜精品爽啪视频| 亚洲一区二区三区四区中文字幕 | 欧美一区三区二区| 欧美三级电影网| 91久久久免费一区二区| 97精品电影院| 91麻豆免费看| 97久久超碰精品国产| 99久久精品国产一区| av电影天堂一区二区在线| 国产精品一区二区在线观看网站| 久久精品国产精品亚洲红杏 | 麻豆精品在线视频| 青青草一区二区三区| 青椒成人免费视频| 蜜臀va亚洲va欧美va天堂| 日韩va欧美va亚洲va久久| 亚洲国产精品天堂| 五月激情综合网| 日韩中文字幕1| 日本不卡高清视频| 久久99精品一区二区三区三区| 久久精品72免费观看| 经典三级视频一区| 国产精品白丝jk黑袜喷水| 国产精品一二三区在线| 国产精品亚洲视频| 91在线免费看| 欧美日韩夫妻久久| 欧美成人精品高清在线播放| 久久久久久免费网| 亚洲欧洲另类国产综合| 亚洲综合色噜噜狠狠| 青青国产91久久久久久| 国产精品18久久久久久久网站| 成人av电影在线| 在线免费观看日韩欧美| 51久久夜色精品国产麻豆| 2021久久国产精品不只是精品| 久久精品男人天堂av| 亚洲品质自拍视频网站| 亚洲bdsm女犯bdsm网站| 久久国产精品99精品国产| 国产v日产∨综合v精品视频| 91视频在线观看| 日韩一级视频免费观看在线| 国产网红主播福利一区二区| 亚洲一区二区美女| 久久精品国产网站| 99久久免费视频.com| 欧美高清激情brazzers| 久久婷婷色综合| 亚洲精品v日韩精品| 毛片一区二区三区| av在线不卡电影| 日韩免费电影网站| 亚洲日本乱码在线观看| 美美哒免费高清在线观看视频一区二区| 国产成人在线电影| 欧美吻胸吃奶大尺度电影| 久久综合九色综合97婷婷| 日韩一区中文字幕| 老色鬼精品视频在线观看播放| 日韩三级精品电影久久久| 国产精品短视频| 一区二区三区欧美日韩| 欧美午夜精品久久久久久孕妇| 欧美日韩精品欧美日韩精品一| 欧美疯狂性受xxxxx喷水图片| 亚洲精品在线电影| 亚洲一级二级三级在线免费观看| 美女视频黄 久久| 7777精品久久久大香线蕉| 成人免费在线视频观看| 国产一区二区成人久久免费影院 | 国产精品综合久久| 欧美日韩三级一区二区| 国产免费成人在线视频| 日本麻豆一区二区三区视频| 91一区二区三区在线观看| 6080午夜不卡| 一区二区三区免费网站| 岛国一区二区三区| 亚洲精品一区二区三区福利| 亚洲第一狼人社区| 91亚洲国产成人精品一区二区三| 国产网站一区二区三区| 久久99深爱久久99精品| 这里只有精品99re| 亚洲成人动漫一区| 欧美做爰猛烈大尺度电影无法无天| 国产精品丝袜一区| 国产乱人伦偷精品视频免下载 | 精品国产91亚洲一区二区三区婷婷 | 一区二区三区国产豹纹内裤在线| 国产成人午夜高潮毛片| 亚洲精品在线观| 国产又粗又猛又爽又黄91精品| 欧美精品一二三| 丝袜诱惑亚洲看片| 欧美日韩亚洲丝袜制服| 一区二区免费在线播放| 一本到不卡免费一区二区| 日韩理论电影院| 色偷偷久久人人79超碰人人澡| 亚洲色图制服诱惑| 99久久免费精品| 一区二区三区欧美| 欧美手机在线视频| 无码av免费一区二区三区试看| 欧美三级乱人伦电影| 亚洲不卡av一区二区三区| 欧美理论片在线| 日本中文字幕一区二区视频| 日韩三级精品电影久久久| 国产综合成人久久大片91| 久久免费午夜影院| 成人性生交大合| 亚洲啪啪综合av一区二区三区| 在线看日韩精品电影| 亚洲va国产天堂va久久en| 欧美一区二区日韩一区二区| 久久99热99| 中文字幕欧美日本乱码一线二线| 成人高清视频在线| 亚洲国产日日夜夜| 日韩午夜三级在线| 国产精品一级黄| 亚洲精品一二三四区| 欧美三级日韩在线| 国产一区二区三区在线观看免费视频| 欧美国产综合一区二区| 色婷婷国产精品| 另类欧美日韩国产在线| 中文文精品字幕一区二区| 91国偷自产一区二区开放时间 | 国产高清亚洲一区| 中文字幕五月欧美|