; Orange programmer v1.08 ; 2005 Valentas,CnCLab ; Atmel 8-bit Microcontroller with Flash ; CHIP=AT89C1051,1K,89C4051.hp4 ; CHIP=AT89C2051,2K,89C4051.hp4 ; CHIP=AT89C4051,4K,89C4051.hp4 ; tested ; Orange4 edition ALLPINS=20 INFO="O4-AT89Cx051 adapter. Modify command work only with clear (FFH) bytes!" ;Input pins: PINI=P1_0,0,12 PINI=P1_1,1,13 PINI=P1_2,2,14 PINI=P1_3,3,15 PINI=P1_4,4,16 PINI=P1_5,5,17 PINI=P1_6,6,18 PINI=P1_7,7,19 ;Output pins: PINO=P1_0,0,12 PINO=P1_1,1,13 PINO=P1_2,2,14 PINO=P1_3,3,15 PINO=P1_4,4,16 PINO=P1_5,5,17 PINO=P1_6,6,18 PINO=P1_7,7,19 PINO=P3_2,8,6 PINO=P3_3,9,7 PINO=P3_4,10,8 PINO=P3_5,11,9 PINO=P3_7,11,11 PINO=XTAL1,12,5 ;PINO=CLK,10 ;PINO=VPP,11 ;Power pins: PINO=VCC,254,20 ; +5V PINO=GND,255,10 ; GND PINO=RSTVPP,253,1 ;PINO=Vpp,0,1; +12V ;Other pins: PINO=RX_P3_0,0,2 PINO=TX_P3_1,0,3 PINO=XTAL2,0,4 BUSI=DBI,0 BUSO=DBO,0 CDELAY=2 R9=Lock,L,1:Off,2:Verify,3:All [_INCADD] R5=ADR LOOP=(0,0xFFF){ ;increment address to current value! R6?R5{BREAK} XTAL1=1,XTAL1=0 ;_INCADD R6=+1 } [_CFGP] P3_7=R0[0] ;P3_5=R0[1] ;one common pin! P3_4=R0[2] P3_3=R0[3] [#!SETUP] R9=2 ;lock all [INIT] VPP=0 P=40000 DBO=0 XTAL1=0,P3_2=0 VPP=5000 P=40000 P3_2=1 R6=0 ;currrent address register [_READ] DBO=0xFF _INCADD _CFGP(3) ; Read R0=DBI [READ] _READ,DATA=R0 [WRITE] _INCADD _CFGP(0x7) ;Write VPP=12000,P=2000 DBO=DATA P=50 P3_2=0,P=100,P3_2=1 VPP=5000,P=2000 ["Blank Check"] R2=0,R3=0xFF,R4=0 PRINT=P(0,$SIZE) ;progress LOOP=($SIZE){ ADR=R2,_READ R0?!R3{ PRINT=A("Blank Check ERROR!\n Adr %04lXH = %02lXH\n Countinue?",R2,R0) RA?0{VPP=0,EXIT} R4=1},R2=+1 PRINT=P(R2) } XTAL1=0 R4?0{PRINT=S("Blank Check OK !") P=1000000} [Erase] _CFGP(0x8) ; Erase VPP=12000,P=5000 P3_2=0,P=25000,P3_2=1 VPP=0,XTAL1=0 [---] ["Write Lock"] VCC=0 GET=("Set Lock Bits",R9),RA?0{VPP=0,EXIT} ;PRINT=A("Write Lock Bits ?"),RA?0{EXIT} VPP=0,VCC=1 DBO=0 P3_2=0,XTAL1=0 P=40000 VPP=5000,P3_2=1 R9?>0{ _CFGP(0xF) ; Lock Bit1 VPP=12000,P=2000 P3_2=0,P=15000,P3_2=1 } R9?>1{ _CFGP(0xC) ; Lock Bit2 VPP=12000,P=2000 P3_2=0,P=15000,P3_2=1 } ["Read ID"] VPP=5000 DBO=0xFF _CFGP(0) ; Read Signature bytes R1=DBI XTAL1=1,XTAL1=0 R2=DBI XTAL1=1,XTAL1=0 R3=DBI P3_2=0,VCC=0 VPP=0,XTAL1=0 R2?11H{PRINT=("Signature bytes = %02lX %02lX %02lX - 89C1051",R1,R2,R3),EXIT} R2?21H{PRINT=("Signature bytes = %02lX %02lX %02lX - 89C2051",R1,R2,R3),EXIT} R2?41H{PRINT=("Signature bytes = %02lX %02lX %02lX - 89C4051",R1,R2,R3),EXIT} PRINT=("Signature bytes : %02lX %02lX %02lX",R1,R2,R3) [END] VPP=0,P3_2=0,XTAL1=0