; Orange programmer module v2.4 ; (c) 1999-2005 CnCLab & V. G. ; CHIP=24C08,1024x8 SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=WP, 2 ;PINO=A0, 3 ;PINO=A1, 4 PINO=A2, 5 TESTMASK=00001110 CDELAY=4 ; one cycle time R10=I2CADR,H [!#SETUP] R10=0xA0 $WDELAY=25000 [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SCL=0,SDA=0,SCL=1,SDA=1 ; Stop 01 [_PWAIT] ; polling wait R0=0 LOOP=(0,60){ _START LOOP=(7,0) {SDA=R10[I],SCL=1,SCL=0} ; out 8 bits SDA=1,SCL=1,R0[0]=SDA ; ack store SCL=0,SDA=0 _STOP R0?0{BREAK} P=500 } [INIT] A2=0,R3=R10,R3=&8,R3?8{A2=1} WP=1,P=100 [READ] _START LOOP=(7,3) {SDA=R10[I],SCL=1,SCL=0} ; out 5 bits DeviceAdr LOOP=(9,8){SDA=ADR[I],SCL=1,SCL=0} ; out 2 bits Hi(Adr) SDA=0,SCL=1,SCL=0 ; out 1 bit, 0=Write Mode SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out DeviceAdr, Hi(Adr), Mode LOOP=(7,0) {SDA=ADR[I],SCL=1,SCL=0} ; out 8 bits Lo(Adr) SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Lo(Adr) _START LOOP=(7,3) {SDA=R10[I],SCL=1,SCL=0} ; out 5 bits DeviceAdr LOOP=(9,8) {SDA=ADR[I],SCL=1,SCL=0} ; out 2 bits Hi(Adr) SDA=1,SCL=1,SCL=0 ; out 1 bit, 1=Read Mode 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 LOOP=(7,3) {SDA=R10[I],SCL=1,SCL=0} ; out 5 bits DeviceAdr LOOP=(9,8) {SDA=ADR[I],SCL=1,SCL=0} ; out 2 bits Hi(Adr) SDA=0,SCL=1,SCL=0 ; out 1 bit, 0=Write Mode SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out DeviceAdr, Hi(Adr), Mode LOOP=(7,0) {SDA=ADR[I],SCL=1,SCL=0} ; 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=1,SCL=0} ; out byte Data SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Data _STOP P=5000 ; delay: (Write Time) _PWAIT