org 0000h main: mov p1,#0ffh lcall start mov a,#40h lcall sendbyte mov a,#0c0h lcall sendbyte lcall del lcall del mov a,#0f9h lcall sendbyte lcall del lcall del mov a,#0a4h lcall sendbyte lcall del lcall del lcall stop ljmp main start: setb p1.0 ;sda setb p1.1 ;scl clr p1.0 lcall delay clr p1.1 ret delay: nop ret stop: clr p1.0 ;sda setb p1.1 ;scl setb p1.0 ret sendbyte: mov r6,#08h ;set counter for 8 bits loop: jnb acc.7,notone setb p1.0 sjmp one notone: clr p1.0 one: setb p1.1 ; TRANSITION SCL LOW-TO-HIGH rl a ; ROTATE ACC LEFT 1-BIT clr p1.1 ; TRANSITION SCL LOW-TO-HIGH djnz r6,loop ; LOOP FOR 8-BITS setb p1.0 ; SET SDA HIGH TO LOOK FOR setb p1.1 ; ACKNOWLEDGE PULSE jnb p1.0,sb ; CHECK FOR ACK OR NOT ACK ; NOT ACK sb: lcall delay ; DELAY FOR AN OPERATION clr p1.1 ; TRANSITION SCL HIGH-TO-LOW lcall delay ; DELAY FOR AN OPERATION ret del: mov r0,#45h l3: mov r1,#50h l2: mov r2,#60h l1: djnz r2,l1 djnz r1,l2 djnz r0,l3 ret end