|
因為STC12系列沒有I2C模塊,所以使用IO模擬I2C總線的方法實現的。1、EEPROM的讀寫,I2C通訊。
2、STC12系列是1T指令周期的,且已用示波器測量,delay(1);約1us;(程序中所用延時函數);
3、所有元件時序,皆按手冊操作,高效穩定可靠,會附件PDF給大家。
4、I2C總線是用的P1.3,P1.4 IO;
24C02原理圖.png (15.4 KB, 下載次數: 132)
下載附件
2017-5-13 20:27 上傳
0.png (74.63 KB, 下載次數: 122)
下載附件
2017-5-13 22:00 上傳
單片機源程序如下:
- #include "I2C.h"
- sbit I2C_SDA=P1^3;
- sbit I2C_SCL=P1^4;
- void I2C_Delay(u16 x)
- {
- while(x--);
- }
- void I2C_Start() //產生I2C的啟動信號
- {
- I2C_SDA=1;
- I2C_SCL=1;
- I2C_Delay(5); //4.7us
- I2C_SDA=0;
- I2C_Delay(5);
- I2C_SCL=0;
- }
- void I2C_Stop() //產生I2C的停止信號
- {
- I2C_SCL=0;
- I2C_SDA=0;
- I2C_Delay(5);
- I2C_SCL=1;
- I2C_Delay(5);
- I2C_SDA=1;
- }
- void I2C_Send(u8 dat) //按照I2C的協議發送一個字節
- {
- u8 i;
- for(i=0;i<8;i++)
- {
- I2C_SCL=0;
- I2C_SDA=dat>>7;
- I2C_SCL=1;
- dat<<=1;
- }
- }
- u8 Wait_Ack() //主機等待從機發送應答信號
- {
- u16 timeout;
- I2C_SCL=0;
- I2C_SDA=1;
- I2C_SCL=1;
- timeout=0;
- while(I2C_SDA)
- {
- if(timeout++>=500)
- {
- I2C_SCL=0;
- return 1; // 表示應答失敗
- }
- }
- I2C_SCL=0; //釋放SDA
-
- return 0;
- }
- u8 I2C_Receive() // 主機接收從機一個字節
- {
- u8 dat,i;
- for(i=0;i<8;i++)
- {
- dat<<=1;
- I2C_SCL=1;
- if(I2C_SDA)
- {
- // dat|=0x01;
- dat++;
- }
- I2C_SCL=0;
- }
- return dat;
- }
- void I2C_Ack() //主機向從機產生應答信號
- {
- I2C_SCL=0;
- I2C_SDA=0;
- I2C_SDA=1;
- I2C_SCL=1;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
I2C總線器件選型(包含8591應用).pdf
(385 KB, 下載次數: 73)
2017-5-13 20:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
24c02串行儲存器中文官方資料手冊.pdf
(994.32 KB, 下載次數: 79)
2017-5-13 20:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
24c02.zip
(66.04 KB, 下載次數: 266)
2017-5-13 20:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|