|
|||||||||||
| 技術(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 |
請(qǐng)教有關(guān)24C02的問題! |
| 作者:jshong 欄目:單片機(jī) |
我寫了個(gè)24C02的讀寫程序,測(cè)試時(shí)發(fā)現(xiàn)對(duì)有些24C02芯片能夠正確讀寫,但有些卻不能正確讀寫.個(gè)位高手幫我看看是不是程序的讀寫時(shí)序有問題.謝謝! 下面是我的程序. #include <reg52.h> #include <absacc.h> #include <intrins.h> typedef unsigned CHAR uCHAR; typedef unsigned int uint; sbit SDA = P1^0; /* iic數(shù)據(jù)傳送位 */ sbit SCL = P1^1; /* iic時(shí)鐘控制位 */ sbit P1_4 = P1^4; sbit P1_3 = P1^3; sbit P1_5 = P1^5; /* 函數(shù)聲明 */ void iic_wait(void); /* iic延時(shí) */ void iic_start(void); /* 開啟iic總線 */ void iic_stop(void); /* 關(guān)閉iic總線 */ void iic_ack(void); /* 發(fā)送ACK信號(hào) */ void iic_no_ack(void); /* 發(fā)送NOACK信號(hào) */ bit iic_wait_ack(void); /* 等待ACK信號(hào) */ void iic_send_byte(uCHAR demand); /* MCU向iic設(shè)備發(fā)送一個(gè)字節(jié) */ uCHAR iic_receive_byte(void); /* MCU從iic設(shè)備接收一個(gè)字節(jié) */ /* 聲明結(jié)束 */ void delay_1s(void) { uCHAR i; uCHAR j; for(i=0;i<100;i++) for(j=0;j<100;j++); } /* iic延時(shí) */ void iic_wait(void) { _nop_(); _nop_(); _nop_(); _nop_(); } /* 開啟iic總線 */ void iic_start(void) { SDA = 1; SCL = 1; iic_wait(); SDA = 0; iic_wait(); SCL = 0; } /* 關(guān)閉iic總線 */ void iic_stop(void) { SDA=0; SCL=0; iic_wait(); SCL=1; iic_wait(); SDA=1; } /* 發(fā)送ACK信號(hào) */ void iic_ack(void) { SDA=0; iic_wait(); SCL=1; iic_wait(); SCL=0; } /* 發(fā)送NOACK信號(hào) */ void iic_no_ack(void) { SDA=1; iic_wait(); SCL=1; iic_wait(); SCL=0; } /******************************************************************** 函 數(shù) 名:iic_wait_ack 功 能:等待ACK信號(hào) 說 明: 入口參數(shù): 返 回 值:1-ACK 0-ERROR ***********************************************************************/ bit iic_wait_ack(void) { uCHAR errtime=255; //uint errtime = 1000; SDA=1; iic_wait(); SCL=1; iic_wait(); while(SDA) { errtime--; if(!errtime) return 0; } SCL=0; return 1; } /******************************************************************** 函 數(shù) 名:iic_send_byte 功 能:MCU向iic設(shè)備發(fā)送一個(gè)字節(jié) 說 明: 入口參數(shù):sbyte 待發(fā)送的字節(jié)數(shù)據(jù) 返 回 值: ***********************************************************************/ void iic_send_byte(uCHAR sbyte) { uCHAR i = 8; while(i--) { SCL = 0; _nop_(); SDA = (bit)(sbyte&0x80); sbyte <<= 1; iic_wait(); SCL = 1; iic_wait(); } SCL=0; } /******************************************************************** 函 數(shù) 名:iic_receive_byte 功 能:MCU從iic設(shè)備接收一個(gè)字節(jié) 說 明: 入口參數(shù): 返 回 值:ddata 接收數(shù)據(jù) ***********************************************************************/ uCHAR iic_receive_byte(void) { uCHAR i=8; uCHAR ddata=0; SDA=1; while(i--) { ddata <<= 1; SCL=0; iic_wait(); SCL=1; iic_wait(); ddata |= SDA; } SCL=0; return ddata; } /******************************************************************** 函 數(shù) 名:write_iic_data 功 能:向iic設(shè)備寫入N個(gè)字節(jié) 說 明: 入口參數(shù):write_data 存放寫入字節(jié)的數(shù)組 address 指定從address處開始寫入 num 寫入的字節(jié)數(shù) 返 回 值:無 ***********************************************************************/ void write_iic_data(uCHAR write_data[], uCHAR address, uCHAR num) { uCHAR n; iic_start(); iic_send_byte(0xa0); iic_wait_ack(); iic_send_byte(address); iic_wait_ack(); for(n=0; n<num; n++) { iic_send_byte(write_data[n]); iic_wait_ack(); } iic_stop(); } /******************************************************************** 函 數(shù) 名:read_iic_data 功 能:從iic設(shè)備讀取N個(gè)字節(jié) 說 明: 入口參數(shù):read_data 存放讀取字節(jié)的數(shù)組 address 指定從address處開始讀取 num 讀取的字節(jié)數(shù) 返 回 值:無 ***********************************************************************/< |
| 2樓: | >>參與討論 |
| 作者: 程序人生 于 2006/9/25 19:44:00 發(fā)布:
網(wǎng)上有很多標(biāo)準(zhǔn)程序下,自己對(duì)照下看 |
|
| 3樓: | >>參與討論 |
| 作者: huangqi412 于 2006/9/25 21:23:00 發(fā)布:
呵呵,去看下我的帖子 |
|
| 4樓: | >>參與討論 |
| 作者: sxl_72 于 2006/9/26 8:50:00 發(fā)布:
延時(shí)長(zhǎng)一點(diǎn)試試 |
|
| 5樓: | >>參與討論 |
| 作者: DSP99 于 2006/10/1 2:14:00 發(fā)布:
I2C的模擬程序包很多啊~~ |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |