??? 04/04/07 14:37 Read: times |
#136596 - Even the NOPs and delay wont working Responding to: ???'s previous message |
Well sir i thought that it was the problem of timing but sir i have introduced some NOPs to my Code but still not working,,, well sir the new code with NOPs is it
ORG 0000H LJMP MAIN ORG 0030H SCK EQU P3.5 SDA EQU P3.4 TST EQU P3.7 DYTA EQU 30H ADDRE EQU 31H MAIN: SETB TST ;Setting TST button MOV P1,#0FFH ;Setting all bits of P1 to high CLR A ;Clearing the variables MOV R7,A ;Clearing the Counter R7 MOV ADDRE,A ;Moving Address 00h to ADDRE MOV DYTA,A ;Moving Data Location 30h to 00h MOV ADDRE,#00000000B ;Want to write the Byte to 00h of EEPROM MOV DYTA,#11110000B ;Wand to write F0h to 00h Location of EEPROM LCALL WRITE ;Calling the Write Routine MOV P1,#000H ;Clearing the P1 to confirm data written Succesfully AGAIN: JB TST,$ ;Wait until the TST button to Ground JNB TST,$ ;Wait untill button released MOV ADDRE,#00000000B ;Setting the Address 00h for reading LCALL READ ;Calling the Read Routine MOV A,DYTA ;Copy the DYTA to ACC MOV P1,A ;Mov the ACC to P1 SJMP AGAIN ;Do it again ;=============================================== ;==============SUBROUTINES====================== ;=============================================== WRITE: LCALL IIC_START ;IIC Start Routine MOV A,#10100000B ;Moving the Address of Slave to Acc with Write LCALL CLOCK_D ;Clock the Acc to SDA and SCK LCALL ACK ;Wait for Acknowledge MOV A,ADDRE ;Mov the Address LCALL CLOCK_D ;Clock the Address of EEPROM LCALL ACK ;Wait for Acknowledge MOV A,DYTA ;Mov the Data LCALL CLOCK_D ;Clock the Data LCALL ACK ;Wait for Acknowledge LCALL IIC_STOP ;IIC Stop Routine LCALL DELAY ;Simple Delay Routine RET READ: LCALL IIC_START ;IIC Start Routine MOV A,#10100000B ;Moving the Address of Slave to Acc with Write LCALL CLOCK_D ;Clock the Acc to SDA and SCK LCALL ACK ;Wait for Acknowledge MOV A,ADDRE ;Mov the Address LCALL CLOCK_D ;Clock the Address of EEPROM LCALL ACK ;Wait for Acknowledge LCALL IIC_START ;Again IIC Start Routine MOV A,#10100001B ;Moving the Address of Slave to Acc with Read LCALL CLOCK_D ;Clock the Acc to SDA and SCK LCALL ACK ;Wait for Acknowledge LCALL I2C_READ ;Read the Data with SDA and SCK LCALL NO_ACK ;No Acknowledge Condition LCALL IIC_STOP ;IIC Stop Routine RET NO_ACK: SETB SDA CLR SCK ;JNB SDA,$ SETB SCK RET ACK: SETB SDA SETB SCK ;JB SDA,$ ;Wait for Acknowledge CLR SCK RET I2C_READ: MOV R7,#8 GFD: SETB SDA SETB SCK MOV C,SDA RLC A NOP CLR SCK DJNZ R7,GFD MOV DYTA,A RET RET CLOCK_D: RLC A MOV R7,#8 LOOP: MOV SDA,C SETB SCK NOP CLR SCK RLC A DJNZ R7,LOOP RET IIC_STOP: CLR SDA NOP SETB SCK NOP SETB SDA NOP RET IIC_START: SETB SCK NOP SETB SDA NOP CLR SDA NOP CLR SCK RET DELAY: MOV R7,#250 AGN: MOV R6,#250 HRE: NOP NOP DJNZ R6,HRE DJNZ R7,AGN RET DELAY_STOP: MOV TMOD,#00000001B MOV TH0,#0EEH MOV TL0,#00H SETB TR0 SAC: JNB TF0,SAC CLR TR0 CLR TF0 RET END |