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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 模擬i2c總線.txt

?? 用單片機(jī)I/O口模擬總線形式的通用驅(qū)動(dòng)程序
?? TXT
字號(hào):
在單片機(jī)應(yīng)用中,I2C(I方C)總線一種簡(jiǎn)單,雙向的二線制同步串行總線,它只需要兩根串行線,脈沖線,就可以在總線與連接的器件之間傳送信息, 它不外乎有以下幾個(gè)特點(diǎn):
a.每個(gè)連接到總線上的器件都可以進(jìn)行唯一的尋址,還可建立起簡(jiǎn)單的主從關(guān)系,主器件既可作為發(fā)送器,也可作為接收器.
b.它帶競(jìng)爭(zhēng)電路和仲裁電路,可以接收多個(gè)主器件發(fā)送的數(shù)據(jù),而這些數(shù)據(jù)不會(huì)產(chǎn)混亂.
c.同步脈沖可以允許器件可以通過總線以不同的波特率進(jìn)行通信.
d.因?yàn)橹挥袃筛€,連接簡(jiǎn)單,方便.
     對(duì)于MCS51系列來(lái)講,內(nèi)部并沒I2C總線接口,在這種情況下,可以采用軟件模擬的方法來(lái)寫出I2C總線的操作,下面我的程序就在開始處定義哪個(gè)引腳作為數(shù)據(jù)線SDA,哪個(gè)引腳作為脈沖線,請(qǐng)看我的程序(C51寫的,總共有8個(gè)函數(shù)來(lái)模擬I2C總線):
Common.h File
#pragma  LA DB SB OE CD OT(SPEED,6)
//LA indicate LARGE Compling Mode-All local and global variables are located in external-ram. 
//DB indicate DEBUG 
//SB indicate SYMBOL
//OE indicate OBJECTEXTEND
//CD indicate CODE  //Generate ASM Code
//OT indicate OPTIMIZATION
#include <stdio.h>
#include <reg51.h>
#include <intrins.h>
#include <stdlib.h>
#pragma REGPARMS
#pragma SAVE
#define BOOL bit
#define BYTE unsigned char
#define UINT unsigned int
#define ULONG unsigned long
#define HIGH 1
#define LOW 0
#define TRUE 1
#define FALSE 0
#define MAXLONGS  2147483647
#define MINLONGS  -2147483648
#define MAXINTS   32767
#define MININTS   -32768
#define MAXLONGU  4294967295
#define MAXINTU   65535
#define BLOCKLOW 0x0000 //The start-address in AT24C64 is 0x0000
#define BLOCKSIZE 0x20 //Each block is 32 bytes
#define BLOCKNUM  0xC8 //At best 200,Only Save the newest 200 records.
#define BLOCKHIGH 0x18FF//The end-address in AT24C64 is 0x18FF
#define OSC       24000000 //Osillcator Frequency
#define BAUDRATE  9600
#define OTV    256-OSC/12/BAUDRATE/32 //character O represents Obtain,character T represents Timer,character V represents Value
//IMPORTANT ANNOUNCEMENT:I use a word 0x1FFC,0x1FFD to save the next block's address and 0x1FFE,0x1FFF to save the block's no.
sbit GUN=0x85;//PIN P05
sbit SCL=0xFF;     //Undefined bit-address,which will be defined in function:DEFI2C
sbit SDA=0xFF;     //Undefined bit-address,which will be defined in function:DEFI2C
sbit SHKL=0xFF;    //Undefined bit-address,which will be defined in function:DEFI2C
sbit SHKH=0xFF;    //Undefined bit-address,which will be defined in function:DEFI2C
sbit KH0=0xFF;     //Undefined bit-address,which will be defined in function:DEFI2C
sbit KH1=0xFF;     //Undefined bit-address,which will be defined in function:DEFI2C
sbit KH2=0xFF;     //Undefined bit-address,which will be defined in function:DEFI2C 
extern void DEFI2C(char *name) //To define which pin is SDA and which pin is SCL
extern void I2CInit()   //Initialization For I2C Bus
extern void I2CStart()  //Start I2C Bus
extern void I2CStop();  //Stop  I2C Bus
extern bit  I2CClock(); //return SDA while SCL is HIGH
extern void I2CDelay(); //Delay
extern void I2CAck();  //Answer 
extern bit  I2CSend(BYTE I2CData);//Send data with I2C Bus
extern BYTE I2CReceive();  //Receive data

Common.c
void DEFI2C(char *name)
{
    //Todo:add your codes here....
    //Announcement:If you question me why use the function DEFI2C?
    //Well,the function will be used to define which PIN is SCL and which PIN is SDA,especially there are more than 1 I2C 
    //equipment in your circuit.In this sitiuation,we write a function for defining I2C Bus named DEFI2C.... 
}
void I2CStart()
{
   SCL=HIGH;
   I2CDelay();
   SDA=LOW;
   I2CDelay();
   SCL=LOW;
   I2CDelay();
}
void I2CStop()
{
   SDA=LOW;
   I2CDelay();
   SCL=HIGH;
   I2CDelay();
   SDA=HIGH;
   I2CDelay();
   SCL=LOW;
   I2CDelay();
}
void I2CInit()
{
   SCL=LOW;
   I2CStop();
}
bit I2CClock() //return SDA while SCL is HIGH
{
   bit sample;
   SCL=HIGH;
   I2CDelay();
   sample=SDA;
   SCL=LOW;
   I2CDelay();
   return sample;
}
bit I2CSend(BYTE I2CData)
{
   BYTE i;
   for(i=0;i<8;i++)
   {
     SDA=(bit)(((I2CData) & 0x80) / 0x80) ;
     I2CData=I2CData << 1;
     I2CClock();
   }
   SDA=HIGH;
   return (~I2CClock());
}
void I2CAck()
{
   SDA=LOW;
   I2CClock();
   SDA=HIGH;
}
void I2CDelay()
{
   BYTE ll;
   for(ll=0;ll<100;ll++)
   {
      ;
   }
}
BYTE I2CReceive()
{
   BYTE I2CData=0;
   BYTE kk;
   for(kk=0;kk<8;kk++)
   {
      I2CData*=2;
      if(I2CClock())
      {
          I2CData++;
      }
   }
   return I2CData;
}





單片機(jī)模擬I2C總線及24C02(I2C EEPROM)讀寫實(shí)例(源代碼) 
 
 
 
[ 作者:StephenZhu    轉(zhuǎn)貼自:xnovo    點(diǎn)擊數(shù):393    更新時(shí)間:2005-6-19    文章錄入:白樺 ] 
 
 
減小字體 增大字體

/* 51系列單片機(jī)在使用時(shí),有時(shí)需要模擬I2C總線, */

/* 這里舉出一個(gè)實(shí)例(讀寫串行EEPROM芯片at2402) */

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

/* Name:AT24C02存儲(chǔ)器的讀寫程序,用到I2C總線,含相對(duì)獨(dú)立的I2C總線讀寫函數(shù) */

/* Language: C51單片機(jī)編程語(yǔ)言 */

/* Platform: Win98,Intel Celeron 433 Processor,偉福仿真器,仿真8751 */

/* Author: StephenZhu javasdk@163.com */

/* Date: 2003年5月21日,5月22日,5月29日 */

/* Version: 1.1.1 */

/* Others: None */

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

#include<string.h>

#include<reg52.h>

#include<intrins.h>

#define DELAY_TIME 60 /*經(jīng)實(shí)驗(yàn),不要小于50!否則可能造成時(shí)序混亂*/

#define TRUE 1

#define FALSE 0

sbit SCL=P1^7;/*假設(shè)由P1.7和P1.6控制*/

sbit SDA=P1^6;

/********** Function Definition 函數(shù)定義 ************/

void DELAY(unsigned int t) /*延時(shí)函數(shù)*/

{

while(t!=0)

t--;

}

void I2C_Start(void)

{

/*啟動(dòng)I2C總線的函數(shù),當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)負(fù)跳變*/

SDA=1;

SCL=1;

DELAY(DELAY_TIME);

SDA=0;

DELAY(DELAY_TIME);

SCL=0;

DELAY(DELAY_TIME);

}

void I2C_Stop(void)

{

/*終止I2C總線,當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)正跳變*/

SDA=0;

SCL=1;

DELAY(DELAY_TIME);

SDA=1;

DELAY(DELAY_TIME);

SCL=0;

DELAY(DELAY_TIME);

}

void SEND_0(void) /* SEND ACK */

{

/*發(fā)送0,在SCL為高電平時(shí)使SDA信號(hào)為低*/

SDA=0;

SCL=1;

DELAY(DELAY_TIME);

SCL=0;

DELAY(DELAY_TIME);

}

void SEND_1(void)

{

/*發(fā)送1,在SCL為高電平時(shí)使SDA信號(hào)為高*/

SDA=1;

SCL=1;

DELAY(DELAY_TIME);

SCL=0;

DELAY(DELAY_TIME);

}

bit Check_Acknowledge(void)

{

/*發(fā)送完一個(gè)字節(jié)后檢驗(yàn)設(shè)備的應(yīng)答信號(hào)*/

SDA=1;

SCL=1;

DELAY(DELAY_TIME/2);

F0=SDA;

DELAY(DELAY_TIME/2);

SCL=0;

DELAY(DELAY_TIME);

if(F0==1)

return FALSE;

return TRUE;

}

void WriteI2CByte(char b)reentrant

{

/*向I2C總線寫一個(gè)字節(jié)*/

char i;

for(i=0;i<8;i++)

if((b<<i)&0x80)

SEND_1();

else

SEND_0();

}



char ReadI2CByte(void)reentrant

{

/*從I2C總線讀一個(gè)字節(jié)*/

char b=0,i;

for(i=0;i<8;i++)

{

SDA=1; /*釋放總線*/

SCL=1; /*接受數(shù)據(jù)*/

DELAY(10);

F0=SDA;

DELAY(10);

SCL=0;

if(F0==1)

{

b=b<<1;

b=b|0x01;

}

else

b=b<<1;

}

return b;

}



/**********以下為讀寫24c02的函數(shù)**********/

void Write_One_Byte(char addr,char thedata)

{

bit acktemp=1;

/*write a byte to mem*/

I2C_Start();

WriteI2CByte(0xa0);

acktemp=Check_Acknowledge();

WriteI2CByte(addr);/*address*/

acktemp=Check_Acknowledge();

WriteI2CByte(thedata);/*thedata*/

acktemp=Check_Acknowledge();

I2C_Stop();

}

void Write_A_Page(char *buffer,char addr)

{

bit acktemp=1;

bit wrtmp;

int i;

/*write a page to at24c02*/

I2C_Start();

WriteI2CByte(0xa0);

acktemp=Check_Acknowledge();

WriteI2CByte(addr);/*address*/

acktemp=Check_Acknowledge();

for(i=0;i<7;i++)

{

WriteI2CByte(buffer[i]);

if(!Check_Acknowledge())

{

I2C_Stop();

}

}



I2C_Stop();





}

char Read_One_Byte(char addr)

{ bit acktemp=1;

char mydata;

/*read a byte from mem*/

I2C_Start();

WriteI2CByte(0xa0);

acktemp=Check_Acknowledge();

WriteI2CByte(addr);/*address*/

acktemp=Check_Acknowledge();

I2C_Start();

WriteI2CByte(0xa1);

acktemp=Check_Acknowledge();



mydata=ReadI2CByte();

acktemp=Check_Acknowledge();

return mydata;

I2C_Stop();

}

void Read_N_Bytes(char *buffer,char n,char addr)

{

bit acktemp=1;

int i=0;

/*read 8 bytes from mem*/

I2C_Start();

WriteI2CByte(0xa0);

acktemp=Check_Acknowledge();

WriteI2CByte(addr);/*address*/

acktemp=Check_Acknowledge();

I2C_Start();

WriteI2CByte(0xa1);

acktemp=Check_Acknowledge();





for(i=0;i<n;i++)

{

buffer[i]=ReadI2CByte();

if(i!=n-1)

SEND_0(); /*發(fā)送應(yīng)答*/

else

SEND_1(); /*發(fā)送非應(yīng)答*/

}

I2C_Stop();

}



void main()

{

int i;

char mybyte;

char myarray[8];

char myarray2[8];

char rdarray[16];



for(i=0;i<8;i++)

{

myarray[i]=i;

myarray2[i]=i+0x08; 

}

Write_One_Byte(0x20,0x28);

Write_A_Page(myarray,0x10);

Write_A_Page(myarray2,0x18);

mybyte=Read_One_Byte(0x20);

Read_N_Bytes(rdarray,16,0x10);

}
 
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产观看| 色噜噜狠狠色综合欧洲selulu| 久久综合999| 欧美亚洲国产怡红院影院| 国产美女精品人人做人人爽 | 亚洲欧美日韩国产成人精品影院| 欧美日韩免费不卡视频一区二区三区| 国产精选一区二区三区| 性做久久久久久| 日韩伦理电影网| 精品乱码亚洲一区二区不卡| 欧美色综合网站| av一二三不卡影片| 国产成人免费9x9x人网站视频| 亚洲高清免费观看高清完整版在线观看| 精品国产百合女同互慰| 7777精品伊人久久久大香线蕉完整版 | 欧美日韩视频在线观看一区二区三区| 国产一区二区福利| 精品亚洲免费视频| 亚洲国产综合91精品麻豆| 国产精品久久久久久久久搜平片| 久久综合九色综合欧美98 | 欧美一区二区三区电影| 91国在线观看| 色婷婷av久久久久久久| 成人18精品视频| 国产成人在线观看| 韩国v欧美v日本v亚洲v| 久久国产尿小便嘘嘘尿| 亚洲成av人片在线| 亚洲国产精品久久不卡毛片 | 在线看国产一区二区| 91视视频在线观看入口直接观看www| 国产精品原创巨作av| 韩国在线一区二区| 国产在线国偷精品产拍免费yy| 秋霞午夜av一区二区三区| 日本欧洲一区二区| 蜜臀a∨国产成人精品| 久久精品国产成人一区二区三区| 日韩精品国产欧美| 麻豆精品一区二区三区| 久久超碰97中文字幕| 久久se精品一区二区| 国产精品自在欧美一区| 国产成人av一区| 成人av在线播放网址| 99精品在线观看视频| 在线精品视频免费观看| 欧美视频在线一区| 91精品在线一区二区| 91精品国产欧美一区二区成人| 欧美精品粉嫩高潮一区二区| 日韩欧美在线不卡| 国产亚洲精久久久久久| 久久久精品tv| 亚洲欧洲精品一区二区三区不卡| 亚洲欧美一区二区三区极速播放| 一区二区三区精品视频在线| 午夜精品影院在线观看| 蜜臀av一级做a爰片久久| 国产精品一区在线观看乱码| 色综合久久九月婷婷色综合| 欧美日韩一级二级三级| 欧美大片在线观看一区二区| 国产精品美女www爽爽爽| 亚洲制服丝袜在线| 蜜桃av一区二区在线观看 | 日本久久电影网| 69成人精品免费视频| 久久精品人人做人人综合| 日韩伦理av电影| 日本最新不卡在线| 成人夜色视频网站在线观看| 欧美在线观看视频一区二区| 精品久久久影院| 亚洲综合区在线| 激情国产一区二区| 91精品福利在线| 久久综合九色综合97婷婷| 亚洲一区二区三区四区不卡| 国产一区二区三区日韩| 在线精品视频免费观看| 国产午夜精品一区二区三区视频 | 亚洲精品中文字幕在线观看| 蜜臀av性久久久久蜜臀av麻豆| 成人精品gif动图一区| 这里只有精品99re| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 视频一区在线视频| 成a人片亚洲日本久久| 日韩免费看网站| 一个色综合av| 风间由美性色一区二区三区| 91精品久久久久久久99蜜桃| 亚洲人成亚洲人成在线观看图片| 精品一区二区三区视频在线观看| 在线一区二区三区四区五区| 国产日韩精品一区二区三区| 三级一区在线视频先锋| 91蝌蚪国产九色| 中文字幕精品—区二区四季| 青青草97国产精品免费观看| 在线视频中文字幕一区二区| 日本一区二区三区四区| 麻豆国产精品一区二区三区 | 精品视频色一区| 亚洲欧洲性图库| 国产成人h网站| www国产亚洲精品久久麻豆| 日韩中文字幕麻豆| 欧美午夜片在线看| 一区二区三区美女视频| 99视频超级精品| 国产精品五月天| 国产成人综合视频| 久久亚洲精精品中文字幕早川悠里 | 视频一区二区三区在线| 一本一道综合狠狠老| 国产精品理论在线观看| 国产成人在线网站| 久久品道一品道久久精品| 男女男精品视频网| 在线播放中文一区| 三级影片在线观看欧美日韩一区二区| 91成人网在线| 一区二区理论电影在线观看| 91免费国产在线| 中文字幕日韩av资源站| 99re在线精品| 亚洲免费av高清| 欧美性生活影院| 亚洲狠狠爱一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 亚洲美女视频一区| 色妞www精品视频| 亚洲激情校园春色| 在线观看一区二区精品视频| 亚洲妇女屁股眼交7| 欧美老肥妇做.爰bbww| 午夜a成v人精品| 91精品欧美综合在线观看最新| 香蕉影视欧美成人| 日韩精品一区二区三区四区视频| 精品一区二区三区久久久| 久久综合久久99| 成人做爰69片免费看网站| 综合激情成人伊人| 欧美亚洲日本一区| 美国一区二区三区在线播放| 精品蜜桃在线看| 国产福利不卡视频| 亚洲欧美激情插| 欧美精品 日韩| 久久99国产精品久久| 欧美高清在线视频| 欧美最新大片在线看| 麻豆成人久久精品二区三区红| 久久众筹精品私拍模特| av激情综合网| 视频在线在亚洲| 久久久午夜精品理论片中文字幕| 粉嫩av一区二区三区粉嫩 | 国产精品123| 亚洲少妇30p| 欧美一级理论片| 成人激情校园春色| 日韩中文字幕区一区有砖一区| 精品国产污网站| 色婷婷亚洲综合| 激情深爱一区二区| 亚洲免费观看在线视频| 日韩欧美区一区二| 91在线免费看| 精品一区二区三区在线播放| 亚洲欧美日韩国产综合| 欧美一区二区黄| av日韩在线网站| 久久精品国产精品青草| 亚洲日本中文字幕区| 91精品国产aⅴ一区二区| 国产成人鲁色资源国产91色综| 亚洲电影激情视频网站| 久久久久国产精品麻豆ai换脸| 色婷婷av一区二区| 国产成人精品综合在线观看 | 不卡视频免费播放| 蜜桃av一区二区三区| 一区二区三区自拍| 国产午夜精品理论片a级大结局| 欧美日韩精品系列| 99re成人精品视频| 国内外成人在线| 亚洲一区二区三区在线看| 国产精品日韩成人| 久久夜色精品国产噜噜av| 欧美疯狂做受xxxx富婆| 色哟哟日韩精品| 成人精品国产免费网站|