日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

c51單片機(jī)編程實例講解 c51單片機(jī)編程入門

>
自己學(xué)習(xí)記錄用,有些亂,
1、IIC,eeprom24c02驅(qū)動配置
本實驗是基于EEPROM的24C02驅(qū)動配置的編程,主要記錄一些編程的重點節(jié)點的理解:
1、IIC驅(qū)動配置:精準(zhǔn)的時鐘配置,計算每一步所需要的指令周期,相加是10us 。

c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


2、IIC的起始信號配置,根據(jù)IIC的時序特性配置 。
c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


3、IIC終止信號配置,根據(jù)IIC的時序特性配置 。
c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


4、I2cSendByte(unsigned char dat): 通過I2C發(fā)送一個字節(jié) 。在SCL時鐘信號高電平期間,保持發(fā)送信號SDA保持穩(wěn)定 。
c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


5、I2cReadByte(),函數(shù)功能 : 使用I2c讀取一個字節(jié)
c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


6、void At24c02Write(unsigned char addr,unsigned char dat) 函數(shù)功能 :向 24c02的一個地址寫入一個數(shù)據(jù) 。
c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


發(fā)送寫器件地址是根據(jù)24C02的電路特性和地址特性獲得 。24C02是有E0,E1,E2尋址,根據(jù)下面兩圖片可知是8位尋址,因E0、E1、E2引腳接地,而是寫所以,R/W位為零 。,即發(fā)送器件地址位0xa0,同理接收時,接收器件地址為0xa1.
c51單片機(jī)編程實例講解 c51單片機(jī)編程入門




c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


7、unsigned char At24c02Read(unsigned char addr)函數(shù)功能 : 讀取24c02的一個地址的一個數(shù)據(jù)
c51單片機(jī)編程實例講解 c51單片機(jī)編程入門


2、24C02或者24C16進(jìn)行字節(jié)、頁讀取、頁存取
  1. void i2cStart(void) //開始時序
  2. {
  3. SDA=1;
  4. SCL=1;
  5. _delay(2); //延時2μs
  6. SDA=0;
  7. _delay(2);
  8. SCL=0;
  9. }
  1. void i2cStop(void) //結(jié)束時序
  2. {
  3. SDA=0;
  4. _delay(2);
  5. SCL=1;
  6. _delay(2);
  7. SDA=1;
  8. }
  1. void i2cAck_MCU(void) //應(yīng)答時序
  2. {
  3. SDA=0;
  4. _delay(2);
  5. SCL=1;
  6. _delay(2);
  7. SCL=0;
  8. _delay(2);
  9. SDA=1;
  10. _delay(4);
  11. }
  1. void i2cNoAck_MCU(void) //非應(yīng)答時序
  2. {
  3. SDA=1;
  4. _delay(2);
  5. SCL=1;
  6. _delay(2);
  7. SCL=0;
  8. _delay(2);
  9. }
24C02/16存儲空間大小
24C02就是有2Kbit = 2000/8 = 250個字節(jié),24C16就是有16kbit = 2000個字節(jié),24C02一頁最多可以寫入8個字節(jié),因此可以分成32頁,24C16一頁最多可以寫入16個字節(jié),因此可以分成128頁 。
1、字節(jié)寫操作
void WriteByte_24LC16B(unsigned char input)
{
unsigned char bit_count;
for(bit_count=8;bit_count!=0;bit_count–)
{
_delay(2);
SDA=(_Bool)(input&0x80);
_delay(2);
SCL=1;
_delay(2);
SCL=0;
input=input<<1;
_delay(2);
}
SDA=1;
SDA_CTRL=1;//這里需要看自己使用的芯片設(shè)置SDA的IO口為輸入狀態(tài),我用的是HT45F67芯片,SDA端口設(shè)置為輸入狀態(tài),用于判斷SDA是否接到主機(jī)的應(yīng)答信號
_delay(2);
SCL=1;
_delay(2);
if(SDA == 1)
ack = 0;
else
ack = 1;
SCL=0;
SDA_CTRL=0; //此處根據(jù)自己所使用的芯片將SDA所在的Io口設(shè)置為輸出狀態(tài)
}
void Write_24LC16B(unsigned char Wdata,unsigned int RomAddress)
{
unsigned char block;

推薦閱讀