I2C 小结

来源:互联网 发布:txt阅读器 for mac 编辑:程序博客网 时间:2024/06/07 06:03
#include<reg52.h>#define uchar unsigned charsbit sda=P2^0;sbit scl=P2^1;uchar a;void delay(){ ; ; }void start()  {sda=1;delay();scl=1;delay();sda=0;delay();}void stop(){sda=0;delay();scl=1;delay();sda=1;delay();}void respons() {uchar i;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}void init(){sda=1;delay();scl=1;delay();}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();}uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++) /*4,数据位的传输是边沿触发,因此每次确定一位sda的电平的时候就来一个高定平然后再下降,利用这个边沿就把数据发送出去了。循环8次即把一个字节都传完了*/{scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}void delay1(uchar x){uchar a,b;for(a=x;a>0;a--) for(b=100;b>0;b--);}void write_add(uchar address,uchar date){start();write_byte(0xa0);respons();write_byte(address);//发送从机地址respons();write_byte(date);//写入数据respons();stop();//结束}uchar read_add(uchar address){uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();   //另外一个方向开始write_byte(0xa1); //数据的传输方向有所改变respons();date=read_byte();//将读的数据返回stop();return date;}void main(){init();write_add(23,0x55);delay1(100);P1=read_add(23);while(1);}/*学完i2c小结下吧。 I2c主要就是包括三大块函数 信号函数; 检测或者是反馈 接受函数;其包括读的函数 发送函数;其包括写的函数; 1,一条为时钟控制线;一条位数据线; 2,然而数据有低有高,有两个方向,从而导致我们在写程序的时候很麻烦, 如果,不看时序图,容易乱。 3,始终记得 数据是在scl为低时才可以发生改变;    sda有时候表示状态,有时候表示的数传输的数据,一定要时刻记住。*/


原创粉丝点击