- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一种IO口中断模拟I2C通信的方法 单片机与单片机之间的通信方式 Jonney.Peng 2016/8/17
更可靠,效率更高的模拟I2C通信方式,主从机都可模拟
目录
一、 I2C通信原理 2
二、 利用IO口模拟I2C的优势 2
三、 利用IO口模拟I2C的原理 2
2、 中断接收数据函数 3
3、 读指令函数 4
4、 发送一个字节函数 5
5、 发送指令函数 6
五、 源代码共享地址 6
I2C通信原理
I2C总线系统是由SCL(串行时钟)和SDA(串行数据)两根总线构成的。该总线有严格的时序要求,总线工作时,由串行时钟线SCL传送时钟脉冲,由串行数据线SDA传送数据。void I2C_INIT()
{
SDA=1;
delays(2);
SCL=1;
delays(2);
}
中断接收数据函数
功能:实现数据的接收
变量名含义:
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;
if(INTbyteflag>=3) //当接收数据位后面的数据时,长度标志位相应
减1,直到F_long=0,说明一条指令接收完毕
{
F_long--;
}
INTbyteflag++;
}
if(INTbyteflag==3) // INTbyteflag为3时说明长度位已接收完毕
{
If(INTre[0]==0x00&&INTre[1]==0x01) //包头和地址位接收正确,将长度为赋
值给F_long
F_long=INTre[2];
if(INTre[0]!=0x00) //包头不对,标志位复位,重新接收
{
INTbyteflag=0;
F_long=32;
}
if(INTre[1]!=0x01) //地址位不对,标志位复位,重新接收
{
INTbyteflag=0;
F_long=32;
}
}
}
读指令函数
功能:判断指令接收完毕,当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;
}
}
发送一个字节函数
功能:通过I2C发送一个字数据
void send_byte(uchar b )
{
uch
1亿VIP精品文档
相关文档
最近下载
- 半场人盯人防守演示.ppt
- 2022-2023学年江苏省南通市高三(第1次)模拟考试英语试卷、答案解析(附后).pdf VIP
- 完整解读宗教活动场所管理办法学习解读课件.pptx VIP
- 3-温室花卉的栽培.pptx
- 尼康Nikon COOLPIX P500数码相机(中文)说明书.pdf
- 汽车驱动桥设计毕业答辩.ppt
- 瑞金医院住院医师规培介绍.pdf
- 江苏省苏州市2021届高三上期中考试英语试题.docx VIP
- ICU患者焦虑的相关因素及护理干预的研究.doc VIP
- Unit 9 Section B(3a-Self Check) Writing 课件 人教版七年级英语下册 .pptx VIP
文档评论(0)