关于IIC 的读写问题 急求大神~~~~~~~~~~~~~~~~~~~~~~~
时间:10-02
整理:3721RD
点击:
- void writebyte(char date)
- {
- char i,temp;
- temp = date;
- for( i = 0; i < 8; i++)
- {
- temp = temp<<1;
- SCL = 0;
- delay();
- SDA = CY;
- delay();
- SCL = 1;
- delay();
- }
- SCL = 0; // scl 为什么要拉低?
- delay();
- SDA = 1 ; // sda 为什么要拉高?
- delay();
- }
- char readbyte()
- {
- char i,k;
- SCL = 0;
- delay();
- SDA = 1; //这里的scl 和 sda 为何要分别为低电平和高电平?
- delay();
- for(i = 0; i < 8;i++)
- {
- SCL = 1; //当 scl为高电平的时候数据不可以改变
- delay();
- k = ( k<<1 )|SDA;
- SCL = 0;
- delay();
- }
- return k;
- }
http://bbs.elecfans.com/jishu_270523_1_1.html
- SCL = 0; // scl 为什么要拉低?
- delay();
- SDA = 1 ; // sda 为什么要拉高?
-
SCL拉低的原因应该是要改变SDA,只有SCL为低电平的时候SDA才可以改变,至于SDA=1应该是读取非应答位的,个人理解,我也是没学习多久的
因为你写的是模拟I2C所以在总线上主机不会自动拉高进行ACK,ACK是指在scl为低电平的时候从机经行应答,所以在你里面需要先拉低scl再拉高SDA
看看,数据手册,看读写时序。。
自己把I2C时序翻出来看一下
栏目分类
射频专业培训教程推荐