#include "reg52.h"
#include "intrins.h"
#define DELAY_TIME 5/*宏定义 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);/*延迟5us*/
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 add,unsigned 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 char read_eeprom(unsigned char add)
{
unsigned char da;
i2c_start();
i2c_sendbyte(0xa0);
i2c_waitack();
i2c_sendbyte(add);
i2c_waitack();
i2c_start();
i2c_sendbyte(0xa1);
i2c_waitack();
da = i2c_receivebyte();
i2c_sendack(0);
i2c_stop();
return da;
}
#endif
#ifdef ADC_PCF8591 /** ADC芯片PCF8591操作函数 */
/**
* @brief PCF8591初始化
*
* @param[in] none
* @param[out] none
* @return none
*/
void init_pcf8591(void)
{
i2c_start();
i2c_sendbyte(0x90);
i2c_waitack();
i2c_sendbyte(0x00); //ADC通道
i2c_waitack();
i2c_stop();
operate_delay(10);
}
/**
* @brief 通过I2C总线读取ADC结果
*
* @param[in] none
* @param[out] temp - AD转换结果
* @return - temp
*/
unsigned char adc_pcf8591(void)
{
unsigned char temp;
i2c_start();
i2c_sendbyte(0x91);
i2c_waitack();
temp = i2c_receivebyte();
i2c_sendack(1);
i2c_stop();
return temp;
}
#endif
没有合适的资源?快使用搜索试试~ 我知道了~
ADC.rar_stc51 adc_配置adc1源代码
共42个文件
bak:8个
lst:4个
obj:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 130 浏览量
2022-09-20
22:23:52
上传
评论
收藏 86KB RAR 举报
温馨提示
stc89c51单片机使用1个定时器实现adc转换源代码
资源推荐
资源详情
资源评论
收起资源包目录
ADC.rar (42个子文件)
rb2控制后三位数码管0~256(AD IIC)
ex10.c 2KB
ADC.uvproj 13KB
ex10.LST 4KB
ex10.dsp 3KB
e11.OBJ 6KB
e11.uvopt 56KB
ADC.uvgui.zhu 67KB
STARTUP.LST 14KB
e11.LST 6KB
e11.opt.bak 1KB
e11_Uv2.Bak 2KB
e11.Uv2.bak 2KB
i2c.c 4KB
ADC 11KB
ADC.plg 239B
e11.plg 207B
e11.uvproj 13KB
ADC.M51 15KB
ADC.uvgui.liao 66KB
ex10.ncb 33KB
e11.hex 2KB
e11.M51 16KB
ADC.uvgui_Administrator.bak 67KB
e11_uvopt.bak 56KB
ex10.dsw 516B
e11 12KB
ADC.uvopt 55KB
i2c.OBJ 7KB
ADC_uvopt.bak 6KB
i2c.LST 9KB
ex10.plg 694B
STARTUP.A51 6KB
ADC.uvgui.Administrator 67KB
e11.c 3KB
ADC.hex 2KB
e11.lnp 50B
e11_Opt.Bak 2KB
i2c.h 700B
ex10.OBJ 5KB
STARTUP.OBJ 749B
ADC_uvproj.bak 13KB
ex10.opt 48KB
共 42 条
- 1
资源评论
weixin_42653672
- 粉丝: 93
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功