我的24C02在写程序正常,但在读的时候,写入A1指令后24C02没有返回应答信号,请大家帮忙看看。<br /><br />;--------------------------------------------------------------------<br />NOPP8:<br /> CALL NOPP4<br />NOPP4: <br /> NOP<br /> NOP<br /> NOP<br /> NOP<br /> <br /> RET<br />;--------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br /><br />EEPROM_START:<br /> LD BTCON, #02H <br /> OR P0, #18H ;SDA=1,SCL=1;<br /> CALL NOPP8<br /> AND P0, #0F7H ;SDA=0;<br /> CALL NOPP8<br /> AND P0, #0E7H ;SCL=0;SDA=0; <br /> RET <br />;--------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />EEPROM_STOP: <br /> AND P0, #0E7H<br /> CALL NOPP8<br /> OR P0, #10H<br /> CALL NOPP8<br /> OR P0, #18H <br /> RET <br />;-------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />EEPROM_ERR:<br /> OR ERROR_FLAG, #01H <br /> JP T, EEPROM_STOP <br />;-------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />MASTER_ACK:<br /> AND P0, #0E7H<br /> CALL NOPP8<br /> OR P0, #10H<br /> CALL NOPP8<br /> AND P0, #0E7H<br /> <br /> RET<br />;---------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />EEPROM_ACK:<br /> OR P0, #10H ;SCL=1;<br /> CALL NOPP8<br /> CLR R3<br /> ACK_LOOP:<br /> DEC R3<br /> JR Z,EEPROM_ERR<br /> CALL NOPP8<br /> TM P0, #00001000B ;SDA=?<br /> JR NZ, ACK_LOOP<br /> AND P0, #0EFH ;SCL=0; <br /> <br /> RET<br />;-------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />;<br />EEPROM_RD:<br /> LD R0, #08H<br /> CLR R1<br /> AND P0, #0EFH ;SCL=0;<br /> CALL NOPP8 <br /> OR P0,#08H ;SDA=1;<br />EEPROM_RD0: <br /> CALL NOPP8 <br /> OR P0, #10H ;SCL=1;<br /> CALL NOPP8 <br /> <br /> RCF<br /> TM P0, #08H ;SDA=?<br /> JR Z, EEPROM_RD1<br /> SCF <br />EEPROM_RD1:<br /> RLC R1<br /> AND P0, #0EFH ;SCL=0;<br /> DEC R0<br /> JR NZ, EEPROM_RD0<br /> AND P0, #0EFH ;SCL=0; <br /> <br /> RET<br />;--------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />EEPROM_WR:<br /> LD R0, #08H<br />EEPROM_WR0:<br /> AND P0, #0E7H ;SCL=0,SDA=0;<br /> CALL NOPP8<br /> TM R1, #80H<br /> JR Z, EEPROM_WR1 <br /> OR P0, #08H ;SDA=1;<br />EEPROM_WR1:<br /> RL R1 <br /> CALL NOPP8<br /> OR P0, #10H ;SCL=1;<br /> CALL NOPP8<br /> AND P0, #0EFH ;SCL=0;<br /> NOP<br /> DEC R0 <br /> JR NZ, EEPROM_WR0<br />; <br /> RET<br />;--------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />EEPROM_RD_PAGE:<br /> CALL EEPROM_START<br /> <br /> LD R1,#0A0H<br /> CALL EEPROM_WR ;>> R1 = R0 <<.<br /> CALL EEPROM_ACK <br /><br /> LD R1,R2<br /> CALL EEPROM_WR ;>> R1 = R0 <<.<br /> CALL EEPROM_ACK <br /><br /> CALL EEPROM_START<br /> <br /> LD R1,#0A1H<br /> CALL EEPROM_WR ;>> R1 = R0 <<.<br /> CALL EEPROM_ACK ;问题就在这里:24C02没有ACK信号。<br />EEPROM_RD_PAGE1:<br /> CALL EEPROM_RD ;>> = R0 << R1.<br /> LD EEPROM_DATA,R1 <br /> JP T, EEPROM_STOP <br />;--------------------------------------------------------------------<br />; P0.3--SDA P0.4--SCL<br />EEPROM_WR_PAGE: <br /> CALL EEPROM_START<br /> LD R1, #0A0H<br /> CALL EEPROM_WR ;>> R1 = R0 <<.<br /> CALL EEPROM_ACK <br />;<br /> LD R1,EEPROM_ADDRESS<br /> CALL EEPROM_WR ;>> R1 = R0 <<.<br /> CALL EEPROM_ACK <br />EEPROM_WR_PAGE1: <br /> LD R1,EEPROM_DATA<br /> CALL EEPROM_WR ;>> R1 = R0 <<.<br /> CALL EEPROM_ACK <br /> JP T, EEPROM_STOP |
|