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

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

?? 24cxx.c

?? i2c 下的24c系列的源代碼集
?? C
字號:
#ifndef MCU_MODEL
	#define  MCU_MODEL avr	//<----在此設定mcu類型, 51代表51系列; avr代表avr系列
#endif

//-----------------------51類MCU-------------------------------------------
#if MCU_MODEL==51	

	#include<reg51.h>		//在此設定51類MCU的頭文件
	#include<intrins.h>     //_nop_()函數需要
	#include"xd.h"
	#include"xdprj.h"
	
	//---------定義I2總線端口, 可根據實際使用改變-----------
	sbit SCL=P1^0;		//I2總線時鐘線
	sbit SDA=P1^1;		//I2總線數據線
	
	#define SCL_L SCL=0
	#define SCL_H SCL=1
	#define SDA_L SDA=0
	#define SDA_H SDA=1
	
	#define SDA_TO_IN		//為配合avr共用次程序而空定義的宏
	#define SDA_TO_OUT		//為配合avr共用次程序而空定義的宏
	
	#define SDA_IF_L SDA==0	//如果sda為低
	#define SDA_IF_H SDA==1	//如果sda為高
	
	//------------------------------------------------------
	#define DELAY_us _nop_(); _nop_(); _nop_(); _nop_(); _nop_()	//延時用,如果要加長延時,可增加或減少 _nop_();
	
//------------------------avr類MCU-----------------------------------------
#elif MCU_MODEL==avr	

	#include<iom16v.h>		//在此設定avr類MCU的頭文件
	#include<macros.h>
	#include"xd.h"
	#include"xdprj.h"
	
	//-----定義I2總線端口, 可根據實際使用改變----
	#define SCL_L PORTC&=~BIT(0)	//I2總線時鐘線
	#define SCL_H PORTC|=BIT(0)
	#define SDA_L PORTC&=~BIT(1)	//I2總線數據線
	#define SDA_H PORTC|=BIT(1)
	
	#define SDA_TO_IN DDRC&=~BIT(1); _NOP()	//設數據線位輸入
	#define SDA_TO_OUT DDRC|=BIT(1); _NOP()	//設數據線位輸出
	
	#define SDA_IF_L (PINC&BIT(1))==0		//如果sda為低
	#define SDA_IF_H (PINC&BIT(1))==BIT(1)	//如果sda為高
	//-------------------------------------------

	#define DELAY_us tus(7)	//avr單片機在晶振為8MHz時,延時5us, 可根據實際情況改變
	
#endif
//---------------------------------------------------------------------------



//------在此設定芯片型號------
#define e2prom 32		// <---在此設定芯片型號, 1代表24C01; 16代表24C16; 512代表24C512

#if e2prom==1
	#define PAGE_SIZE 8
	#define SIZE 0x007f
#elif e2prom==2
	#define PAGE_SIZE 8
	#define SIZE 0x00ff
#elif e2prom==4
	#define PAGE_SIZE 16
	#define SIZE 0x01ff
#elif e2prom==8
	#define PAGE_SIZE 16
	#define SIZE 0x03ff
#elif e2prom==16
	#define PAGE_SIZE 16
	#define SIZE 0x07ff
#elif e2prom==32
	#define PAGE_SIZE 32
	#define SIZE 0x0fff
#elif e2prom==64
	#define PAGE_SIZE 32
	#define SIZE 0x1fff
#elif e2prom==128
	#define PAGE_SIZE 64
	#define SIZE 0x3fff
#elif e2prom==256
	#define PAGE_SIZE 64
	#define SIZE 0x7fff
#elif e2prom==512
	#define PAGE_SIZE 128
	#define SIZE 0xffff
#endif
//--------------------------

//--------在此設定芯片地址-------
#define W_ADD_COM 0xa0	//寫字節命令及器件地址(根據地址實際情況改變), 1010 A2 A1 A0 0
#define R_ADD_COM 0xa1	//讀命令字節及器件地址(根據地址實際情況改變), 1010 A2 A1 A0 1
//-------------------------------


//-----在此改變預置錯誤號-----
#define I2C_ERR	ERR_10	//寫字節命令及器件地址錯, 在此也就是讀寫器件錯!!
//---------------------------




//-----------4個I2總線公用函數, 可供其它I2總線器件的程序調用--------------
void i2cstart(void);	//總線上起動開始條件
uchar i2cwt(uchar a);	//把一個字節數據輸入器件
uchar i2crd(void);		//i2c讀要調用的函數
void i2cstop(void);		//總線上起動停止條件 
//------------------------------------------------------------------------

uchar * wt24c_fc(uchar *p, uint ad, uchar n);	//向24Cxx寫入數據wt24c_h()所要調用的函數

//向24Cxx寫入數據
//參數: *p_rsc要輸出數據的主機內存地址指針; ad_dst要寫入數據的i2c的地址(雙字節); num數據個數
//參數條件: ad_dst: ad_dst+(num-1)不能大于器件的最高地址; num必須>0;
void wt24c(uchar *p_rsc, uint ad_dst, uint num)
{   uint n;

    n=ad_dst/PAGE_SIZE;		//確定地址與塊地址的差
	if(n) n=(ulong)PAGE_SIZE*(n+1)-ad_dst;	
	else n=PAGE_SIZE-ad_dst;
		
    if(n>=num)		//如果ad_dst所在的數據塊的末尾地址 >= ad_dst + num, 就直接寫入num個數據
    {	wt24c_fc(p_rsc, ad_dst, num);
    	if(syserr!=0) return;
    }
    else			//如果ad_dst所在的數據塊末尾地址 < ad_dst + num, 就先寫入ad_dst所在的數據塊末尾地址與 ad_dst 之差個數據
    {   p_rsc=wt24c_fc(p_rsc, ad_dst, n);
    	if(syserr!=0) return;
		
		num-=n;     //更新剩下數據個數
        ad_dst+=n;	//更新剩下數據的起始地址

        //把剩下數據寫入器件
        while(num>=PAGE_SIZE)	//先按PAGE_SIZE為長度一頁一頁的寫入
        {	p_rsc=wt24c_fc(p_rsc, ad_dst, PAGE_SIZE);
        	if(syserr!=0) return;
        	
            num-=PAGE_SIZE;		//更新剩余數據個數
        	ad_dst+=PAGE_SIZE;	//更新剩下數據的起始地址
		}
        
		if(num)			//把最后剩下的小于一個PAGE_SIZE長度的數據寫入器件
			wt24c_fc(p_rsc, ad_dst, num);
    }
}


//從24cxx讀出數據
//參數: *p_dst要讀入數據的主機內存地址指針; ad_rsc要輸出數據的i2c的地址(整形); num數據個數(整形)
//參數條件:  ad_dst+(num-1)不能大于器件的最高地址; num必須>0;
void rd24c(uchar *p_dst, uint ad_rsc, uint num)
{   uchar t=0;

	#if e2prom<32
	t=ad_rsc>>8;
	t<<=1;
	#endif
		
	i2cstart();					//發送起始信號
		
	if(i2cwt(W_ADD_COM+t))		//發送寫字節命令及器件地址
	{	
		#if e2prom>16
		i2cwt(ad_rsc>>8);		//ad_rsc的高位,  發送要讀出數據的地址
		#endif
		i2cwt(ad_rsc);			//ad_rsc的低位
				
		i2cstart();				//再發送起始信號
		i2cwt(R_ADD_COM+t);		//發送SLA_R, 讀命令字節及器件地址
				
		for(;num>0;num--)
		{   *p_dst=i2crd();		//從器件讀出一個字節
			p_dst++;
		}
	}
	else syserr=I2C_ERR;		//寫字節命令及器件地址錯或對方無應答
		
	i2cstop();

}



//向24Cxx寫入數據wt24c_h()所要調用的函數
//返回寫入n個字節后的主機內存指針
uchar * wt24c_fc(uchar *p, uint ad, uchar n)
{	uchar t=0;

	#if e2prom<32
	t=ad>>8;
	t<<=1;
	#endif
	
	i2cstart();					//發送起始信號
		
	if(i2cwt(W_ADD_COM+t))		//發送寫字節命令及器件地址
	{	
		#if e2prom>16
		i2cwt(ad>>8);			//ad_dst的高位到器件
		#endif
		i2cwt(ad);				//ad_dst的低位到器件
			
		for(;n>0;n--)			//發送要寫入的數據
		{   i2cwt(*p);
			p++;
		}
	}
	else syserr=I2C_ERR;		//寫字節命令及器件地址錯
	
	i2cstop();
    tms(6);						//延時6ms
	
	return(p);
}



//-------------------------------以下為其它I2總線器件可調用的函數--------------------------

//起始信號
void i2cstart(void)
{   
	SCL_L; DELAY_us;
    SDA_H; DELAY_us;
    SCL_H; DELAY_us;
    SDA_L; DELAY_us;
    SCL_L; DELAY_us;
}


//把一個字節數據輸入器件,并以收到應答信號為止
//寫入成功返回1,失敗返回0
uchar i2cwt(uchar a)
{   uchar i;
	
    for(i=0;i<8;i++)
    {   SCL_L; DELAY_us;
       	if((a<<i)&0x80) SDA_H;
    	else SDA_L;
    	DELAY_us;
        SCL_H; DELAY_us;
    }
    SCL_L; DELAY_us;
    SDA_H; DELAY_us;
    SCL_H; DELAY_us;
	
	SDA_TO_IN;			//如果是avr單片機,就設SDA引腳位輸入狀態
	
    if(SDA_IF_L)		//測試有無應答
    {	SDA_TO_OUT;
    	return(1);		//有應答
    }
    else
    {	SDA_TO_OUT;
    	return(0);		//無應答
    }
}


//i2c讀要調用的函數
//從器件讀出一個字節
uchar i2crd(void)
{   uchar i,temp;
            
    for(i=0;i<8;i++)
    {   SCL_L; DELAY_us;	
        SDA_H; DELAY_us;    //置數據線接上內部上拉(數據輸入方式),此為必須
        SCL_H; DELAY_us;
        temp<<=1;
        
        SDA_TO_IN;			//如果是avr單片機,就設SDA引腳位輸入狀態
        
		if(SDA_IF_H) temp+=1;
        DELAY_us;
        
        SDA_TO_OUT;			//如果是avr單片機,就設SDA引腳位輸出狀態
	}
    SCL_L; DELAY_us;		//主器件應答脈沖
    SDA_L; DELAY_us;
    SCL_H; DELAY_us;
    return(temp);
}
	

//停止信號
void i2cstop(void)
{   SCL_L; DELAY_us;
    SDA_L; DELAY_us;
    SCL_H; DELAY_us;
    SDA_H;
}

//--------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕国产一区二区| 日本乱人伦一区| 日韩欧美一区在线| 午夜视频在线观看一区| 欧美吻胸吃奶大尺度电影| 成人欧美一区二区三区1314| 国产精品一区二区果冻传媒| 欧美一区二区三区电影| 国产日产欧美一区| 国产99久久久国产精品| 国产欧美一区视频| 成人免费毛片aaaaa**| 亚洲欧美一区二区在线观看| 成人aaaa免费全部观看| 麻豆国产91在线播放| 5858s免费视频成人| 久久狠狠亚洲综合| 欧美国产精品久久| 91视频观看视频| 亚洲影院理伦片| 正在播放亚洲一区| 精品一区二区三区免费视频| 久久伊人蜜桃av一区二区| 国产高清一区日本| 亚洲你懂的在线视频| 激情都市一区二区| 久久夜色精品国产欧美乱极品| 国产一区二区三区香蕉| 1024成人网| 7777精品伊人久久久大香线蕉超级流畅 | 18成人在线观看| 欧美日韩国产免费| 国产成人精品aa毛片| 一区二区在线免费| 欧美精品一区二区三区蜜臀| 成人av免费在线观看| 午夜国产精品影院在线观看| 国产亚洲一区二区在线观看| 97se亚洲国产综合自在线| 日本怡春院一区二区| 国产精品毛片大码女人| 91麻豆精品国产91久久久更新时间| 激情久久五月天| 亚洲午夜久久久| 亚洲国产精品激情在线观看 | 国产a区久久久| 免费精品视频最新在线| 一区二区三区四区在线免费观看| 精品久久人人做人人爱| 欧美人与性动xxxx| 91视频观看视频| 成人永久免费视频| 国产在线观看免费一区| 日本不卡中文字幕| 午夜精品福利在线| 一区二区激情视频| 亚洲欧美另类久久久精品 | 亚洲欧美怡红院| 日本一区二区成人在线| 国产亚洲欧美日韩日本| 欧美一级在线观看| 日韩一区二区电影在线| 制服丝袜成人动漫| 91精品国产全国免费观看| 欧美性受xxxx| 欧美日韩一区二区三区在线看| 色久综合一二码| 亚洲欧美激情小说另类| 亚洲靠逼com| 亚洲自拍偷拍网站| 日韩黄色片在线观看| 肉肉av福利一精品导航| 老司机一区二区| 成人性色生活片| 色综合天天综合网天天看片| 91福利在线免费观看| 欧美一区二视频| 久久久美女艺术照精彩视频福利播放| 久久免费看少妇高潮| 国产精品天天看| 樱花影视一区二区| 久久超级碰视频| 99视频在线精品| 在线成人高清不卡| 国产日韩欧美麻豆| 亚洲综合av网| 国内精品久久久久影院薰衣草 | 精品三级在线看| 国产精品少妇自拍| 亚洲综合另类小说| 狠狠狠色丁香婷婷综合激情| 成人av网站在线| 欧美午夜影院一区| 久久精品人人做人人综合| 亚洲综合一二区| 国产一二精品视频| 欧洲精品在线观看| 日韩女优电影在线观看| 亚洲视频综合在线| 久久丁香综合五月国产三级网站| 从欧美一区二区三区| 91精品国产入口在线| 亚洲免费在线看| 福利电影一区二区| 欧美一级黄色片| 亚洲一区电影777| 国产成人av电影免费在线观看| 欧美日本不卡视频| 一区二区成人在线视频| 成人中文字幕电影| 2欧美一区二区三区在线观看视频| 一区二区三区在线影院| 福利电影一区二区| 久久久九九九九| 久久精工是国产品牌吗| 91精品国产综合久久精品麻豆| 亚洲码国产岛国毛片在线| 国v精品久久久网| 久久久久久麻豆| 国产一区二区三区久久悠悠色av| 4438x亚洲最大成人网| 亚洲福利一区二区三区| 91福利在线免费观看| 亚洲乱码国产乱码精品精小说| 成人网页在线观看| 国产欧美视频在线观看| 色综合久久久久久久久| 国产成人激情av| 日本一区二区视频在线| 国产成人鲁色资源国产91色综| www激情久久| 久久综合色之久久综合| 久久精品国产第一区二区三区| 欧美一三区三区四区免费在线看| 天天影视网天天综合色在线播放| 欧美色老头old∨ideo| 日韩在线观看一区二区| 欧美成人精品1314www| 黑人巨大精品欧美黑白配亚洲| 久久久精品影视| 中文字幕一区二区三区不卡 | 久久久影院官网| 99热精品一区二区| 亚洲国产视频a| 精品精品国产高清一毛片一天堂| 国产精品性做久久久久久| 亚洲天堂网中文字| 日韩一卡二卡三卡四卡| 国产不卡视频在线观看| 国产成人在线免费| 亚洲三级在线免费| 日韩视频在线观看一区二区| 成人免费毛片嘿嘿连载视频| 天天综合网 天天综合色| 久久久亚洲高清| 在线亚洲一区二区| 国产一区二区三区在线看麻豆| 亚洲天堂成人网| 久久影院午夜片一区| 欧美日韩在线电影| 成人免费电影视频| 免费黄网站欧美| 一区二区三区中文字幕精品精品| 亚洲欧洲av另类| 在线视频国产一区| 亚洲男人天堂一区| 欧美在线观看一二区| 激情久久久久久久久久久久久久久久| 午夜激情一区二区| 日日摸夜夜添夜夜添精品视频| 奇米精品一区二区三区在线观看一 | 日韩视频免费观看高清完整版在线观看| 337p亚洲精品色噜噜狠狠| 欧美肥妇毛茸茸| 91福利在线观看| 97se亚洲国产综合自在线不卡 | 成人激情校园春色| 成人avav在线| jiyouzz国产精品久久| 国产91在线观看| 国产成人午夜精品5599| 国产综合久久久久影院| 国产美女一区二区三区| 国产精品一区二区在线观看不卡| 久久se精品一区精品二区| 寂寞少妇一区二区三区| 国产一区二区免费在线| 成人永久aaa| 99久久99精品久久久久久| 欧美精品一区二区三区四区| 欧美大片一区二区| 日本一区二区视频在线| 亚洲精品视频一区二区| 亚洲国产你懂的| 久久精品国产亚洲aⅴ | 国产真实乱偷精品视频免| 成人av在线看| 欧美三片在线视频观看| 久久久久综合网| 亚洲一区二区高清|