概述
/*=============iic头文件=============*/
#ifndef _IIC_H_
#define _IIC_H_
#define ERR 0
#define SUCC 1
void iic_start();
void iic_stop();
void iic_send_byte(unsigned char byte);
unsigned char iic_rev_byte();
void iic_ack();
void iic_noack();
#endif
#include "iic.h"
sbit SDA = P2^0;
sbit SCL = P2^1;
bit ack;
/*************************************************
Function: iic_rev_byte()
Description: 读取EEPROM中一个字节
Calls: 无
Called By: main();
Input: 无
Output: 无
Return: rev_data:读取的数据(一个字节大小)
Others: 无
*************************************************/
unsigned char iic_rev_byte()
{
unsigned char i;
unsigned char rev_data = 0;
SDA = 1; //若不初始化为高电平,则无论从器件怎么变化,都不会置为高
for(i = 0; i < 8; i++)
{
SCL = 0; // 上升沿接收数据
delay_us(1);
SCL = 1;
rev_data = (rev_data<<1) | SDA;
delay_us(1);
}
SCL = 0; //钳住总线
return rev_data;
}
/*************************************************
Function: iic_send_byte()
Description: 向EEPROM中写入一个字节的数据
Calls: delay_us();
Called By: main();
Input: 无
Output: 无
Return: ask:返回1为有应答,0为无应答
Others: 无
*************************************************/
void iic_send_byte(unsigned char byte)
{
unsigned char i;
for(i = 0; i < 8; i++) //下降沿发送数据
{
SDA = byte & 0x80; //发送数据:从最高位开始发送
SCL = 1; //高电平读取数据
delay_us(1);
SCL = 0; //低电平时数据可变
delay_us(1);
byte = byte << 1; //准备发送下一位数据
}
SCL = 1;
SDA = 1; //拉高SDA等待产生应答
delay_us(1);
if(0 == SDA) //产生应答
{
ack = 1;
}
else //未产生应答
{
ack = 0;
}
SCL = 0;
}
/*************************************************
Function: iic_start()
Description: 起始信号
Calls: delay_us();
Called By: main();
Input: 无
Output: 无
Return: 无
Others: 无
*************************************************/
void iic_start()
{
SDA = 1;
SCL = 1;
delay_us(1);
SDA = 0; //产生下降沿
delay_us(1);
SCL = 0; //钳住总线,使iic总线失效
}
/*************************************************
Function: iic_start()
Description: 终止信号
Calls: delay_us();
Called By: main();
Input: 无
Output: 无
Return: 无
Others: 无
*************************************************/
void iic_stop()
{
SDA = 0;
SCL = 1;
delay_us(1);
SDA = 1; //产生上升沿
delay_us(1);
SCL = 0; //钳住总线
}
————————————————
版权声明:本文为CSDN博主「肖申克de九叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30594349/article/details/52558897
最后
以上就是单纯小虾米为你收集整理的IIC程序的全部内容,希望文章能够帮你解决IIC程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复