| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
大蝦幫我看看讀寫(xiě)24lc64的程序吧 | 
  
| 作者:boyong21ic 欄目:單片機(jī) | 
小弟寫(xiě)了一個(gè)meag128讀寫(xiě)24LC64的程序,可在寫(xiě)數(shù)據(jù)時(shí)就過(guò)不去了,問(wèn)題出在meag128檢測(cè)不到21lc64發(fā)送的應(yīng)答,因此也不知道數(shù)據(jù)是否寫(xiě)進(jìn)去了,讀出來(lái)的數(shù)據(jù)就更不知對(duì)錯(cuò)了,請(qǐng)大蝦們幫我看看吧,小弟先謝了,這個(gè)程序已經(jīng)折騰我好幾天了。程序?qū)懙貌缓,?jiàn)笑了 //對(duì)SDA、SCL操作的宏定義 #define SDA_SET DDRD=DDRD|0x02;sbi(PORTD,1);Delay(5) #define SDA_CLR DDRD=DDRD|0x02;cbi(PORTD,1);Delay(5) #define SCL_SET DDRD=DDRD|0x01;sbi(PORTD,0);Delay(5) #define SCL_CLR DDRD=DDRD|0x01;cbi(PORTD,0);Delay(5) //定義全局變量 unsigned CHAR ErrFlag=0; unsigned CHAR Sourcecode[]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99}; unsigned CHAR Destcode[]={0}; void StartSignal(void) //開(kāi)始信號(hào) { SDA_SET; SCL_SET; SDA_CLR; SCL_CLR; } void StopSignal(void) //停止信號(hào) { SDA_CLR; SCL_SET; SDA_SET; SCL_CLR; } void SendAck(void) //發(fā)送應(yīng)答 { SDA_CLR; SCL_SET; SCL_CLR; } void SendNAck(void) { SDA_SET; SCL_SET; SCL_CLR; } unsigned CHAR CheckAck(void) //檢查應(yīng)答 { unsigned int ErrTime=3000; unsigned CHAR i=0; DDRD=DDRD&0xfd; SCL_SET; while(PIND&0x02) { ErrTime--; if(!ErrTime) { i=0; SCL_CLR; return i; } } SCL_CLR; i=1; return i; } void Delay(unsigned int i) { unsigned CHAR j; while(i--) { for(j=0;j<10;j++); } } void WriteCode(unsigned CHAR Command,unsigned CHAR Haddr,unsigned CHAR Laddr,unsigned CHAR *p) { unsigned CHAR i,ok=0; unsigned CHAR a[3]; unsigned CHAR CodeLength; unsigned CHAR k=0; a[0]=Command; a[1]=Haddr; a[2]=Laddr; p=Sourcecode; CodeLength = 9; //要寫(xiě)入的數(shù)據(jù)長(zhǎng)度 do { StartSignal(); //發(fā)起始信號(hào) for(i=0;i<3;i++) //寫(xiě)命令和地址 { Write1Byte(a[i]); ok=CheckAck(); SetCursor(12*i,1); lcd_printhex(&a[i],0,1); if(!ok) { ErrFlag=1; cbi(PORTF,3); //置錯(cuò)誤燈 break; } else ErrFlag=0; } }while(ErrFlag); if(!ErrFlag) //如無(wú)應(yīng)答位 { for(k=0;k<CodeLength;k++,p++) { Write1Byte(*p); ok=CheckAck(); if(!ok) { ErrFlag=1; cbi(PORTF,3); //置錯(cuò)誤燈 break; } } } else { cbi(PORTF,3); //置錯(cuò)誤燈 ErrFlag=1; } StopSignal(); } void Write1Byte(unsigned CHAR data) { unsigned CHAR k; DDRD=DDRD|0x03;    | 
  
| 2樓: | >>參與討論 | 
| 作者: yh21ic 于 2004/1/29 10:34:00 發(fā)布:
         去下一個(gè)吧,有例程的  | 
  |
  | 
    
 
  | 
  
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào)  |