-
大小: 2KB文件类型: .rar金币: 2下载: 2 次发布日期: 2021-05-10
- 语言: 其他
- 标签: STC15F2K60S2
资源简介
STC15F2K60S2 iic 驱动程序 它的驱动不同于51,略有变化,仅供参考
代码片段和文件信息
#include “reg52.h“
#include “intrins.h“
#define DELAY_TIME 5
/** 定义I2C总线时钟线和数据线 */
sbit scl = P2^0;
sbit sda = P2^1;
/**
* @brief I2C总线中一些必要的延时
*
* @param[in] i - 延时时间调整.
* @return none
*/
void i2c_delay(unsigned char i)
{
do
{
_nop_();
}
while(i--);
}
/**
* @brief 产生I2C总线启动条件.
*
* @param[in] none
* @param[out] none
* @return none
*/
void i2c_start(void)
{
sda = 1;
scl = 1;
i2c_delay(DELAY_TIME);
sda = 0;
i2c_delay(DELAY_TIME);
scl = 0;
}
/**
* @brief 产生I2C总线停止条件
*
* @param[in] none
* @param[out] none.
* @return none
*/
void i2c_stop(void)
{
sda = 0;
scl = 1;
i2c_delay(DELAY_TIME);
sda = 1;
i2c_delay(DELAY_TIME);
}
/**
* @brief I2C发送一个字节的数据
*
* @param[in] byt - 待发送的字节
* @return none
*/
void i2c_sendbyte(unsigned char byt)
{
unsigned char i;
//
EA = 0;
for(i=0; i<8; i++){
scl = 0;
i2c_delay(DELAY_TIME);
if(byt & 0x80){
sda = 1;
}
else{
sda = 0;
}
i2c_delay(DELAY_TIME);
scl = 1;
byt <<= 1;
i2c_delay(DELAY_TIME);
}
EA = 1;
//
scl = 0;
}
/**
* @brief 等待应答
*
* @param[in] none
* @param[out] none
* @return none
*/
unsigned char i2c_waitack(void)
{
unsigned char ackbit;
scl = 1;
i2c_delay(DELAY_TIME);
ackbit = sda; //while(sda); //wait ack
scl = 0;
i2c_delay(DELAY_TIME);
return ackbit;
}
/**
* @brief I2C接收一个字节数据
*
* @param[in] none
* @param[out] da
* @return da - 从I2C总线上接收到得数据
*/
unsigned char i2c_receivebyte(void)
{
unsigned char da;
unsigned char i;
//
EA = 0;
for(i=0;i<8;i++){
scl = 1;
i2c_delay(DELAY_TIME);
da <<= 1;
if(sda)
da |= 0x01;
scl = 0;
i2c_delay(DELAY_TIME);
}
EA = 1;
//
return da;
}
/**
* @brief 发送应答
*
* @param[in] ackbit - 设定是否发送应答
* @return - none
*/
void i2c_sendack(unsigned char ackbit)
{
scl = 0;
sda = ackbit; //0:发送应答信号;1:发送非应答信号
i2c_delay(DELAY_TIME);
scl = 1;
i2c_delay(DELAY_TIME);
scl = 0;
sda = 1;
i2c_delay(DELAY_TIME);
}
/**
* @brief 读写操作过程中一些必要的延时
*
* @param[in] i - 指定延时时间
* @return - none
*/
void operate_delay(unsigned char t)
{
unsigned char i;
while(t--){
for(i=0; i<112; i++);
}
}
#ifdef EEPROM_AT24C02 /** EEPROM AT24C02操作函数 */
/**
* @brief 向AT24C02(add)中写入数据val
*
* @param[in] add - AT24C02存储地址
* @param[in] val - 待写入AT24C02相应地址的数据
* @return - none
*/
void write_eeprom(unsigned char addunsigned char val)
{
i2c_start();
i2c_sendbyte(0xa0);
i2c_waitack();
i2c_sendbyte(add);
i2c_waitack();
i2c_sendbyte(val);
i2c_waitack();
i2c_stop();
operate_delay(10);
}
/**
* @brief 从AT24C02(add)中读出数据da
*
* @param[in] add - AT24C02存储地址
* @param[out] da - 从AT24C02相应地址中读取到的数据
* @return - da
*/
unsigned cha
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4108 2012-10-23 15:04 i2c.c
文件 700 2012-08-21 14:00 i2c.h
----------- --------- ---------- ----- ----
4808 2
相关资源
- 3_STC15F2K60S2仿真操作
- STC15F2K60S2-AD资料
- STC15F2K60S2单片机例程集合
- STC15F2K60S2最小系统板原理图
- STC15F2K60S2中文资料
- 单片机STC15F2K60S2中文手册
- STC15F2K60S2系列单片机中文使用手册
- STC15F2K60S2读取DS18B20温度
- STC15F2K60S2系列学习板2.RAR
- 基于STC15F2K60S2单片机的温湿度+CO2测量
- AD批量生产PCB-STC15F2K60S2 + QN8025+M62429
- MY1690-12P MP3解码模块应用程序含驱动程
- STC15/STC15F2K60S2/STC15W4K32S4系列读取超声
- STC15F2K60S2串口通信程序
- STC15F2K60S2读取DHT11温湿度传感器数据串
- STC15/STC15F2K60S2/STC15W4K32S4系列读取MPU
- STC15F2K60S2 头文件
评论
共有 条评论