这里写目录标题
- 一级目录
- 底层时序图如下:
- 【STC15F 单片机引脚定义】
- 课堂笔记
- 三种流程方式
一级目录
底层时序图如下:
【STC15F 单片机引脚定义】
课堂笔记
三种流程方式
- 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 转换模拟量转成数字