PG8: MOV R7,#00H ;PROGRAM ONE BYTE AT A TIME MOV R6,#01H MOV R2,#HI(ROMADR-1) MOV R0,#LO(ROMADR-1);LOAD PROM ADDRESS ACALL PG1+3 INC R6 DB 0E5H ;MOV A DIRECT OP CODE DB 0CBH ;ADDRESS OF R2CAP HIGH ACALL PG1+3 DB 0E5H ;MOV A, DIRECT OP CODE DB 0CAH ;R2CAP LOW MOV R6,#3 MOV R1,#LO(MEMTOP-1) MOV R3,#HI(MEMTOP) ACALL PG1+3 ;SAVE MEMTOP SJMP PGR ; CIPROG: MOV DPTR,#IPROGS ;LOAD IPROG LOCATION SETB INTELB SJMP $+7 ;GO DO PROG ; CPROG: MOV DPTR,#PROGS ;LOAD PROG LOCATION CLR INTELB ; ACALL LD_T ;LOAD THE TIMER CLR PROMV ;TURN ON THE PROM VOLTAGE LCALL DELTST ;SEE IF A CR ******AA CALL-->LCALL JNZ PG8 ;SAVE TIMER IF SO MOV R4,#0FEH SETB INBIT ACALL ROMFD ;GET THE ROM ADDRESS OF THE LAST LOCATION LCALL TEMPD ;SAVE THE ADDRESS ******AA CALL-->LCALL MOV A,R4 ;GET COUNT CPL A LCALL TWO_R2 ;PUT IT ON THE STACK ******AA CALL-->LCALL CALL FP_BASE+14 ;OUTPUT IT ACALL CCAL ;GET THE PROGRAM ACALL CRLF ;DO CRLF MOV R0,TEMP4 ;GET ADDRESS MOV R2,TEMP5 MOV A,#55H ;LOAD SIGNIFIER INC R6 ;LOAD LEN + 1 CJNE R6,#00,$+4 INC R7 ACALL PG2-2 ; newpage PGR: SETB PROMV AJMP C_K ; PG1: MOV P2,R3 ;GET THE BYTE TO PROGRAM MOVX A,@R1 LCALL INC3210 ;BUMP POINTERS MOV R5,#1 ;SET UP INTELLIGENT COUMTER ; PG2: MOV R4,A ;SAVE THE BYTE IN R4 ACALL PG7 ;PROGRAM THE BYTE ACALL PG9 JB INTELB,PG4 ;SEE IF INTELLIGENT PROGRAMMING ; PG3: XRL A,R4 JNZ PG6 ;ERROR IF NOT THE SAME LCALL DEC76 ;BUMP THE COUNTERS ******AA CALL-->LCALL JNZ PG1 ;LOOP IF NOT DONE ANL PSW,#11100111B ;INSURE RB0 RET ; PG4: XRL A,R4 ;SEE IF PROGRAMMED JNZ PG5 ;JUMP IF NOT MOV A,R4 ;GET THE DATA BACK ACALL PG7 ;PROGRAM THE LOCATION ACALL ZRO ;AGAIN ACALL ZRO ;AND AGAIN ACALL ZRO ;AND AGAIN DJNZ R5,$-6 ;KEEP DOING IT ACALL PG9 ;RESET PROG SJMP PG3 ;FINISH THE LOOP ; PG5: INC R5 ;BUMP THE COUNTER MOV A,R4 ;GET THE BYTE CJNE R5,#25,PG2 ;SEE IF TRIED 25 TIMES ; PG6: SETB PROMV ;TURN OFF PROM VOLTAGE MOV PSW,#0 ;INSURE RB0 JNB DIRF,PG4-1 ;EXIT IF IN RUN MODE MOV DPTR,#E16X ;PROGRAMMING ERROR ; ERRLK: LJMP ERROR ;PROCESS THE ERROR ; newpage PG7: MOV P0,R0 ;SET UP THE PORTS MOV P2,R2 ;LATCH LOW ORDER ADDRESS ACALL PG11 ;DELAY FOR 8748/9 CLR ALED MOV P0,A ;PUT DATA ON THE PORT ; ZRO: NOP ;SETTLEING TIME + FP ZERO NOP NOP NOP NOP NOP ACALL PG11 ;DELAY A WHILE CLR PROMP ;START PROGRAMMING ACALL TIMER_LOAD ;START THE TIMER JNB TF1,$ ;WAIT FOR PART TO PROGRAM RET ;EXIT ; PG9: SETB PROMP ACALL PG11 ;DELAY FOR A WHILE JNB P3.2,$ ;LOOP FOR EEPROMS MOV P0,#0FFH CLR P3.7 ;LOWER READ ACALL PG11 MOV A,P0 ;READ THE PORT SETB P3.7 SETB ALED RET ; PG11: MOV TEMP5,#12 ;DELAY 30uS AT 12 MHZ DJNZ TEMP5,$ RET ;