Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
新會員
|
請問我在傳完8個bit(start+slaveraddress)之後再check
ACK結果都處在1的狀態,試了很多次都是這樣子,請問婐的程式哪裡出錯ㄌㄋ? ;-------------------------- BSF PA,SDA NOP NOP BSF PA,SCL NOP NOP BCF PA,SCL NOP NOP BCF PA,SDA ;START BIT ;--------------------------- MOVLW 07H MOVWF N_DATA RUN_LOOP BTFSS TEMP_DATA,6 GOTO BITLOW BSF PA,SDA NOP BSF PA,SCL NOP NOP NOP BCF PA,SCL NOP RLF TEMP_DATA,F DECFSZ N_DATA,F GOTO RUN_LOOP RETLW 0 BITLOW BCF PA,SDA NOP BSF PA,SCL NOP NOP BCF PA,SCL NOP RLF TEMP_DATA,F DECFSZ N_DATA,F GOTO RUN_LOOP RETLW 0 ;---------------------------- ACK MOVLW 0000B ; TRIS PA BSF PA,SDA MOVLW 0001B ; TRIS PA NOP NOP NOP BTFSC PA,SDA GOTO ERROR_BIT MOVLW 0000B ; TRIS PA RETLW 0 ;***************** ERROR_BIT ;CHECK PROGRAM ERROR BIT ********(NG)********* NOP NOP NOP GOTO ERROR_BIT ;----------------------------
發表於: 2004/5/27 15:49
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
版主
|
看別人的程式是一件很辛苦的事,尤其是組合語言。
可不可以請你用數位式波器量SDA & SCL 兩隻腳的波形 一定有錯不然ACK是會從Slave送出來的。
發表於: 2004/5/31 17:55
|
|||
|
Re: 讀取I2C_EEPROM需要注意什麼地方,請大家指教...
|
||||
---|---|---|---|---|
新會員
|
;----------------------------
ACK MOVLW 0000B ; TRIS PA BSF PA,SDA ^^^^^^^^^^^^^^^^ 為什麼要把SDA先自己拉High哩 理論上I2C BUS只要DEVICE不為BUSY都會自動釋放 BUS成為HIGH , 當然有些周邊或IO要加提升電阻. MOVLW 0001B ; TRIS PA NOP NOP NOP ^^^^^^^^^^^^ 你等的時間會不會太短了啊@@ BTFSC PA,SDA GOTO ERROR_BIT MOVLW 0000B ; TRIS PA RETLW 0 ;***************** 才三個NOP , 你的CPU RUN多少hz哩?? 我建議要等久一點 而且最好是用LOOP來持續判斷比如 WAIT_ACK_CHKPOINT BTFSS PA,SDA GOTO GOT_ACK NOP DECFSZ WAIT_ACK,F GOTO WAIT_ACK_CHKPOINT 當然 WAIT_ACK 要放多少自己調Timing吧~ 只寫個大概其它自己看看吧~
發表於: 2004/5/31 23:49
|
|||
|