??? 04/06/07 14:32 Read: times |
#136747 - Here is working Code, :-) Responding to: ???'s previous message |
Well sir as told that the Proble solved so i am sending you the code which should help the newbies just like me :-)
The Following Code is able to 1.Write the Byte, 2.Write the Multiple Bytes, (Pages) 3.Read Randomly ORG 0000H LJMP MAIN ORG 0030H SCL EQU P3.5 SDA EQU P3.4 LED EQU P3.3 LED2 EQU P3.2 TST EQU P1.2 DYTA EQU R5 ADDRE EQU R6 COUNT EQU R7 MAIN: CLR TST SETB LED CLR LED2 CLR A MOV DYTA,A MOV ADDRE,A MOV COUNT,A AGAIN: SETB TST JB TST,$ JNB TST,$ SETB LED ;============================ MOV DPTR,#MYDATA MOV ADDRE,#000H CALL PAGE_WRITE ;============================ UNUSUAL: CLR LED SJMP AGAIN START: SETB SDA SETB SCL JNB SDA,END_E JNB SCL,END_E NOP CLR SDA NOP NOP NOP NOP NOP CLR SCL CLR C JMP END_N END_E: SETB C END_N: RET STOP: CLR SDA NOP NOP SETB SCL NOP NOP NOP NOP NOP SETB SDA RET NAK: SETB SDA NOP NOP SETB SCL NOP NOP NOP NOP CLR SCL RET SEND_DATA: PUSH B MOV B,#8 BACK: RLC A MOV SDA,C NOP SETB SCL NOP NOP NOP NOP CLR SCL DJNZ B,BACK SETB SDA NOP NOP SETB SCL NOP NOP NOP NOP MOV C,SDA MOV LED2,C CLR SCL POP B RET READ_DATA: SETB SDA PUSH B MOV B,#8 BACK_2: NOP NOP NOP SETB SCL NOP NOP MOV C,SDA RLC A CLR SCL DJNZ B,BACK_2 POP B RET WRITE_BYTE: CALL START JC END_2 ;IF BUS NOT READY THEN CLOSE MOV A,#0A0H CALL SEND_DATA JC END_1 ;IF NO ACK THEN ISSUE STOP AND CLOSE MOV A,ADDRE CALL SEND_DATA JC END_1 MOV A,DYTA CALL SEND_DATA JC END_1 CLR C END_1: CALL STOP END_2: RET PAGE_WRITE: CALL START JC END_2 ;IF BUS NOT READY THEN CLOSE MOV A,#0A0H CALL SEND_DATA JC END_1 ;IF NO ACK THEN ISSUE STOP AND CLOSE MOV A,ADDRE CALL SEND_DATA JC END_1 P_LOOP: CLR A MOVC A,@A+DPTR JZ END_3 CALL SEND_DATA JC END_3 INC DPTR SJMP P_LOOP CLR C END_3: CALL STOP END_4: RET DELAY: MOV R7,#100 AGN: MOV R6,#250 HRE: NOP NOP DJNZ R6,HRE DJNZ R7,AGN RET MYDATA: DB "DAREDEVIL",0 END |