IO口中断模拟I2C通信方式
更新时间:2024-01-30 15:44:01 阅读量: 教育文库 文档下载
- io模拟i2c从机推荐度:
- 相关推荐
一种IO口中断模拟I2C
通信的方法
单片机与单片机之间的通信方式
Jonney.Peng 2016/8/17
更可靠,效率更高的模拟I2C通信方式,主从机都可模拟
目录
一、 I2C通信原理 ........................................................................ 3 二、 利用IO口模拟I2C的优势 .................................................. 3 三、 利用IO口模拟I2C的原理 .................................................. 3 2、 中断接收数据函数 ............................................................ 4 3、 读指令函数 ........................................................................ 5 4、 发送一个字节函数 .................................................................. 6 5、 发送指令函数 .................................................................... 7 五、 源代码共享地址 ................................................................... 7
一、 I2C通信原理
I2C
总线系统是由SCL(串行时钟)和SDA(串行数据)两
根总线构成的。该总线有严格的时序要求,总线工作时,由串行时钟线SCL传送时钟脉冲,由串行数据线SDA传送数据。
二、 利用IO口模拟I2C的优势
简单的通过单片机IO模拟I2C通信,我们会发现数据接收不正常或者接收错误的情况,同时接收速率比较低,实时性比较差。最重要的是只能模拟主机通信,今天我所介绍的适用于所有单片机与单片机的通信,既可以接收数据也可以发送数据。只需要两个IO口,其中包含一个IO口中断,可以解决串口,I2C和SPI都不够用的问题。
三、 利用IO口模拟I2C的原理
传统的I2C通信方式,SCL负责传送信号脉冲,SDA负责传
送数据,SCL为低时,允许传送数据。通过中断方式实现I2C也是遵循了这个原理。与传统I2C的区别在于,当SCL电平变化时,只传送一位数据,所以接收完一个字节数据时,SCL需由高到低
变化八次。 四、 源代码分析
1、 初始化I2C函数
功能:将SDA与SCL电平置高,SDA可以为任何IO口,
SCL必须为带有中断的IO口。
void I2C_INIT() {
SDA=1; delays(2); SCL=1; delays(2); }
2、 中断接收数据函数
功能:实现数据的接收 变量名含义:
注:此接收函数根据通信协议可以适当调整,我的通信 协议格式是: 包头:00 地址:00-0XFF 包长度:命令+参数+结束位 命令:0X00-0XFF 参数:0X00-0XFF 结束位:0xFF INTTemp:接收数据变量,每一位都存入INTTemp
clk_over_timer:接收超时时基,用于复位相应标志位,后面会介
绍。
INT_i2c:中断标志位
F_INT_read:读数据标志位 F_read_ok:接收完数据标志位 INTnum:中断次数标志位 INTre[]:接收数据缓存区
INTbyteflag:接收字节个数标志位 F_long:接收的指令长度
void I2cRead() interrupt 0
{
INTTemp=INTTemp<<1; INTTemp=INTTemp|SDA; clk_over_timer=0; INT_i2c=1; F_INT_read=0; F_read_ok=0; INTnum++;
if(INTnum==8) //若INTnum为8,说明接收完一个字节的数据,
将数据存入INTre[]
{
INTnum=0;
INTre[INTbyteflag]=INTTemp;
减1,直到F_long=0,说明一条指令接收完毕
}
if(INTbyteflag==3) // INTbyteflag为3时说明长度位已接收完毕 {
值给F_long
}
}
F_long=INTre[2];
if(INTre[0]!=0x00) //包头不对,标志位复位,重新接收
INTbyteflag=0; F_long=32;
{ }
F_long--;
if(INTbyteflag>=3) //当接收数据位后面的数据时,长度标志位相应
INTbyteflag++;
If(INTre[0]==0x00&&INTre[1]==0x01) //包头和地址位接收正确,将长度为赋
{
}
if(INTre[1]!=0x01) //地址位不对,标志位复位,重新接收 INTbyteflag=0; F_long=32; {
}
3、 读指令函数
功能:判断指令接收完毕,当F_long=0说明指令已接收完毕,可以
根据指令处理相应事件。若20ms内没接收完数据,说明数据接收不正常,复位相应标志位。
void Read_ok()
{
if(F_long==0)
{
INTbyteflag=0; F_long=32; INT_i2c=1; F_INT_read=1; F_read_ok=1; clk_d=0; INTnum=0; clk_watch=0;
}
if(clk_over_timer>=2) { INT_i2c=0; INTnum=0; INTbyteflag=0; F_long=32; clk_d=0; clk_watch=0; clk_over_timer=0;
}
}
4、
发送一个字节函数
功能:通过I2C发送一个字数据
void send_byte(uchar b ) {
uchar i;
for(i=0;i<8;i++) { b=b<<1; SDA=CY; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=0; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=1; delays(1);
} //延时5us //SCL拉低,此时从
机响应中断进入接收 //延时5us //发送完毕后拉高
SCL和SDA
SCL=1; SDA=1; }
5、 发送指令函数
功能:发送一条指令
bit sendbytes(uchar *s,uchar a) {
uchar i;
EX0=0; //接收时关闭外部中断0,即停止I2C接收 for(i=0;i
IE0=0; //中断位请求标志位置0
EX0=1; //接收完毕,开外部中断,即可以接收I2C数据 INT_i2c=0; return TRUE;
}
五、 源代码共享地址
1、 相应的代码都是基于STC15系列单片机
2、 代码所实现的功能是:主单片机发送指令,12864
显示相应内容 3、 源代码所需硬件:
12864液晶一个,STC15w204s一片
有兴趣的童鞋可以自己写个主单片机发送命令的程序测试一下,亲测效果很好,我们公司现在通信方式都用这个,可以节省串口。 共享资料含通信协议: http://pan.http://www.wodefanwen.com//s/1boRjjo7
正在阅读:
IO口中断模拟I2C通信方式01-30
乡镇卫生院优化服务流程05-19
各省军区独立师历史沿革03-10
遵义市道真县隆兴中学 七年级地理上学期期末试卷含解析新人教版04-26
奶奶的厨艺作文600字07-15
心得体会范文大全07-31
新学期家长寄语02-16
自我介绍作文1000字07-02
初一新生自我介绍【最新10篇】03-28
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 中断
- 模拟
- 通信
- 方式
- I2C
- 二进制、八进制、十进制与十六进制转换计算
- 生物实验题答题技巧
- 2018年秋人教版高一语文必修一课时作业: 综合测试卷 Word版含答案
- 物理化学第七章模拟试卷A及答案
- 钢筋加工场专项施工方案 - 图文
- 推进安全生产标准化建设,强化企业安全生产基础
- 311岩土工程勘察课教学大纲
- 5监理工程师继续教育电力工程试题-68分
- 党章执行过程中存在的问题和对策研究
- 安全生产现场综合管理考核标准 - 图文
- 09-12高考化学分类汇编-化学平衡 - 图文
- 2012015年民间借贷审判白皮书-上海高级人民法院
- 数学分析 刘三阳 第二讲习题解答
- 第二章 单张纸胶印机给纸装置 - 图文
- PLC(FX2N)小数点(浮点)运算编程研究讲义2012
- 六年级升学考试年级语文试题
- 财政局预防职务犯罪讲义终稿
- 地质环境监测规程
- 教学团队成员基本情况- 中山大学化学与化学工程学院
- 第一章 总论