I2C_SCL=0; //時序要求,51單片機速度比較慢
}
}
/**
* @brief I2C主機接收從機一個字節,SCL為同步信號,高電平讀數據
* @param 無
* @retval 接收到的一個字節數據
*/
unsigned char I2C_ReceiveByte(void)
{
unsigned char i,Byte=0x00;
I2C_SDA=1; //主機釋放數據線SDA
for(i=0;i<8;i++)
{
I2C_SCL=1; //主機作為接收器
if(I2C_SDA) Byte|=(0x80>>i); //讀數據
I2C_SCL=0; //從機作為發送器,寫數據
}
return Byte;
}
/**
* @brief I2C主機發送應答
* @param AckBit 應答位,0為應答,1為非應答
* @retval 無
*/
void I2C_SendAck(unsigned char AckBit)
{
I2C_SDA=AckBit;
I2C_SCL=1;
I2C_SCL=0;
}
/**
* @brief I2C主機接收應答位
* @param 無
* @retval 接收到的應答位,0為應答,1為非應答
*/
unsigned char I2C_ReceiveAck(void)
{
unsigned char AckBit;
I2C_SDA=1;
I2C_SCL=1;
AckBit=I2C_SDA;
I2C_SCL=0;
return AckBit;
}
#ifndef _i2c_h_
#define _i2c_h_
void I2C_Start(void);
void I2C_Stop(void);
void I2C_SendByte(unsigned char Byte);
unsigned char I2C_ReceiveByte(void);
void I2C_SendAck(unsigned char AckBit);
unsigned char I2C_ReceiveAck(void);
#endif
3.6 AT24C02控制函數
#include #include 'i2c.h' #define AT24C02_ADDRESS 0xA0 /** * @brief AT24C02寫入一個字節 * @param WordAddress 要寫入字節的地址 * @param Data 要寫入的數據 * @retval 無 */ void AT24C02_WriteByte(unsigned char WordAddress,Data) { I2C_Start(); I2C_SendByte(AT24C02_ADDRESS); I2C_ReceiveAck(); I2C_SendByte(WordAddress); I2C_ReceiveAck(); I2C_SendByte(Data); I2C_ReceiveAck(); I2C_Stop(); } /** * @brief AT24C02讀取一個字節 * @param WordAddress 要讀出字節的地址 * @retval 讀出的數據 */ unsigned char AT24C02_ReadByte(unsigned char WordAddress) { unsigned char Data; I2C_Start(); I2C_SendByte(AT24C02_ADDRESS); I2C_ReceiveAck(); I2C_SendByte(WordAddress); I2C_ReceiveAck(); I2C_Start(); I2C_SendByte(AT24C02_ADDRESS|0x01); I2C_ReceiveAck(); Data=I2C_ReceiveByte(); I2C_SendAck(1); I2C_Stop(); return Data; } #ifndef _at24c02_h_ #define _at24c02_h_ void AT24C02_WriteByte(unsigned char WordAddress,Data); unsigned char AT24C02_ReadByte(unsigned char WordAddress); #endif 3.7 延時函數 #include void delayms(unsigned int xms) //@11.0592MHz { unsigned char i, j; while(xms--) { _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } } #ifndef _delayms_h_ #define _delayms_h_ delayms(unsigned int xms); #endif
上一篇:呼吸燈(PWM)+普中51單片機+江科大自化協
下一篇:AT24C02數據存儲+普中51單片機+江科大自化協
- 熱門資源推薦
- 熱門放大器推薦
設計資源 培訓 開發板 精華推薦
- LTC2975 的典型應用 - 具有準確輸入電流和能量測量功能的 4 通道 PMBU 電源系統管理器
- STM32 Nucleo-64 開發板,帶 STM32WB15CC,支持 Arduino、ST Morpho 連接
- 使用 Analog Devices 的 LT1302CN8-5 的參考設計
- MC33364臨界導通模式反激轉換器的典型應用電路
- AD9754-EB,用于 AD9754、14 位、125 MSPS 高性能 D/A 轉換器的評估板
- LTC1064-3,優于用于數據通信的貝塞爾線性相位濾波器
- NCS2001SN2T1G 0.9V單電源運放正電容乘法器典型應用電路
- AM6TW-4803DH35Z ±3.3V 6 瓦雙路輸出 DC/DC 轉換器的典型應用
- 使用 Analog Devices 的 LTC1538IG-AUX 的參考設計
- DC1198B-B,使用 LTM4607EV、6 至 36 Vin 至 12V、5A 高效降壓-升壓 DC/DC 模塊穩壓器的演示板