|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
24C01讀寫,急問!謝謝大家?guī)兔Γ。ǜ匠绦颍?/h1> |
| 作者:xbalben 欄目:技術(shù)交流 |
#define NOP __asm("and A,A") 由于我用的單片機里好像沒有_nop_();這個指令,所以用上面這個代替,不知道可以不?? 我用的是4M的晶振,一個機器周期是4/fc,也就是1us。 void i2c_wait(void) { NOP;NOP;NOP;NOP;NOP; } void i2c_start(void) //發(fā)送開始信號 { SDA = 1; NOP; SCL = 1; i2c_wait(); SDA = 0; i2c_wait(); SCL = 0; NOP; return; } void i2c_stop(void) //發(fā)送結(jié)束信號 { SDA = 0; NOP; SCL = 1; i2c_wait(); SDA = 1; i2c_wait(); return; } CHAR i2c_ack(void) //發(fā)送接收確認信號 ack=0 有應答 { CHAR ack; SDA = 1; NOP;NOP; SCL = 1; NOP;NOP; if (SDA==1) ack = 1; else ack = 0; SCL = 0; NOP; return (ack); } void i2c_send8bit(unsigned CHAR b) //送八位數(shù)據(jù) { unsigned CHAR a; for(a=0;a<8;a++) { if(b & 0x80) SDA = 1; else SDA = 0; b = b<<1; //時鐘保持低可以發(fā)送數(shù)據(jù) SCL = 1; i2c_wait(); SCL = 0; } return; } unsigned CHAR i2c_receive8bit(void) //接收八位數(shù)據(jù) { unsigned CHAR a; unsigned CHAR b=0; for(a=0;a<8;a++) { SCL = 1; NOP;NOP; b = b<<1; if (SDA==1) b = b|0x01; SCL = 0; NOP;NOP; } return (b); } void i2c_write(unsigned CHAR Address,unsigned CHAR temp1) //i2c_write(地址,數(shù)據(jù)),寫一個字節(jié) { do{ i2c_start(); i2c_send8bit(0xA0); } while(i2c_ack()); i2c_send8bit(Address); i2c_ack(); i2c_send8bit(temp1); i2c_ack(); i2c_stop(); delay10ms(); return; } unsigned CHAR i2c_read(unsigned CHAR Address) //i2c_read(地址,數(shù)據(jù)),寫一個字節(jié) { do{ i2c_start(); i2c_send8bit(0xA0); } while(i2c_ack()); //=1,表示無確認,再次發(fā)送 i2c_send8bit(Address); i2c_ack(); do{ i2c_start(); i2c_send8bit(0xA1); } while(i2c_ack()); temp1 = i2c_receive8bit(); i2c_stop(); return(temp1); } 請問需要修改什么地方呢?現(xiàn)在的問題主要是收不到應答信號! |
| 2樓: | >>參與討論 |
| 作者: 天藍 于 2008/3/23 13:07:03 發(fā)布:
/************************************************ 可以參照一下這個程序,結(jié)構(gòu)和你的大體相同,在AVR單片機上調(diào)試通過了的 ************************************************/ # include <iom8v.h> # define ADRS 0x01 # define SET_SDA (PORTC|=BIT(PC0)) # define SET_SCL (PORTC|=BIT(PC1)) # define SDA_PIN (PINC&BIT(PC0)) # define I2_C_DELAY (Delay_nUS(N)) /************延時函數(shù)聲明區(qū)********/ void Send_L(void); unsigned CHAR Get_H(void); void Start(void); unsigned CHAR ACK(void); void Send_Data_by_8Bit(unsigned CHAR ch_Data); void Write_Char(unsigned CHAR ch_Address, unsigned CHAR ch_Data); void PORT_INIT(void); void main(void) void PORT_INIT(void) void Send_L(void) void Send_H(void) void Start(void) void Stop(void) unsigned CHAR ACK(void) void NO_ACK(void) unsigned CHAR Get_H(void) void Send_Data_by_8Bit(unsigned CHAR ch_Data) unsigned CHAR Get_Data_by_8Bit(void) void Write_Char(unsigned CHAR ch_Address, unsigned CHAR ch_Data) unsigned CHAR Read_Char(unsigned CHAR ch_Address) void Delay_MS(void) void Delay_nMS(unsigned int n) |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |