亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機模擬I2C總線讀寫EEPROM(24CXX)之最簡單的讀寫程序
[打印本頁]
作者:
51黑科技
時間:
2016-2-2 03:19
標題:
單片機模擬I2C總線讀寫EEPROM(24CXX)之最簡單的讀寫程序
本帖最后由 51黑科技 于 2016-2-2 03:22 編輯
下面是一個最簡單的讀寫程序,可以用來檢測線路狀況。先附上程序和電路,后面附有說明。
電路:
說明:P2口的LED都是我用來檢測電路執行到哪一步的,個人覺得一目了然。
程序:
#include <reg51.h>
#define unit unsigned int
#define uchar unsigned char
int ok;
sbit scl=P0^0;
sbit sda=P0^1;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
delay(void) //delay
{
int i;
led1=1;
for(i=0;i<1;i++) led1=0;
}
start(void) //start
{
sda=1;
scl=1;
delay();
sda=0;
delay();
scl=0;
led0=0;
}
stop(void) //stop
{
sda=0;
scl=1;
delay();
sda=1;
delay();
scl=0;
}
checkanswer(void) //check answer
{
sda=1;
scl=1;
if(sda==1)
{
F0=1;
led7=0;
}
scl=0;
led3=0;
}
sendabyte(int temps) //send a byte
{
uchar n=8;
while(n--)
{
led2=1;
if((temps&0x80)==0x80)
{
sda=1;
scl=1;
delay();
scl=0;
}
else
{
sda=0;
scl=1;
delay();
scl=0;
}
temps=temps<<1;
led2=0;
}
}
reciveabyte() //recive a byte
{
uchar n=8,tempr;
while(n--)
{ //uchar idata *abyte
scl=1;
tempr=tempr<<1;
if(sda==1)
tempr=tempr|0x01;
else
tempr=tempr&0xfe;
scl=0;
}
ok=tempr;
return(ok);
}
main(void) //MAIN
{
start();
sendabyte(0xa0);
checkanswer();
if(F0==1) return;
sendabyte(0x00);
checkanswer();
if(F0==1) return;
sendabyte(0x11);
checkanswer();
if(F0==1) return;
/*-----------------------*/
start();
sendabyte(0xa0);
checkanswer();
if(F0==1) return;
sendabyte(0x00);
checkanswer();
if(F0==1) return;
start();
sendabyte(0xa1);
checkanswer();
if(F0==1) return;
reciveabyte();
if(ok==0x11) led6=0;
stop();
}
說明:
1、寫驅動程序之前建議了解清楚24CXX系列芯片的讀寫時序,中文資料:
http://www.denmoz.com/bbs/dpj-30339-1.html
2、程序功能:先在地址0x00寫入一個數據0x11,然后再讀出來,若寫入的數據和讀出的數據一樣就點亮led6。下一篇來電復雜點的:
http://www.denmoz.com/bbs/dpj-43299-1.html
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1