新聞中心

51單片機(jī)IIC總線編程

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
#include
#define uchar unsigned charsbit sda=P2^0;sbit scl=P2^1;//用單片機(jī)的兩個(gè)I/O口模擬I2C接口uchar a;*void delay()//簡(jiǎn)單延時(shí)函數(shù){ ;; }*void start()  //開(kāi)始信號(hào) SCL在高電平期間,SDA一個(gè)下降沿則表示啟動(dòng)信號(hào){	sda=1; //釋放SDA總線delay();scl=1;delay();sda=0;delay();}*void stop()   //停止 SCL在高電平期間,SDA一個(gè)上升沿則表示停止信號(hào){sda=0;delay();scl=1;delay();sda=1;delay();}*void respons()  //應(yīng)答 SCL在高電平期間,SDA被從設(shè)備拉為低電平表示應(yīng)答{uchar i;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}*void init()//總線初始化 將總線都拉高一釋放總線  發(fā)送啟動(dòng)信號(hào)前,要先初始化總線。即總有檢測(cè)到總線空閑才開(kāi)始發(fā)送啟動(dòng)信號(hào){sda=1;delay();scl=1;delay();}*void write_byte(uchar date) //寫一個(gè)字節(jié){uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0;//拉低SCL,因?yàn)橹挥性跁r(shí)鐘信號(hào)為低電平期間按數(shù)據(jù)線上的高低電平狀態(tài)才允許變化;并在此時(shí)和上一個(gè)循環(huán)的scl=1一起形成一個(gè)上升沿delay();sda=CY;delay();scl=1;//拉高SCL,此時(shí)SDA上的數(shù)據(jù)穩(wěn)定delay();}scl=0;//拉低SCL,為下次數(shù)據(jù)傳輸做好準(zhǔn)備delay();sda=1;//釋放SDA總線,接下來(lái)由從設(shè)備控制,比如從設(shè)備接收完數(shù)據(jù)后,在SCL為高時(shí),拉低SDA作為應(yīng)答信號(hào)delay();}*uchar read_byte()//讀一個(gè)字節(jié){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){scl=1;//上升沿時(shí),IIC設(shè)備將數(shù)據(jù)放在sda線上,并在高電平期間數(shù)據(jù)已經(jīng)穩(wěn)定,可以接收啦delay();	k=(k<<1)|sda;scl=0;//拉低SCL,使發(fā)送端可以把數(shù)據(jù)放在SDA上delay();	}return k;}*void write_add(uchar address,uchar date)//任意地址寫一個(gè)字節(jié){start();//啟動(dòng)write_byte(0xa0);//發(fā)送從設(shè)備地址respons();//等待從設(shè)備的響應(yīng)write_byte(address);//發(fā)出芯片內(nèi)地址respons();//等待從設(shè)備的響應(yīng)write_byte(date);//發(fā)送數(shù)據(jù)respons();//等待從設(shè)備的響應(yīng)stop();//停止}*uchar read_add(uchar address)//讀取一個(gè)自己{uchar date;start();//啟動(dòng)write_byte(0xa0);//發(fā)送發(fā)送從設(shè)備地址 寫操作respons();//等待從設(shè)備的響應(yīng)write_byte(address);//發(fā)送芯片內(nèi)地址respons();//等待從設(shè)備的響應(yīng)start();//啟動(dòng)write_byte(0xa1);//發(fā)送發(fā)送從設(shè)備地址 讀操作respons();//等待從設(shè)備的響應(yīng)date=read_byte();//獲取數(shù)據(jù)stop();//停止return date;//返回?cái)?shù)據(jù)}


關(guān)鍵詞: 51單片機(jī)IIC總線編

評(píng)論


技術(shù)專區(qū)

關(guān)閉