; Orange programmer module v2.4 ; (c) 1999-2001 Alex Plusov ; CHIP=HCS200,12x16(12) ; CHIP=HCS300,12x16(12) ; For Orange3/4/5!!! ; Orange2 support only HCS200 ; Read impossible, only write & verify ; HCS300 not work? SOCKET=2 ;"MW" PINO=S1,0 ;2 PINO=S2,1 ;3 CLOCK PINO=S0,2 ;1 PING=PWM,3 ;6 DATA PING=LED,4 ;7 (NC in HCS200) PINO=S3,5 ;4 (NC in HCS200) CDELAY=0 ; one set delay [INIT] PWM=1 LED=1 [_WAITWR] ;Wait for end write LOOP=(0,1000){ PWM?1{BREAK} ;ready P=60 } [WRITEBLOCK] S0=0,S1=0,S3=0 ;Unused button inputs to be held to ground during the entire programming sequence. PWM=0,S2=0,P=3000 IDISABLE S2=1,P=4000,PWM=1 ;Tps Program mode setup time min 3.5 max 4.5 ms IENABLE P=5000 ;Tph1 Hold Time 1 - min 3.5ms PWM=0,P=100 ;Tph2 Hold Time 2 - min 50 us S2=0,P=6000 ;Tpbw Bulk Write Time - min 4.0ms LOOP($SIZE){ IDISABLE LOOP=(0,15){PWM=DATA[I],P=60,S2=1,P=70,S2=0,P=70} PWM=1,P=70,S2=1,P=100 IENABLE ;PWM?1{PRINT=S("Chip not answer")} ADR=+1 ;_WAITWR P=65000 ;Twc min 50ms S2=0 P=100 } ;Verify: PRINT=S("Verify") PWM=1 ADR=0 LOOP($SIZE){ R0=0 IDISABLE LOOP=(0,15){R0[I]=PWM,P=60,S2=1,P=60,S2=0,P=60} IENABLE R1=DATA R0?!R1{PRINT=E("Verify Error at %02lX: %04lX %04lX",ADR,R1,R0),EXIT} ADR=+1 P=100 } PRINT=S("Verify Ok") [Test] PWM=1; S0=0,S1=0,S2=0 R0=1 P=60000 LOOP=(1,6){ PRINT=S("Send Function %u",R0) S0=R0[0] S1=R0[1] S2=R0[2] P=200000 S0=0,S1=0,S2=0 P=500000 R0=+1 }