STC12C5A60S2单片机IIC例程
i2c.c
#include "config.h"
#include "delay.h"
#include "i2c.h"//I2C延时5us函数
void I2cDelay_5us(void)
{Delay_us(5);
}//I2C总线起始信号
void I2cStart(void)
{SCL = 1;SDA = 1;I2cDelay_5us();//状态保持5usSDA = 0;I2cDelay_5us();//状态保持5us
}//I2C总线停止信号
void I2cStop(void)
{SCL = 0;SDA = 0;SCL = 1;I2cDelay_5us();//状态保持5usSDA = 1;I2cDelay_5us();//状态保持5us
}/*********************************函数名称:ReadACK(void)*函数输入:无*函数返回:1非应答,0应答*函数说明:I2C总线读从机应答信号********************************/
bit ReadACK(void)
{uint i;SCL = 0;//拉低时钟总线,允许从机控制SDASCL = 1;//拉高,读SDAI2cDelay_5us();while((SDA==1) && (i<250))//等待SDA应答,或者超过时间默认应答i++;SCL = 0;I2cDelay_5us();return(0);//返回0应答
}/****************************************函数名称:SendACK(bit i)*函数输入:1主机发送非应答,0发送应答*函数返回:无*函数说明:主机发送应答信号***************************************/
void SendACK(bit i)
{SCL = 0; //拉低时钟总线,允许主机控制SDAif(i) //发送非应答SDA = 1;elseSDA = 0;SCL = 1; //拉高总线,让从机读SDAI2cDelay_5us();SCL = 0; //拉低时钟总线,允许SDA释放SDA = 1; //释放数据总线
}/****************************************函数名称:I2cSendByte(uchar DAT)*函数输入:DAT需要发送的数据*函数返回:无*函数说明:I2C发送一个字节数据***************************************/
void I2cSendByte(uchar DAT)
{uchar i;for(i=0; i<8; i++) //分别写8次,每次写1位{SCL = 0; //拉低时钟总线,允许SDA变化if(DAT & 0x80) //先写数据最高位SDA = 1; //写1elseSDA = 0; //写0SCL = 1; //拉高时钟,让从机读SDADAT <<= 1; //为发送下一位左移1位}SCL = 0; //拉低时钟总线,允许SDA释放SDA = 1; //释放数据总线
}/*====================================
函数 :I2cReadByte()
参数 :无
返回值 :返回读出的一字节数据
描述 :I2C总线读一字节数据
====================================*/
uchar I2cReadByte(void)
{uchar i, DAT;for(i=0; i<8; i++)//分别读8次,每次读一位{DAT <<= 1; //数据左移1位,准备接收一位SCL = 0; //拉低时钟总线,允许从机控制SDA变化SCL = 1; //拉高时钟总线,读取SDA上的数据if(SDA)DAT |= 0X01;//为1则写1,否则不行执行写1,通过左移补0}return(DAT); //返回读出的数据
}
i2c.h
#ifndef _I2C_H
#define _I2C_H//I2C模拟硬件接口定义
sbit SCL = P0^6;
sbit SDA = P0^7;/*I2C常用变量宏定义*/
#define I2cRead 1 //I2C读方向位
#define I2cWrite 0 //I2C写方向//I2C延时5us函数
void I2cDelay_5us(void);//I2C总线起始信号
void I2cStart(void);//I2C总线停止信号
void I2cStop(void);//I2C总线读从机应答信号
bit ReadACK(void);//主机发送应答信号
void SendACK(bit i);//I2C发送一个字节数据
void I2cSendByte(uchar DAT);//I2C总线读一字节数据
uchar I2cReadByte(void);#endif
STC12C5A60S2单片机IIC例程相关推荐
- 合泰单片机触摸例程_合泰单片机iic例程
本程序是基于合泰单片机的 ,如果需要移植于其他单片机只需稍微修改即可 模拟IIC(I2C)时序,C语言程序 #include "ht46R65.h" #define SDA _pa ...
- 扫盲教程:单片机IIC基础通信
单片机IIC基础通信 1 接口定义 2 程序实例 阅读提示:本章主要讲解过去电路使用较多的24C02- 24C512存储器,对于现在 主流的STC15W系列单片机,通常都具有内部比较器与DataFla ...
- 热电偶单片机代码c语言,基于STC12C5A60S2单片机的恒温箱设计-LCD1602-热电偶(电路图+程序源码)...
https://v.youku.com/v_show/id_XNDc2NzY1MDY2NA==.html?spm=a2hzp.8253869.0.0 2017-468.STC12C5A60S2恒温箱设 ...
- 16F877A和24C02通信汇编语言,pic单片机IIC通信读24C02程序例 16F877A 主频4M
#define _iic_h_//pic单片机IIC通信初始化函数声明 void iiccsh(void); //pic单片机IIC通信读外围设备函数声明 //功能:传送一个8位地址,返回一个8位数据 ...
- STC12C5A60S2单片机IO口工作模式设定
STC12C5A60S2单片机IO口工作模式设定 STC12C5A60S2 系列单片机其所有I/O口均可由软件配置成4种工作类型之一.4种类型分别为:准双向口(标准8051 输出模式).推挽输出.仅为 ...
- 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序
51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序 Proteus仿真效果 注意点击运行仿真后,图像刷新出来比较慢. 示例主程序 #include "REG51.h& ...
- STC12C5A60S2单片机-双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
- 单片机光敏电阻c语言程序怎么写,STC12C5A60S2 单片机,光敏电阻,步进电机,制作寻光器,始终指向光源...
光纤传感专业的我转行做了嵌入式软件,可是心系光学专业啊.下班回来发现个 stc 的 51 单片机最小系统,是我之前做的,好久没碰了.正好手边有两个光敏电阻,结合着步进电机,琢磨着做一个寻光器玩玩,让箭 ...
- STC12C5A60S2单片机WIFI信号扫描报警监视系统信号增强信号过低报警
实践制作DIY- GC0034-WIFI信号扫描监视报警 一.功能说明: 基于STM32单片机设计-WIFI信号扫描监视报警 二.功能介绍: STC12C5A60S2单片机 +ESP8266WIFI模 ...
最新文章
- 关于学习Python的一点学习总结(34->构造函数->重写方法和特殊构造)
- 1024. 科学计数法 (20)
- oracle存储过程参考资料(网上转载)
- 【ubuntu】ubuntu如何改变系统用户名
- Flash发布iOS应用全攻略(一)——如何在Flash里发布iOS应用
- LeetCode 70.爬楼梯(动态规划)
- SI4463研究计划(兼STM32F0进一步加深理解)
- linux 数位板内核,在Linux操作系统下使用高漫、绘王、Wacom等数位板的方法
- Python3.6之py文件转exe文件
- 地域和地方的区别_地方、地域、地区、地面、地段的区别_近义词词典_词林在线词典...
- html中如何把两行合并单元格,怎么把表格上下两行合并单元格合并
- 前后端分离架构设计(权限模型)
- 渗透测试学习笔记(metasploit)
- 可爱的BpXXX-图
- html mako
- 【Windows下设置全局以管理员身份运行cmd】
- 深度学习之目标检测(九)--YOLOv3 SPP理论介绍
- [校园广播系统 | IP广播 | 数字广播]校园数字IP网络广播系统方案
- 小米笔记本pro开机出现no bootable devices
- 迷你四旋翼无人机设计制造(4)——7自由度摇杆遥控器