;************************************************************** ; CRST: ; This performs system initialzation, it was moved here so the ; new power on reset functions could be tested in an 8751. ; ;************************************************************** ; ; First, initialize SFR's ; MOV SCON,#5AH ;INITIALIZE SFR'S MOV TMOD,#10H MOV TCON,#54H DB 75H ;MOV DIRECT, # OP CODE DB 0C8H ;T2CON LOCATION DB 34H ;CONFIGURATION BYTE ; MOV DPTR,#2001H ;READ CODE AT 2001H CLR A MOVC A,@A+DPTR CJNE A,#0AAH,$+6 ;IF IT IS AN AAH, DO USER RESET LCALL 2090H ; MOV R0,#IRAMTOP ;PUT THE TOP OF RAM IN R0 CLR A ;ZERO THE ACC ; MOV @R0,A ;CLEAR INTERNAL MEMORY DJNZ R0,$-1 ;LOOP TIL DONE ; ; Now, test the external memory ; MOV SPSAV,#CMNDSP ;SET UP THE STACK MOV SP,SPSAV ; MOV BOFAH,#HI(ROMADR) MOV BOFAL,#LO(ROMADR+17) MOV DPTR,#ROMADR ;GET THE BYTE AT 8000H MOVX A,@DPTR CLR C SUBB A,#31H ;FOR BIAS MOV MT1,A ;SAVE IN DIRECT MATH LOC CLR ACC.2 ;SAVE FOR RESET MOV R7,A ;SAVE IT IN R7 INC DPTR ACALL L31DPI ;SAVE BAUD RATE LCALL RCL INC DPTR ;GET MEMTOP ACALL L31DPI MOV DPTR,#5FH ;READ THE EXTERNAL BYTE MOVX A,@DPTR MOV DPTR,#0 ;ESTABLISH BASE FOR CLEAR CJNE A,#0A5H,CRS MOV A,MT1 CLR ACC.0 ;CLEAR BIT ONE XRL A,#4H JZ CR2 ; CRS: CJNE R7,#2,$+5 SJMP $+5 CJNE R7,#3,$+7 ACALL CL_1 SJMP CR1 ; CR0: MOV R3,DPH ;SAVE THE DPTR MOV R1,DPL INC DPTR MOV A,#5AH MOVX @DPTR,A MOVX A,@DPTR CJNE A,#5AH,CR1 CLR A MOVX @DPTR,A CJNE R3,#0E0H,CR0 ; CR1: CJNE R3,#03H,$+3 ;NEED THIS MUCH RAM JC CRST MOV DPTR,#MEMTOP ;SAVE MEMTOP ACALL S31DP2 ;SAVE MEMTOP AND SEED RCELL ACALL CNEW ;CLEAR THE MEMORY AND SET UP POINTERS ; CR2: ACALL RC1 ;SET UP STACKS IF NOT DONE ; LCALL AXTAL0 ;DO THE CRYSTAL MOV A,MT1 ;GET THE RESET BYTE CJNE A,#5,$+6 LCALL 4039H JNC BG1 ;CHECK FOR 0,1,2,3, OR 4 JNB ACC.0,BG3 ;NO RUN IF WRONG TYPE MOV DPTR,#ROMADR+16 MOVX A,@DPTR ;READ THE BYTE CJNE A,#55H,BG3 LJMP CRUN ; BG1: CLR A ;DO BAUD RATE MOV R3,A MOV R1,A MOV R0,#4 JB RXD,$ ;LOOP UNTIL A CHARACTER IS RECEIVED ; BG2: DJNZ R0,$ ;FOUR CLOCKS, IN LOOP LCALL DEC3210+4 ;NINE CLOCKS ******AA CALL-->LCALL MOV R0,#2 ;ONE CLOCK JNB RXD,BG2 ;TWO CLOCKS, LOOP UNTIL DONE JB RXD,$ ;WAIT FOR STOP CHARACTER TO END JNB RXD,$ LCALL RCL ;LOAD THE TIMER ******AA CALL-->LCALL ; BG3: MOV DPTR,#S_N ;GET THE MESSAGE ACALL CRP ;PRINT IT LJMP CRAM