; Orange programmer module v2.6 ; (c) 1999-2011 Alex Plusov, V. G. ; CHIP=24C04,512x8,24C04.HPL SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=WP, 2 ;PINO=A0, 3 PINO=A1, 4 PINO=A2, 5 CDELAY=5 ; one cycle time R5=I2CADR,H2 [!#SETUP] R5=0xA0 [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SCL=0,SDA=0,SCL=1,SDA=1 ; Stop 01 [_SADR] R0=R5 R1=ADR,R0[1]=R1[8] ;A8 R0=&0xFE ;wr R1=R0,R1=|1 ;rd [_PWAIT] ; polling wait _SADR R2=0 LOOP=(0,60){ _START LOOP=(7,0) {SDA=R0[I],SCL=P} ; out 8 bits SDA=1,SCL=1,R2[0]=SDA ; ack store SCL=0,SDA=0 _STOP R2?0{BREAK} P=500 } [INIT] ;A0=0 R5=&0xFC A1=0,A2=0 WP=1,P=10 [READ] _START _SADR LOOP=(7,0){SDA=R0[I],SCL=P} ; out Device addr. + A8 SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check LOOP=(7,0){SDA=ADR[I],SCL=P} ; out 8 bits Lo(Adr) SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check _START LOOP=(7,0){SDA=R1[I],SCL=P} ; out 4 bits DeviceAdr SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out DeviceSelect LOOP=(7,0){SCL=1,DATA[I]=SDA,SCL=0} ; read byte Data SDA=1,SCL=1,SCL=0 ; out master NO_ACKN _STOP [WRITEINIT] WP=0 [WRITE] _START _SADR LOOP=(7,0){SDA=R0[I],SCL=P} ; out Device addr. + A8 SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check LOOP=(7,0) {SDA=ADR[I],SCL=P} ; out 8 bits Lo(Adr) SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Lo(Adr) LOOP=(7,0) {SDA=DATA[I],SCL=P} ; out byte Data SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Data _STOP P=2000 ; delay: (Write Time) _PWAIT