|
|||||||||||
| 技術(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 |
急急! 讀寫24lc01b咋就不對(duì)呀,高手指點(diǎn)呀。! |
| 作者:rtosshu 欄目:單片機(jī) |
這是我的測(cè)試源代碼: #include "pic1687x.h" #include "pic.h" /******************************************************************** * * 名稱: wait_ms * 說明: * 功能: 延時(shí)n ms * 調(diào)用: 無 * 輸入: ms 延時(shí)毫秒數(shù),ms=n 延時(shí)n ms. * 返回值: 無 ***********************************************************************/ #define uCHAR unsigned CHAR void wait_ms(uCHAR ms) { uCHAR i; for(;ms>0;--ms) //for(j=5;j>0;--j) for(i=248;i>0;--i) { asm("nop"); asm("nop"); } return; } /******************************************************************** * * 名稱: mssp_initi * 說明: * 功能: MSSP模塊初始化函數(shù) * 調(diào)用: 無 * 輸入: 無 * 返回值: 無 ***********************************************************************/ void mssp_initi(void) { TRISC3=1; TRISC4=1; SSPSTAT=0x80; //傳輸數(shù)率設(shè)為100KHZ SSPADD=9; SSPCON=0x08; SSPCON2=0x00; di(); SSPIF=0; SSPBUF=0; SSPEN=1; //起用SSP模塊 ,iic return; } /******************************************************************** * * 名稱: eep_start * 說明: * 功能: 產(chǎn)生一個(gè)起使位 * 調(diào)用: 無 * 輸入: 無 * 返回值: 無 ***********************************************************************/ void eep_start (void) { uCHAR i; SSPIF=0; SEN=1; for(i=2;--i;) continue; do { RSEN=1; }while(SSPIF==0); SSPIF=0; return; } /******************************************************************** * * 名稱: eep_stop * 說明: * 功能: 產(chǎn)生一個(gè)停止位 * 調(diào)用: 無 * 輸入: 無 * 返回值: 無 ***********************************************************************/ void eep_stop(void) { PEN=1; do { ; }while(SSPIF==0); SSPIF=0; return; } /******************************************************************** * * 名稱: eep_read_byte * 說明: * 功能: 讀24LC01指定1 byte數(shù) * 調(diào)用: eep_start,eep_stop * 輸入: uint eep_addr 要讀的地址,uCHAR*p 緩存單元 * 返回值: data ***********************************************************************/ uCHAR eep_read_byte(uCHAR eep_addr) { uCHAR data,i=10; eep_start(); while(i--); SSPBUF=0xa0; //24LC01硬件寫地址 do { ; }while(SSPIF==0); SSPIF=0; i=20; while(i--); SSPBUF=eep_addr; do{ ;}while(SSPIF==0); SSPIF=0; eep_start(); i=10; while(i--); SSPBUF=0xa1; //24LC01硬件讀地址 do{ ;}while(SSPIF==0); SSPIF=0; RCEN=1; do{ ;}while(SSPIF==0); SSPIF=0; asm("bsf _SSPCON2,3"); i=20; while(i--); data=SSPBUF; eep_stop(); return(data); } /******************************************************************** * * 名稱: eep_write_byte * 說明: * 功能: 寫24LC01指定1 byte數(shù) * 調(diào)用: eep_start,eep_stop * 輸入: uint eep_addr 要寫的地址,uCHAR 寫緩存 * 返回值: 無 ***********************************************************************/ void eep_write_byte(uCHAR eep_addr,uCHAR p) { uCHAR i=10; eep_start(); while(i--); SSPBUF=0xa0; do{ ;}while(SSPIF==0); SSPIF=0; i=20; while(i--); SSPBUF=eep_addr; do{ ;}while(SSPIF==0); SSPIF=0; i=30; while(i--); SSPBUF=p; do{ ;}while(SSPIF==0); SSPIF=0; eep_stop(); wait_ms(10); return; } main() { uCHAR eep_addr=10; uCHAR p; uCHAR readdata; p=20; mssp_initi(); eep_write_byte( eep_addr,p); readdata=eep_read_byte( eep_addr); } |
| 2樓: | >>參與討論 |
| 作者: rtosshu 于 2004/2/25 11:45:00 發(fā)布:
幫我頂一下呀! |
|
| 3樓: | >>參與討論 |
| 作者: zhangshu 于 2004/2/25 15:46:00 發(fā)布:
多謝,真不錯(cuò)! |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |