|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有高手幫我看下這個小程序?qū)Σ粚Γx謝了 |
作者:xuhui2001 欄目:單片機 |
;24C02.html">24C02的開機計數(shù)器,系統(tǒng)復位一次數(shù)碼管加1,我用的AT89C51 ;***************************************************************************程序是我從www.51c51。com上拷貝的例程,應(yīng)該是對的。。! 程序中把I2c的時序搞對不對,能達到讀寫的目的嗎,為什么一開始要先寫I2c的器件地址和想讀寫的地址,然后才真的開始讀,I2c中器件中地址00h寫都沒寫,讀出的數(shù)據(jù)是00h還是ffh啊,高手請回答我 ;*************************************************************************** SDA24 EQU P2.7 SCLK24 EQU P3.6 ORG 0000H AJMP MAIN ORG 0030H MAIN: CLR P3.7 ;打開寫保護 MOV DPTR,#TAB MOV A,#00H ;讀地址 LCALL RD24 CJNE A,#10,TT TT: JNC TT1 AJMP TT2 TT1: MOV A,#00 TT2: MOV 30H,A MOVC A,@A+DPTR CLR P2.6 ;開數(shù)碼管 MOV P0,A ;送顯示 MOV A,30H INC A MOV B,A MOV A,#00H LCALL WT24 AJMP $ TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H RD24: PUSH ACC ;讀24C02子程序。 SETB SDA24 CLR SCLK24 CALL START24 MOV A,#0A0H CALL SHIFT8 CALL ACK POP ACC CALL SHIFT8 CALL ACK CALL START24 MOV A,#0A1H CALL SHIFT8 CALL ACK SETB SDA24 MOV R7,#8 CLR A SETB SDA24 RD000: RL A SETB SCLK24 MOV C,SDA24 MOV ACC.0,C CLR SCLK24 DJNZ R7,RD000 RET ;------------------------------- ;寫入24C02程序: WT24: PUSH ACC SETB SDA24 CLR SCLK24 CALL START24 MOV A,#0A0H CALL SHIFT8 CALL ACK POP ACC CALL SHIFT8 CALL ACK MOV A,B CALL SHIFT8 CALL ACK CALL STOP CALL DELAY2 RET ; ------------------------------- ;開始條件 START24:CLR SDA24 SETB SDA24 SETB SCLK24 CLR SDA24 CLR SCLK24 RET ;停止條件 STOP: CLR SDA24 SETB SCLK24 SETB SDA24 RET ;應(yīng)答信號 ACK: SETB SCLK24 CLR SCLK24 RET ;讀、寫數(shù)據(jù) SHIFT8: MOV R7,#8 SH01: RLC A MOV SDA24,C SETB SCLK24 CLR SCLK24 DJNZ R7,SH01 RET DELAY2: NOP NOP NOP NOP RET END |
2樓: | >>參與討論 |
作者: xuhui2001 于 2006/5/9 10:59:00 發(fā)布:
都看了就溜,真是太叫我失望了 都看了就溜,真是太叫我失望了 |
3樓: | >>參與討論 |
作者: 何以解憂 于 2006/5/9 11:03:00 發(fā)布:
估計匯編語言沒有人愿意去認真看,要是c呢就給你一段自己的代碼 |
4樓: | >>參與討論 |
作者: squarelook 于 2006/5/9 11:05:00 發(fā)布:
失望是正常的 這樣的問題解決起來的話很浪費精力,而且沒有實物調(diào)試,很不容易排查錯誤! |
5樓: | >>參與討論 |
作者: myymichael 于 2006/5/9 14:06:00 發(fā)布:
............ 程序中把I2c的時序搞對不對,能達到讀寫的目的嗎,為什么一開始要先寫I2c的器件地址和想讀寫的地址,然后才真的開始讀,I2c中器件中地址00h寫都沒寫,讀出的數(shù)據(jù)是00h還是ffh啊,高手請回答我 讀地址是用在多機通訊中的.至于后面的問題,程序沒看完.嘎嘎. |
6樓: | >>參與討論 |
作者: TWZ8858877 于 2006/5/9 17:24:00 發(fā)布:
程序有問題 至少應(yīng)答程序不對,I2C規(guī)則是由接收方產(chǎn)生應(yīng)答,即向24C02寫入數(shù)據(jù)時由24C02產(chǎn)生應(yīng)答,89C51檢查SDA線判斷24C02是否已接收。而讀出數(shù)據(jù)時由89C51產(chǎn)生應(yīng)答響應(yīng)24C02。另I2C速度不是太快,操作它的SDA及SCK時最好有幾個uS延時。 |
7樓: | >>參與討論 |
作者: NE5532 于 2006/5/9 19:54:00 發(fā)布:
你去找份PHILIPS的I2C總線協(xié)議書,看了就知道了。 I2C是一個嚴格的總線協(xié)議,不認真看資料是不行的。 不要抄人家的程序,不然自己更暈。 沒有寫過的地址,讀出來應(yīng)該是0xFF(除非你買到的芯片不是新的) USB有一定難度,但是還是屬于入門級總線,樓主多努力。本BBS里有“I2C忽悠記”供參考。 |
|
|
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |