历史上的今天
今天是:2025年01月29日(星期三)
2019年01月29日 | 单片机模拟I2C总线通信的几个关键程序
2019-01-29 来源:eefocus
I2C总线由数据线SDA和时钟线SCL两条线构成通信线路,既可以发送数据,也可以接收数据。以下为单片机模拟I2C总线通信的几个关键程序:
1、总线初始化
void main()
{
SCl=1;
delay();
SDA=1;
delay();
}
//将总线都拉高以释放总线
2、启动信号
void start()
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
//SCL在高电平期间,SDA一个下降沿启动信号
3、应答信号
void respons()
{
uchar i=0;
SCL=1;
delay();
while(SDA==1)&&(i<255))//若在一段时间内没有收到从器件的应答则
i++; //主器件默认从器件已经收到数据而不在等待应答信号
SCL=0;
delay();
}
//SCL在高电平期间,SDA被从设备拉为低电平表示应答
4、停止信号
void stop()
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
//SCL在高电平期间,SDA一个上升沿停止信号
5、写一个字节
void writebyte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;//temp左移一位,最高位将移入PSW寄存器的CY位中
SCL=0; //然后将CY赋给SDA进而在SCL的控制下发送出去
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
//串行发送一个字节时,需要把这个字节中的8位一位一位地发出去
6、读一个字节
uchar readbyte()
{
uchar i,k;
SCL=0;
delay();
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;//将k左移一位与SDA进行“或”运算,
SCL=0; //依次把8个独立的位放入一个字节中来完成接收
delay();
}
delay();
return k;
}
同样的,接收一个字节时需将8位一位一位地接收
下一篇:STM8获取电压值
史海拾趣
|
我们做的灯都是蓝色死珠的多,红色和绿色坏的很少,相对蓝色来说可以忽略。红绿蓝都是非隔离方案做的,到底是灯珠的问题还是驱动的问题呢? 论坛上看到以上一句话以你的专业知识和经验能否解释下你知道的;为什么蓝色的死猪就多呢;… 查看全部问答> |
|
我是大四的一名学生,我是自动化专业,想毕业可从事嵌入式系统这方面的工作,感觉自己智商不高,不敢搞应用程序的开发,因为涉及到许多算法等等.所以现在我想学习驱动编程,我只在书上看了一些WIN CE的基本驱动的结构, 书上说先看看PLATFORM BUILDER中的 ...… 查看全部问答> |
|
data.load.exe $REL\\eboot.exe /nocode /reloc .text at 0x80039000 /reloc .data at 0x80021000 这里0x80039000表示eboot在运行时代码段的地址;0x80021000表示eboot运行时数据段的起始地址。 这两个地址从哪里来的呢? 通过什么工具或者什么文 ...… 查看全部问答> |
|
高价收购现有MC68EZ328手持嵌入式RFID数据采集产品的方案 我现在有个项目要用手持的数据采集产品,现高价收购 要求如下: 1.提供原理图,PCB Layout 2.提供系统软件原代码 3.使用单片机或嵌入式CPU 4.读写RFID 5.将RFID资料用GRPS发给服务器 6.USB Host 7.4行汉字显示 8.数字键盘输入 价格可以 ...… 查看全部问答> |
|
联系方式:MSN chenhuanwanted@hotmail.com (薪水十分不错,工作地点:深圳) Embedded Software Engineer Experience: Real-time embedded system software development for hand-held or highly portable systems including application ...… 查看全部问答> |
|
我是一名初学者,在网上收集了一些下载线资料。发现使用msp430f123有个TEST管脚,不知道怎么使用,下载线做成后不能下载程序到实验板上,请问这个test干什么用的?如何使用它来配合下载程序?… 查看全部问答> |
|
我想从ROM里面读出我的存储的数据,见下图所示:假如存储器里面数据的地址分别为:0,1,2,3,相应的数据位65,67,67,67,那么读出来的数据顺序也应该是:65,67,67,67,但是我现在读出来的数据为:65,65,67,67,67,就多出来一个65.不知道原因是 ...… 查看全部问答> |




