单片机IIC通信问题,下面括号内的内容我不太明白,希望给详细的讲解一下
接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,(这时接收器件可以将SCL线拉成低电平,从而使主机处于等待...
接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,(这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行)。
这一点对于有IIC功能管脚的单片机还好解释, 但是一般的单片机不是通过软件编程的方法实现吗 接收器件可以将SCL线拉成低电平,从而使主机处于等待状态 ,但是单片机是按照程序一条一条执行的,在发送的时候,scl电平的变化,应该不能改变单片机的程序的执行吧,下面是一个写字节的程序,我不明白接收器件可以将SCL线拉成低电平后,对传送程序有什么影响。
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
} 展开
这一点对于有IIC功能管脚的单片机还好解释, 但是一般的单片机不是通过软件编程的方法实现吗 接收器件可以将SCL线拉成低电平,从而使主机处于等待状态 ,但是单片机是按照程序一条一条执行的,在发送的时候,scl电平的变化,应该不能改变单片机的程序的执行吧,下面是一个写字节的程序,我不明白接收器件可以将SCL线拉成低电平后,对传送程序有什么影响。
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
} 展开
2个回答
展开全部
写得有乱,建议严格区分开主机、从机,接收、发送这4个概念
网上的IIC模拟程序,大多不带总线管理功能,只是单纯的收发。要实现管理功能,需要在模拟程序里面,插上判断语句。
例如:接收器件忙时,会在总线上反映出来,发送器件检测总线电平,若忙,则return或调有wait函数。
网上的IIC模拟程序,大多不带总线管理功能,只是单纯的收发。要实现管理功能,需要在模拟程序里面,插上判断语句。
例如:接收器件忙时,会在总线上反映出来,发送器件检测总线电平,若忙,则return或调有wait函数。
追问
谢谢 你那有简单点的带总线管理功能的程序吗 能给发一下吗
追答
没有,都是根据具体要求改过的,无法通用。
做法很简单,通用程序里都有多字节收发函数,是调用其它各步骤,如起始、发送单字节、查询应答等子函数,综合而成的。
一般简单处理是:在每发送完1字节后,都需要检查一次应答,如不应答,则退出。
你要做的改动就是:如不应答,执行你想要的操作,等待或其它。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询