【STC15F单片机】2. IIC通信协议_底层驱动与案例使用PCF8591

一级目录

底层时序图如下:

在这里插入图片描述

请添加图片描述

请添加图片描述

【STC15F 单片机引脚定义】

请添加图片描述

课堂笔记

在这里插入图片描述

三种流程方式

  1. List item

在这里插入图片描述

#include "intrins.h"

//总线引脚定义
sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */

#define icc_tmie   5
//ICC延时函数
void IIC_Delay(unsigned char i)
{
    do{_nop_();}
    while(i--);        
}
//启动条件
void IIC_Start (void)
{
	SDA =1;
	SCL = 1;
	IIC_Delay(icc_tmie);
	SDA = 0;

}

//结束函数
void IIC_Stop(void)
{
	SDA = 0;
	SCL = 1;
	IIC_Delay(icc_tmie);
	SDA = 1;
	IIC_Delay(icc_tmie);
}

//等待应答
bit IIC_WaitAck(void)
{
	bit i;
	SCL = 1;
		IIC_Delay(icc_tmie);
	i = SDA;
	SCL = 0;
	return i;

}
//应答位控制
void IIC_SendAck(bit j)
{
		SCL = 0;
		IIC_Delay(icc_tmie);
		SCL = 1;
		IIC_Delay(icc_tmie);
		SDA = j;	
	  IIC_Delay(icc_tmie);
	SCL = 0;
	SDA = 1;
		IIC_Delay(icc_tmie);
	
}
//发送数据
void IIC_SendByte(unsigned char dite)
{
	unsigned char i;
		SDA = 0;
		SCL =0;
		IIC_Delay(icc_tmie);
	for(i=0;i<8;i++)
	{
		if(dite &0x80) SDA = 1;
		else SDA =0;
			IIC_Delay(icc_tmie);
		dite <<=1;
		SCL = 1;
			IIC_Delay(icc_tmie);
		SCL = 0;
			IIC_Delay(icc_tmie);
	}
}
//接收数据
unsigned char IIC_RecByte(void)
{	
		unsigned char i,tmpe; 
	
	SCL = 0;
	IIC_Delay(icc_tmie);
	
		for(i=0;i<8;i++)
		{  
			SCL = 1;
			IIC_Delay(icc_tmie);
					tmpe = tmpe<<1;	
			if(SDA) tmpe |=1;
			SCL =0;
		  IIC_Delay(icc_tmie);
		}
	return  tmpe;	
}
//使用案例     PCF8591  -ADC 转换模拟量转成数字
/*
unsigned char PCF8591_iic(unsigned char AIN_X)
{
	unsigned char  tmpe ;

 IIC_Start();	//总线启动条件
 IIC_SendByte(0x90)	;   //通过I2C总线发送数据(芯片指令)
 IIC_WaitAck();	//等待应答
 IIC_SendByte(AIN_X)	;  //通过I2C总线发送数据	(芯片控制寄存器)
 IIC_WaitAck();	//等待应答	
	
 IIC_Start();	//总线启动条件
 IIC_SendByte(0x91)	;    //通过I2C总线发送数据
 IIC_WaitAck();	//等待应答	

 tmpe = IIC_RecByte()	;  //从I2C总线上接收数据 
 IIC_SendAck(0)	;//发送应答
 IIC_Stop();	//总线停止条件
	return tmpe;
}

*/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值