; Orange programmer module v3.2 ; (c) 2000 Alex Plusov ; Philips I2C: ; CHIP=PCX8582,256x8 ; CHIP=PCX8594,512x8 ; CHIP=PCX8598,1024x8 SOCKET=1 ;"I2C" PING=SCL,0 PING=SDA,1 PINO=PTC,2 PINO=A0, 3 PINO=A1, 4 PINO=A2, 5 TESTMASK=11111100 ;7 pin not present CDELAY = 5 ; mks one bit delay [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SDA=0,SCL=1,SDA=1,SCL=0 ; Stop 01 [INIT] A0=0,A1=0,A2=0 [READ] _START R0=0xA LOOP=(3,0) {SDA=R0[I],SCL=1,SCL=0} ; out 4 bits DeviceAdr LOOP=(10,8){SDA=ADR[I],SCL=1,SCL=0} ; out 3 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 R0=0xA LOOP=(3,0) {SDA=R0[I],SCL=1,SCL=0} ; out 4 bits DeviceAdr LOOP=(10,8) {SDA=ADR[I],SCL=1,SCL=0} ; out 3 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 [WRITE] _START R0=0xA LOOP=(3,0) {SDA=R0[I],SCL=1,SCL=0} ; out 4 bits DeviceAdr LOOP=(10,8) {SDA=ADR[I],SCL=1,SCL=0} ; out 3 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 LOOP=(258,0) {PTC=1,P=2,PTC=0,P=2} ; PTC CLOCK TIMING (min 257 loops)