Blame | Last modification | View Log | Download | RSS feed
;**************************************************************;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'SMOV TMOD,#10HMOV TCON,#54HDB 75H ;MOV DIRECT, # OP CODEDB 0C8H ;T2CON LOCATIONDB 34H ;CONFIGURATION BYTE;MOV DPTR,#2001H ;READ CODE AT 2001HCLR AMOVC A,@A+DPTRCJNE A,#0AAH,$+6 ;IF IT IS AN AAH, DO USER RESETLCALL 2090H;MOV R0,#IRAMTOP ;PUT THE TOP OF RAM IN R0CLR A ;ZERO THE ACC;MOV @R0,A ;CLEAR INTERNAL MEMORYDJNZ R0,$-1 ;LOOP TIL DONE;; Now, test the external memory;MOV SPSAV,#CMNDSP ;SET UP THE STACKMOV SP,SPSAV;MOV BOFAH,#HI(ROMADR)MOV BOFAL,#LO(ROMADR+17)MOV DPTR,#ROMADR ;GET THE BYTE AT 8000HMOVX A,@DPTRCLR CSUBB A,#31H ;FOR BIASMOV MT1,A ;SAVE IN DIRECT MATH LOCCLR ACC.2 ;SAVE FOR RESETMOV R7,A ;SAVE IT IN R7INC DPTRACALL L31DPI ;SAVE BAUD RATELCALL RCLINC DPTR ;GET MEMTOPACALL L31DPIMOV DPTR,#5FH ;READ THE EXTERNAL BYTEMOVX A,@DPTRMOV DPTR,#0 ;ESTABLISH BASE FOR CLEARCJNE A,#0A5H,CRSMOV A,MT1CLR ACC.0 ;CLEAR BIT ONEXRL A,#4HJZ CR2;CRS: CJNE R7,#2,$+5SJMP $+5CJNE R7,#3,$+7ACALL CL_1SJMP CR1;CR0: MOV R3,DPH ;SAVE THE DPTRMOV R1,DPLINC DPTRMOV A,#5AHMOVX @DPTR,AMOVX A,@DPTRCJNE A,#5AH,CR1CLR AMOVX @DPTR,ACJNE R3,#0E0H,CR0;CR1: CJNE R3,#03H,$+3 ;NEED THIS MUCH RAMJC CRSTMOV DPTR,#MEMTOP ;SAVE MEMTOPACALL S31DP2 ;SAVE MEMTOP AND SEED RCELLACALL CNEW ;CLEAR THE MEMORY AND SET UP POINTERS;CR2: ACALL RC1 ;SET UP STACKS IF NOT DONE;LCALL AXTAL0 ;DO THE CRYSTALMOV A,MT1 ;GET THE RESET BYTECJNE A,#5,$+6LCALL 4039HJNC BG1 ;CHECK FOR 0,1,2,3, OR 4JNB ACC.0,BG3 ;NO RUN IF WRONG TYPEMOV DPTR,#ROMADR+16MOVX A,@DPTR ;READ THE BYTECJNE A,#55H,BG3LJMP CRUN;BG1: CLR A ;DO BAUD RATEMOV R3,AMOV R1,AMOV R0,#4JB RXD,$ ;LOOP UNTIL A CHARACTER IS RECEIVED;BG2: DJNZ R0,$ ;FOUR CLOCKS, IN LOOPLCALL DEC3210+4 ;NINE CLOCKS ******AA CALL-->LCALLMOV R0,#2 ;ONE CLOCKJNB RXD,BG2 ;TWO CLOCKS, LOOP UNTIL DONEJB RXD,$ ;WAIT FOR STOP CHARACTER TO ENDJNB RXD,$LCALL RCL ;LOAD THE TIMER ******AA CALL-->LCALL;BG3: MOV DPTR,#S_N ;GET THE MESSAGEACALL CRP ;PRINT ITLJMP CRAM