1.1 MEMORY USAGE (Version 1.0)
The following list specifies what locations in internal and external memory MCS BASIC-52 uses, and what these locations are used for. This information can largely be regarded as "for your information," but it can be used to do things like alter the pulse width of a EPROM programming pulse, etc.
INTERNAL MEMORY ALLOCATION: LOCATION(S) IN HEX MCS BASIC-52 USAGE 00H THRU 07H "WORKING REGISTER BANK" 08H BASIC TEXT POINTER--LOW BYTE 09H ARGUMENT STACK POINTER 0AH BASIC TEXT POINTER--HIGH BYTE 0BH THRU 0FH TEMPORARY BASIC STORAGE 10H READ TEXT POINTER--LOW BYTE 11H CONTROL STACK POINTER 12H READ TEXT POINTER--HIGH BYTE 13H START ADDRESS OF BASIC PROGRAM--HIGH BYTE 14H START ADDRESS OF BASIC PROGRAM--LOW BYTE 15H NULL COUNT 16H PRINT HEAD POSITION FOR OUTPUT 17H FLOATING POINT OUTPUT FORMAT TYPE 18H THRU 21H NOT USED--RESERVED FOR USER 22H BITS USED SPECIFICALLY AS FOLLOWS BIT 22.0H SET WHEN "ONTIME" STATEMENT IS EXECUTED BIT 22.1H SET WHEN BASIC INTERRUPT IN PROGRESS BIT 22.2H SET WHEN "ONEX1" STATEMENT IS EXECUTED BIT 22.3H SET WHEN "ONERR" STATEMENT IS EXECUTED BIT 22.4H SET WHEN "ONTIME" INTERRUPT IS IN PROGRESS BIT 22.5H SET WHEN A LINE IS EDITED BIT 22.6H SET WHEN EXTERNAL INTERRUPT IS PENDING BIT 22.7H WHEN SET, CONT COMMAND WILL WORK 23H BITS USED SPECIFICALLY AS FOLLOWS BIT 23.0H USED AS FLAG FOR "GET" OPERATOR BIT 23.1H SET WHEN INVALID INTEGER FOUND IN TEXT BIT 23.2H TEMPORARY BIT LOCATION BIT 23.3H CONSOLE OUTPUT CONTROL, 1 = LINE PRINTER BIT 23.4H CONSOLE OUTPUT CONTROL, 1 = USER DEFINED BIT 23.5H BASIC ARRAY INITIALIZATION BIT BIT 23.6H CONSOLE INPUT CONTROL, 1 = USER DEFINED BIT 23.7H RESERVED 24H BITS USED SPECIFICALLY AS FOLLOWS BIT 24.0H STOP STATEMENT OR CONTROL-C ENCOUNTERED BIT 24.1H 0 = HEX INPUT, 1 = FP INPUT BIT 24.2H 0 = RAM MODE, 1 = ROM MODE BIT 24.3H ZERO FLAG FOR DOUBLE BYTE COMPARE BIT 24.4H SET WHEN ARGUMENT STACK HAS A VALUE BIT 24.5H RETI INSTRUCTION EXECUTED BIT 24.6H RESERVED BIT 24.7H RESERVED 25H BITS USED SPECIFICALLY AS FOLLOWS BIT 25.0H RESERVED, SOFTWARE TRAP TEST BIT 25.1H FIND THE END OF PROGRAM, IF SET BIT 25.2H RESERVED BIT 25.3H INTERRUPT STATUS SAVE BIT BIT 25.4H SET WHEN PROGRAM EXECUTION IS COMPLETE BIT 25.5H RESERVED, EXTERNAL TRAP TEST BIT 25.6H SET WHEN CLOCK1 EXECUTED, ELSE CLEARED BIT 25.7H SET WHEN BASIC IS IN THE COMMAND MODE 26H BITS USED SPECIFICALLY AS FOLLOWS BIT 26.0H SET TO DISABLE CONTROL-C BIT 26.1H SET TO ENABLE "FAKE" DMA BIT 26.2H RESERVED BIT 26.3H SET TO EVOKE "INTELLIGENT" PROM PROGRAMMING BIT 26.4H SET TO PRINT TEXT STRING FROM ROM BIT 26.5H RESERVED BIT 26.6H SET TO SUPPRESS ZEROS IN HEX MODE PRINT BIT 26.7H SET TO EVOKE HEX MODE PRINT 27H "BIT" ADDRESSABLE BYTE COUNTER 28H THRU 3DH BIT AND BYTE FLOATING POINT WORKING SPACE 3EH INTERNAL STACK POINTER HOLDING REGISTER 3FH LENGTH OF USER DEFINED STRING--$ 40H TIMER 1 RELOAD LOCATION--HIGH BYTE 41H TIMER 1 RELOAD LOCATION--LOW BYTE 42H BASIC TEXT POINTER SAVE LOCATION--HIGH BYTE 43H BASIC TEXT POINTER SAVE LOCATION--LOW BYTE 44H RESERVED 45H TRANSCENDENTAL FUNCTION TEMP STORAGE 46H TRANSCENDENTAL FUNCTION TEMP STORAGE 47H MILLI-SECOND COUNTER FOR REAL TIME CLOCK 48H SECOND COUNTER FOR REAL TIME CLOCK--HIGH BYTE 49H SECOND COUNTER FOR REAL TIME CLOCK--LOW BYTE 4AH TIMER 0 RELOAD FOR REAL TIME CLOCK 4BH SOFTWARE SERIAL PORT BAUD RATE--HIGH BYTE 4CH SOFTWARE SERIAL PORT BAUD RATE--LOW BYTE 4DH THRU 0FFH 8052AH STACK SPACE AND USER WORKING SPACE EXTERNAL MEMORY ALLOCATION LOCATION(S) IN HEX MCS BASIC-52 USAGE 00H AND 01H "LAST" END OF FILE ADDRESS FOR RAM FILE (H-L) 02H AND 03H CURRENT END OR FILE ADDRESS FOR RAM FILE (H-L) 04H LENGTH OF THE CURRENT EDITED LINE 05H AND 06H LN NUM IN BINARY OF CURRENT EDITED LINE (H-L) 07H THRU 49H BASIC INPUT BUFFER 50H THRU 5FH FLOATING POINT OUTPUT TEMP 60H THRU 0FEH CONTROL STACK 0FFH CONTROL STACK OVERFLOW 100H LOCATION TO SAVE "GET" CHARACTER 101H LOCATION TO SAVE ERROR CHARACTER CODE 102H AND 103H LOCATION TO GO TO ON USER "ONERR" (H-L) 104H AND 105H TOP OF VARIABLE STORAGE (H-L) 106H AND 107H FP STORAGE ALLOCATION (H-L) 108H AND 109H MEMORY ALLOCATED FOR MATRICES (H-L) 10AH AND 10BH TOP OF MEMORY ASSIGNED TO BASIC (H-L) 10CH AND 10DH RANDOM NUMBER SEED (H-L) 10EH THRU 113H CRYSTAL VALUE 114H THRU 11FH FLOATING POINT TEMPS 120H AND 121H LOCATION TO GO TO ON ONEX1 INTERRUPT (H-L) 122H AND 123H NUMBER OF BYTES ALLOCATED FOR STRINGS (H-L) 124H THRU 127H ONTIME INTERRUPT AND LINE NUMBER (H-L) 128H AND 129H "NORMAL" PROM PROGRAMMER TIME OUT (H-L) 12AH AND 12BH "INTELLIGENT" PROM PROGRAMMER TIME OUT (H-L) 12CH RESERVED 12DH THRU 1FEH ARGUMENT STACK
NOTE: (H-L) means HIGH BYTE--LOW BYTE. in external memory all 16 bit binary numbers are stored with the HIGH BYTE in the first (lower order) address and the LOW BYTE in the next sequential address.
The following list specifies what locations in internal and external memory locations are used by Version 1.1 of MCS BASIC-52. Any differences between V1.0 and V1.1 are in bold face type. (In the scanned ASCII version I have marked them with an exclamation mark '!')
INTERNAL MEMORY ALLOCATION: (VERSION 1.1) LOCATION(S) IN HEX MCS BASIC-52 USAGE 00H THRU 07H "WORKING REGISTER BANK" 08H BASIC TEXT POINTER--LOW BYTE 09H ARGUMENT STACK POINTER 0AH BASIC TEXT POINTER--HIGH BYTE 0BH THRU 0FH TEMPORARY BASIC STORAGE (Available to user in BASIC CALLS to ASM routines) 10H READ TEXT POINTER--LOW BYTE 11H CONTROL STACK POINTER 12H READ TEXT POINTER--HIGH BYTE 13H START ADDRESS OF BASIC PROGRAM--HIGH BYTE 14H START ADDRESS OF BASIC PROGRAM--LOW BYTE 15H NULL COUNT 16H PRINT HEAD POSITION FOR OUTPUT 17H FLOATING POINT OUTPUT FORMAT TYPE 18H THRU 21H NOT USED--RESERVED FOR USER 22H BITS USED SPECIFICALLY AS FOLLOWS BIT 22.0H SET WHEN "ONTIME" STATEMENT IS EXECUTED BIT 22.1H SET WHEN BASIC INTERRUPT IN PROGRESS BIT 22.2H SET WHEN "ONEX1" STATEMENT IS EXECUTED BIT 22.3H SET WHEN "ONERR" STATEMENT IS EXECUTED BIT 22.4H SET WHEN "ONTIME" INTERRUPT IS IN PROGRESS BIT 22.5H SET WHEN A LINE IS EDITED BIT 22.6H SET WHEN EXTERNAL INTERRUPT IS PENDING BIT 22.7H WHEN SET, CONT COMMAND WILL WORK 23H BITS USED SPECIFICALLY AS FOLLOWS BIT 23.0H USED AS FLAG FOR "GET" OPERATOR BIT 23.1H ! SET WHEN PRINT@ OR LIST@ IS EVOKED BIT 23.2H ! RESERVED, TRAPS TIMER 1 INTERRUPT BIT 23.3H CONSOLE OUTPUT CONTROL, 1 = LINE PRINTER BIT 23.4H CONSOLE OUTPUT CONTROL, 1 = USER DEFINED BIT 23.5H BASIC ARRAY INITIALIZATION BIT BIT 23.6H CONSOLE INPUT CONTROL, 1 = USER DEFINED BIT 23.7H ! RESERVED, USED TO TRAP SERIAL PORT INTERRUPT 24H BITS USED SPECIFICALLY AS FOLLOWS BIT 24.0H STOP STATEMENT OR CONTROL-C ENCOUNTERED BIT 24.1H ! USER IDLE BREAK BIT BIT 24.2H ! SET DURING AN INPUT INSTRUCTION BIT 24.3H ! RESERVED BIT 24.4H SET WHEN ARGUMENT STACK HAS A VALUE BIT 24.5H RETI INSTRUCTION EXECUTED BIT 24.6H ! RESERVED, TRAPS EXTERNAL INTERRUPT 0 BIT 24.7H ! SET BY USER TO SIGNIFY THAT A VALID LIST@ OR PRINT@ DRIVER IS PRESENT 25H BITS USED SPECIFICALLY AS FOLLOWS BIT 25.0H RESERVED, SOFTWARE TRAP TEST BIT 25.1H FIND THE END OF PROGRAM, IF SET BIT 25.2H ! SET DURING A DIM STATEMENT BIT 25.3H INTERRUPT STATUS SAVE BIT BIT 25.4H ! RESERVED, INPUT TRAP BIT 25.5H ! SET TO SIGNIFY EXPANSION IS PRESENT BIT 25.6H SET WHEN CLOCK1 EXECUTED, ELSE CLEARED BIT 25.7H SET WHEN BASIC IS IN THE COMMAND MODE 26H BITS USED SPECIFICALLY AS FOLLOWS BIT 26.0H SET TO DISABLE CONTROL-C BIT 26.1H SET TO ENABLE "FAKE" DMA BIT 26.2H ! RESERVED, OUTPUT TRAP BIT 26.3H SET TO EVOKE "INTELLIGENT" PROM PROGRAMMING BIT 26.4H SET TO PRINT TEXT STRING FROM ROM BIT 26.5H ! SET WHEN CONTROL-S ENCOUNTERED BIT 26.6H SET TO SUPPRESS ZEROS IN HEX MODE PRINT BIT 26.7H SET EVOKE HEX MODE PRINT 27H "BIT" ADDRESSABLE BYTE COUNTER 28H THRU 3DH BIT AND BYTE FLOATING POINT WORKING SPACE 3EH INTERNAL STACK POINTER HOLDING REGISTER 3FH LENGTH OF USER DEFINED STRING--$ 40H TIMER 1 RELOAD LOCATION--HIGH BYTE 41H TIMER 1 RELOAD LOCATION--LOW BYTE 42H BASIC TEXT POINTER SAVE LOCATION--HIGH BYTE 43H BASIC TEXT POINTER SAVE LOCATION--LOW BYTE 44H RESERVED 45H TRANCENDENTAL FUNCTION TEMP STORAGE 46H TRANCENDENTAL FUNCTION TEMP STORAGE 47H MILLI-SECOND COUNTER FOR REAL TIME CLOCK 48H SECOND COUNTER FOR REAL TIME CLOCK--HIGH BYTE 49H SECOND COUNTER FOR REAL TIME CLOCK--LOW BYTE 4AH TIMER 0 RELOAD FOR REAL TIME CLOCK 4BH ! USER ARGUMENT FOR ONTIME--HIGH BYTE 4CH ! USER ARGUMENT FOR ONTIME--LOW BYTE 4DH THRU 0FFH 8052AH STACK SPACE AND USER WORKING SPACE EXTERNAL MEMORY ALLOCATION: (VERSION 1.1) LOCATION(S) IN HEX MCS BASIC-52 USAGE 00H THRU 03H ! NOT USED, RESERVED 04H LENGTH OF THE CURRENT EDITED LINE 05H AND 06H LN NUM IN BINARY OF CURRENT EDITED LINE (H-L) 07H THRU 56H ! BASIC INPUT BUFFER 56H THRU 5DH ! BINARY TO INTEGER TEMP 5EH ! USED FOR RUN TRAP MODE (= 34H) 5FH ! USED FOR POWER-UP TRAP (= 0A5H) 60H THRU 0FEH CONTROL STACK 00FH CONTROL STACK OVERFLOW 100H LOCATION TO SAVE "GET" CHARACTER 101H LOCATION TO SAVE ERROR CHARACTER CODE 102H AND 103H LOCATION TO GO TO ON USER "ONERR" (H-L) 104H AND 105H TOP OF VARIABLE STORAGE (H-L) 106H AND 107H FP STORAGE ALLOCATION (H-L) 108H AND 109H MEMORY ALLOCATED FOR MATRICIES (H-L) 10AH AND 10BH TOP OF MEMORY ASSIGNED TO BASIC (H-L) 10CH AND 10DH RANDOM NUMBER SEED (H-L) 1OEH THRU 113H CRYSTAL VALUE 114H THRU 11FH FLOATING POINT TEMPS 120H AND 121H LOCATION TO GO TO ON ONEX1 INTERRUPT (H-L) 122H AND 123H NUMBER OF BYTES ALLOCATED FOR STRINGS (H-L) 124H AND 125H ! SOFTWARE SERIAL PORT BAUD RATE (H-L) 126H AND 127H ! LINE NUMBER FOR ONTIME INTERRUPT (H-L) 128H AND 129H "NORMAL" PROM PROGRAMMER TIME OUT (H-L) 12AH AND 12BH "INTELLIGENT" PROM PROGRAMMER TIME OUT (H-L) 12CH RESERVED 12DH THRU 1FEH ARGUMENT STACK
NOTE: (H-L) still means HIGH BYTE--LOW BYTE, in external memory all 16 bit binary numbers are stored with the HIGH BYTE in the first (lower order) address and the LOW BYTE in the next sequential address.
1.2 USING THE PWM STATEMENT
The PWM statement can be used to generate quite accurate frequencies. The following table lists the reload values 8 octaves of an equal tempered chromatic scale. The reload values are for the first two arguments of the PWM statement, so it is assumed that a square wave is being generated. The reload values assume a 11.0592 MHz crystal.
IDEAL ACTUAL HEX NOTE OCTAVE FREQUENCY FREQUENCY RELOAD RELOAD C 1 32.703 32.704 14090 370AH C# 1 34.648 34.649 13299 33F3H D 1 36.708 36.708 12553 3109H D# 1 38.891 38.889 11849 2E49H E 1 41.203 41.202 11184 2BBOH F 1 43.654 43.653 10556 293CH F# 1 46.246 46.215 9963 26EBH G 1 48.999 49.000 9404 24BCH G# 1 51.913 51.915 8876 22ACH A 1 55.000 55.001 8378 20BAH A# 1 58.270 58.270 7908 1EE4H B 1 61.735 61.736 7464 1D28H C 2 65.406 65.408 7045 1B85H C# 2 69.296 69.293 6650 19FAH D 2 73.416 73.411 6277 1885H D# 2 77.782 77.785 5924 1724H E 2 82.406 82.403 5592 15D8H F 2 87.308 87.306 5278 149EH F# 2 92.498 92.493 4982 1376H G 2 97.998 98.000 4702 125EH G# 2 103.826 103.830 4438 1156H A 2 110.000 110.002 4189 105DH A# 2 116.540 116.540 3954 0F72H B 2 123.470 123.472 3732 0E94H C 3 130.812 130.798 3523 0DC3H C# 3 138.592 138.586 3325 0CFDH D 3 146.832 146.845 3138 0C42H D# 3 155.564 155.570 2962 0B92H E 3 164.812 164.807 2796 0AECH F 3 174.616 174.612 2639 0A4FH F# 3 184.996 184.986 2491 09BBH G 3 195.996 196.001 2351 092FH G# 3 207.652 207.661 2219 08ABH A 3 220.000 219.952 2095 082FH A# 3 233.080 233.080 1977 07B9H B 3 246.940 246.946 1866 074AH C 4 261.624 261.669 1761 06E1H C# 4 277.184 277.256 1662 067EH D 4 293.664 293.690 1569 0621H D# 4 311.128 311.141 1481 05C9H E 4 329.624 329.614 1398 0576H F 4 349.232 349.355 1319 0527H F# 4 369.992 370.120 1245 04DDH G 4 391.992 391.836 1176 0498H G# 4 415.304 415.135 1110 0456H A 4 440.000 440.114 1047 0417H A# 4 466.160 465.925 989 03DDH B 4 493.880 493.890 933 03A5H C 5 523.248 523.042 881 0371H C# 5 554.368 554.512 831 033FH D 5 587.238 587.006 785 0311H D# 5 622.256 621.862 741 02E5H E 5 659.248 659.228 699 02BBH F 5 698.464 698.182 660 0294H F# 5 739.984 739.647 623 026FH G 5 783.984 783.674 588 024CH G# 5 830.608 830.270 555 022BH A 5 880.000 879.389 524 020CH A# 5 932.320 932.793 494 01EEH B 5 987.760 986.724 467 01D3H C 6 1046.496 1047.272 440 01B8H C# 6 1108.736 1107.692 416 01A0H D 6 1174.656 1175.510 392 0188H D# 6 1244.512 1245.405 370 0172H E 6 1318.496 1320.343 349 015DH F 6 1396.928 1396.364 330 014AH F# 6 1479.968 1481.672 311 0137H G 6 1567.968 1567.347 294 0126H G# 6 1661.216 1663.538 277 0115H A 6 1760.000 1758.779 262 0106H A# 6 1864.640 1865.587 247 00F7H B 6 1975.520 1977.682 233 00E9H C 7 2092.992 2094.545 220 00DCH C# 7 2217.472 2215.385 208 00DOH D 7 2349.312 2351.020 196 00C4H D# 7 2489.024 2490.811 185 00B9H E 7 2636.992 2633.143 175 00AFH F 7 2793.856 2792.727 165 00A5H F# 7 2959.936 2953.846 156 009CH G 7 3135.936 3134.694 147 0093H G# 7 3322.432 3315.108 139 008BH A 7 3520.000 3517.557 131 0083H A# 7 3729.280 3716.129 124 007CH B 7 3951.040 3938.362 117 0075H C 8 4185.984 4189.091 110 006EH C# 8 4434.944 4430.770 104 0068H D 8 4698.624 4702.041 98 0062H D# 8 4987.048 5008.695 92 005CH E 8 5273.984 5296.552 87 0057H F 8 5587.712 5619.512 82 0052H F# 8 5919.872 5907.692 78 004EH G 8 6217.872 6227.027 74 004AH G# 8 6644.864 6678.261 69 0045H A 8 7040.000 7089.231 65 0041H A# 8 7458.560 7432.258 62 003EH B 8 7902.080 7944.827 58 003AH
The following program generates the appropriate reload values for the PWM statement, using any crystal. The user enters the desired frequency and the crystal and the program determined the reload values and errors.
>1O INPUT "ENTER CRYSTAL FREQUENCY - ",X >20 T-12/X >30 INPUT "ENTER DESIRED FREQUENCY FOR PWM - ",F >40 F1=1/F >50 C=(F1/T)/2 : REM CALCULATE RELOAD VALUE >60 IF C<20 THEN 30 >70 C1=C-INT(C) : REM CALCULATE FRACTION >80 IF C1<.5 THEN 90 : C=C+1 >90 PRINT : PRINT "THE DESIRED FREQUENCY IS - ",X,"HZ" >100 C=INT(C) : PRINT >110 PRINT "THE ACTUAL FREQUENCY IS - ",1/(2*C*T),"HZ" >120 PRINT >130 PRINT "THE RELOAD VALUE FOR PWM IS - ",C," IN HEX - ",: PH1.C >140 INPUT "ANOTHER FREQUENCY, 1=YES. 0=N0 - ",Q >150 1F Q=1 THEN 20
1.3 BAUD RATES AND CRYSTALS
The 16 bit auto-reload timer/counter (TIMER2) that is used to generate baud rates for the MCS BASIC-52 device is capable of generating accurate baud rates with a number of crystals. The following is a list of crystals that will accurately generate 9600 baud on the MCS BASIC-52 device. Additionally, the crystal values on the left hand side of the table will accurately generate 19200 baud.
XTAL RCAP2 RELOAD XTAL RCAP2 RELOAD 3680400 65524 3993600 65523 4300800 65522 4608000 65521 4915200 65520 5222400 65519 5529600 65518 5836800 65517 6144000 65516 6451200 65515 6758400 65514 7065600 65513 7372800 65512 7680000 65511 7987200 65510 8294400 65509 8601600 65508 8908800 65507 9216000 65506 9523200 65505 9830400 65504 10137600 65503 10444800 65502 10752000 65501 11059200 65500 11366400 65499 11673600 65498 11980800 65497
With the crystals listed above. the accuracy of the baud rate generator and the REAL TIME CLOCK will depend ONLY on the absolute accuracy of the crystal. Note that the baud rate generator for the 8052AH is so accurate that any crystal above 10 MHz will generate 9600 baud to within 1.5% accuracy.
The following program generates the appropriate TIMER2 reload values for a given baud rate. The user supplies the system clock frequency and the desired baud rate and the program calculates the proper TIMER2 reload value. Additionally, percent error, for both the baud rate generator and MCS BASlC-52's REAL TIME CLOCK are calculated and displayed.
>1O INPUT"ENTER CRYSTAL - ",X >20 INPUT"ENTER BAUD RATE - ",B >30 R=X/(32*B) : T=X/76800 >40 R1=R-INT(R) : T1=T-INT(T) >50 IF R1<.5 THEN 80 >60 R1=1-R1 >70 R=R+1 >80 IF T1<.5 THEN 110 >90 T1=1-T1 >100 T=T+1 >110 PRINT "TIMER2 RELOAD VALUE IS - ",USING(######),INT(65536-R) >120 PRINT "BAUD RATE ERROR IS - ",USING(## ###),(R1/R)*100,"%" >130 PRINT "REAL TIME CLOCK ERROR IS - "(T1/T)*100,"/."
1.4 QUICK REFERENCE
COMMANDS: COMMAND FUNCTION EXAMPLE(S) RUN Execute a program RUN CONT CONTinue after a STOP or control-C CONT LIST LIST program to the console device LIST LIST 10-50 LIST# LIST program to serial printer LIST# LIST# 50 LIST@ LIST program to user driver (version 1.1 LIST@ only) LIST@ 50 NEW erase the program stored in RAM NEW NULL set NULL count after carriage return- NULL line feed NULL 4 RAM evoke RAM mode, current program in RAM READ/WRITE memory ROM evoke ROM mode, current program in ROM ROM/EPROM memory ROM 3 XFER transfer a program from ROM/EPROM to XFER RAM PROG save the current program in EPROM PROG PROG1 save baud rate information in EPROM PROG1 PROG2 save baud rate information in EPROM PROG2 and execute program after RESET PROG3 save baud rate and MTOP information in PROG3 EPROM (version 1.1 only) PROG4 save baud rate and MTOP information in PROG4 EPROM and execute program after RESET (version 1.1 only) PROG5 same as PROG4 except that external PROG5 RAM is not cleared on RESET or power up if external RAM contains a 0A5H in location 5EH (version 1.1 only) PROG6 same as PROG6 except that external PROG6 code location 4039H is CALLED after RESET (version 1.1 only) FPROG save the current program in EPROM FPROG using the INTELligent algorithm FPROG1 save baud rate information in EPROM FPROG1 using the INTELligent algorithm FPROG2 save baud rate information in EPROM FPROG2 and execute program after RESET, use INTELligent algorithm FPROG3 same as PROG3, except INTELligent FPROG3 programming algorithm is used (version 1.1 only) FPROG4 same as PROG4, except INTELligent FPROG4 programming algorithm is used (version 1.1 only) FPROG5 same as PROG5, except INTELligent FPROG5 programming algorithm is used (version 1.1 only) FPROG6 same as PROG6, except INTELligent FPROG6 programming algorithm is used (version 1.1 only) BAUD set baud rate for line printer port BAUD 1200 CALL CALL assembly language program CALL 9000H CLEAR CLEAR variables, interrupts and Strings CLEAR CLEARS CLEAR Stacks CLEARS CLEARI CLEAR Interrupts CLEARI CLOCK1 enable REAL TIME CLOCK CLOCK1 CLOCK0 disable REAL TIME CLOCK CLOCK0 DATA DATA to be read by READ statement DATA 100 READ READ data in DATA statement READ A RESTORE RESTORE READ pointer RESTORE DIM allocate memory for arrayed variables DIM A(20) DO set up loop for WHILE or UNTIL DO UNTIL test DO loop condition (loop if false) UNTIL A= 10 WHILE test DO loop condition (loop if true) WHILE A= B END terminate program execution END FOR-TO-{STEP} set up FOR-NEXT loop FOR A= 1 TO 5 NEXT test FOR-NEXT loop condition NEXT A GOSUB execute subroutine GOSUB 1000 RETURN RETURN from subroutine RETURN GOTO GOTO program line number GOTO 500 ON GOTO conditional GOTO ON A GOTO 5,20 ON GOSUB conditional GOSUB ON A GOSUB 2,6 IF-THEN-{ELSE} conditional test IF A<B THEN A=0 INPUT INPUT a string or variable INPUT A LET assign a variable or string a value LET A= 10 (LET is optional) ONERR ONERRor GOTO line number ONERR 1000 ONTIME generate an interrupt when TIME is equal ONTIME 10, 1000 to or greater than ONTIME argument-line number is after comma ONEX1 GOSUB to line number following ONEX1 ONEX1 1000 when INT1 pin is pulled low PRINT PRINT variables, strings or literals PRINT A P. is shorthand for PRINT PRINT# PRINT to software serial port PRINT# A PH0. PRINT HEX mode with zero suppression PH0. A PH1. PRINT HEX mode with no zero PH1. A suppression PH0.# PH0. to line printer PH0.# A PH1.# PH1.# to line printer PH1.# A PRINT@ PRINT to user defined driver (version 1.1 PRINT@ 5*5 only) PH0.@ PH0. to user defined driver (version 1.1 PH0. @ only) XBY(5EH) PH1.@ PH1. to user defined driver (version 1.1 PH1.@ A only) PGM Program an EPROM (version 1.1 only) PGM PUSH PUSH expressions on argument stack PUSH 10, A POP POP argument stack to variables POP A, B, C PWM PULSE WIDTH MODULATION PWM 50, 50, 100 REM REMark REM DONE RETI RETurn from Interrupt RETI STOP break program execution STOP STRING allocate memory for STRlNGs STRING 50, 10 UI1 evoke User console Input routine UI1 UI0 evoke BASIC console Input routine UI0 UO1 evoke User console Output routine UO1 UO0 evoke BASIC console Output routine UO0 ST@ store top of stack at user specified ST@ 1000H location (version 1.1 only) ST@ A LD@ load top of stack from user specified LD@ 1000H location (version 1.1 only) LD@ A IDLE wait for interrupt (version 1.1 only) IDLE RROM run a program in EP(ROM) (version 1.1 RROM 3 only) OPERATORS--DUAL OPERAND: OPERATOR FUNCTION EXAMPLE(S) + ADDITION 1 + 1 / DIVISION 10/2 ** EXPONENTATION 2**4 * MULTIPLICATION 4*4 - SUBTRACTION 8 - 4 .AND. LOGICAL AND 10.AND.5 .OR. LOGICAL OR 2.0R.1 .XOR. LOGICAL EXCLUSIVE OR 3.XOR.2 OPERATORS--SINGLE OPERAND: ABS( ) ABSOLUTE VALUE ABS(-3) NOT( ) ONES COMPLEMENT NOT(0) INT( ) INTEGER INT(3.2) SGN( ) SIGN SGN( - 5) SQR( ) SQUARE ROOT SQR(100) RND RANDOM NUMBER RND LOG( ) NATURAL LOG LOG(10) EXP( ) "e" (2.7182818) TO THE X EXP(10) SIN( ) RETURNS THE SINE OF ARGUMENT SIN(3.14) COS( ) RETURNS THE COSINE OF COS(0) ARGUMENT TAN( ) RETURNS THE TANGENT OF TAN(.707) ARGUMENT ATN( ) RETURNS ARCTANGENT OF ATN(1) ARGUMENT OPERATORS--SPECIAL FUNCTION: CBY( ) READ PROGRAM MEMORY P. CBY(4000) DBY( ) READ/ASSIGN INTERNAL DATA DBY(99)=10 MEMORY XBY( ) READ/ASSIGN EXTERNAL DATA P. XBY(10) MEMORY GET READ CONSOLE P. GET IE READ/ASSIGN IE REGISTER IE=82H IP READ/ASSIGN IP REGISTER IP=0 PORT1 READ/ASSIGN l/O PORT 1 (P1) PORT1=0FFH PCON READ/ASSIGN PCON REGISTER PCON=0 RCAP2 READ/ASSIGN RCAP2 RCAP2=100 (RCAP2H:RCAP2L) T2CON READ/ASSIGN T2CON REGISTER P. T2CON TCON READ/ASSIGN TCON REGISTER TCON=10H TMOD READ/ASSIGN TMOD REGISTER P. TMOD TIME READ/ASSIGN THE REAL TIME CLOCK P. TIME TIMER0 READ/ASSIGN TIMER0 (TH0: TL0) TIMER0=0 TIMER1 READ/ASSIGN TIMER1 (TH1: TL1) P. TIMER1 TIMER2 READ/ASSIGN TIMER2 (TH2: TL2) TIMER2=0FFH STORED CONSTANT: PI PI -- 3.1415926 PI
1.5 INSTRUCTION SET SUMMARY
COMMANDS STATEMENTS OPERATORS RUN BAUD ADD (+) CONT CALL DIVIDE (/) LIST CLEAR EXPONENTIATION (**) LIST# CLEAR(S&I) MULTIPLY (*) LIST@ (V1.1) CLOCK(1&0) SUBTRACT (-) NEW DATA LOGICAL AND (.AND.) NULL READ LOGICAL OR (.OR.) RAM RESTORE LOGICAL X-OR (.XOR.) ROM DIM LOGICAL NOT (.OR.) XFER DO-WHILE ABS( ) PROG DO-UNTIL INT( ) PROG1 END SGN( ) PROG2 FOR-TO-STEP SQR( ) PROG3 (V1.1) NEXT RND PROG4 (V1.1) GOSUB LOG( ) PROG5 (V1.1) RETURN EXP( ) PROG6 (V1.1) GOTO SIN( ) FPROG ON-GOTO COS( ) FPROG1 ON-GOSUB TAN( ) FPROG2 IF-THEN-ELSE ATN( ) FPROG3 (V1.1) INPUT =, >, >=, <, <=, <> FPROG4 (V1.1) LET ASC( ) FPROG5 (V1.1) ONERR CHR( ) FPROG6 (V1.1) ONEX1 CBY( ) ONTIME DBY( ) PRINT XBY( ) PRINT# GET PRINT@ (V1.1) IE PH0. IP PH0.# PORT1 PH0.@ (V1.1) PCON PH1. RCAP2 PH1.# T2CON PH1.(@ (V1.1) TCON PGM (V1. 1 ) TMOD PUSH TIME POP TIMER0 PWM TIMER1 REM TIMER2 RETI XTAL STOP MTOP STRING LEN UI(1&0) FREE U0(1&0) PI LD@ (V1. 1 ) ST@ (V1. 1 ) IDLE (V1.1) RROM (V1. 1 )
1.6 FLOATING POINT FORMAT
MCS BASIC-52 stores all floating point numbers in a normalized packed BCD format with an offset binary exponent. The simplest way to demonstrate the floating point format is to use an example. If the number PI (3.1415926) was stored in location X, the following would appear in memory.
LOCATION VALUE DESCRIPTION X 81H EXPONENT--81H = 10**1, 82H = 10**2, 80H = 10**0, 7FH = 10**-1 etc. THE NUMBER ZERO IS REPRESENTED WITH A ZERO EXPONENT X-1 00H SIGN BIT--00H = POSITIVE, 01 H = NEGATIVE OTHER BITS ARE USED AS TEMPS ONLY DURING A CALCULATION X-2 26H LEAST SIGNIFICANT TWO DIGITS X-3 59H NEXT LEAST SIGNIFICANT TWO DIGITS X-4 41H NEXT MOST SIGNIFICANT TWO DIGITS X-5 31H MOST SIGNIFICANT TWO DIGITS
Because MCS BASIC-52 normalizes all numbers, the most significant digit is never a zero unless the number is zero.
1.7 STORAGE ALLOCATION
This section is intended to answer the question--where does MCS BASIC-52 store its variables and strings?
Two 16 bit pointers stored in external memory control the allocation of strings and variables and an additional two pointers control the allocation of scalar variables and dimensioned variables. These pointers are located and defined as follows:
LOCATION (H-L) NAME DESCRIPTION 10AH-10BH MTOP THE TOP OF RAM THAT IS ASSIGNED TO BASIC 104H-105H VARTOP VARTOP = MTOP - (THE NUMBER OF BYTES OF MEM- ORY THAT THE USER HAS ALLOCATED FOR STRINGS). IF STRINGS ARE NOT USED, VARTOP = MTOP 106H-107H VARUSE AFTER A NEW, CLEAR, OR RUN IS EXECUTED, VARUSE = VARTOP, EVERYTIME THE USER ASSIGNS OR USES A VARIABLE VARUSE IS DECREMENTED BY A COUNT OF 8. 108H-109H DIMUSE AFTER A NEW, CLEAR, OR RUN IS EXECUTED, DIMUSE = [LENGTH OF THE USER PROGRAM THAT IS IN RAM MEM- ORY + STARTING ADDRESS OF THE USER PROGRAM IN RAM (512) + THE LENGTH OF ONE FLOATING POINT NUMBER (6)]. IF NO PROGRAM IS IN RAM MEMORY, DIMUSE = 518 AFTER A CLEAR IS EXECUTED
MCS BASIC-52 stores string variables between VARTOP and MTOP. $(0) is stored from VARTOP to VARTOP + (user defined string length + I ), $(1 ) is stored from VARTOP + (user defined string length + I) + I to VARTOP + 2 * (user defined string length + 1) etc. If MCS BASIC-52 attempts to access a string that is outside the bounds established by MTOP, a MEMORY ALLOCATION ERROR is generated.
Now, Scalar variables are stored from VARTOP "down" and Dimensioned variables are stored from DIMUSE "up." When the user dimensions a variable either implicity or explicity the value of DIMUSE increases by the number of bytes required to store that dimensioned variable. For example, if the user ex- ecutes a DIM A(10) statement, DIMUSE would increase by 66. This is because the user is requesting storage for 11 numbers (A(0) through A(10)) and each number requires 6 bytes for storage and 6 * 11 = 66.
As mentioned in the previous example, everytime the user defines a new variable the VARUSE pointer decrements by a count of 8. Six of the eight counts are due to the memory required to store a floating point number and the other two counts are the storage required for the variable name (i.e. A1, B7, etc). The variable B7 would be stored as follows:
LOCATION VALUE DESCRIPTION X 37H THE ASCII VALUE--7, IF B7 WAS A DIMENSIONED VARIABLE THE MOST SIGNIFICANT BIT OF THIS LOCATION WOULD BE SET. IN VERSION 1.1 THIS LOCATION ALWAYS CONTAINS THE ASCII VALUE FOR THE LAST CHARACTER USED TO DEFINE A VARIABLE X-1 42H THE ASCII VALUE--B, IN VERSION 1.1 OF MCS BASIC-52 THIS LOCATION CONTAINS THE ASCII VALUE OF THE FIRST CHARAC- TER USED TO DEFINE A VARIABLE PLUS 26 * THE NUMBER OF CHARACTERS USED TO DEFINE A VARIABLE, IF THE VARIABLE CONTAINS MORE THAN 2 CHARACTERS. X-2 ?? THE NEXT SIX LOCATIONS WOULD CONTAIN THE FLOATING THRU POINT NUMBER THAT THE VARIABLE IS ASSIGNED TO, IF THE X-7 VARIABLE WAS A SCALAR VARIABLE. IF THE VARIABLE WAS Dl- MENSIONED, X-2 WOULD CONTAIN THE LIMIT OF THE DIMENSION (I.E. THE MAX. NUMBER OF ELEMENTS IN THE ARRAY) AND X-3: X-4 WOULD CONTAIN THE BASE ADDRESS OF THE ARRAY. THIS ADDRESS IS EQUAL TO THE OLD VALUE OF THE DIMUSE POINTER BEFORE THE ARRAY WAS CREATED
Whenever a new scalar or dimensioned variable is used in a program, MCS BASIC-52 checks both the DIMUSE nd VARUSE pointers to make sure that VARUSE > DIMUSE. If the relationship is not true, a MEMORY ALLOCATION ERROR is generated.
To Summarize:
Strings are stored from VARTOP to MTOP.
Scalar variables are stored from VARTOP "down" and VARUSE points to the next available scalar location.
Dimensioned variables are stored from the end of the user program in RAM "up." If no program is in RAM this location is 518 . DIMUSE keeps track of the number of bytes the user has allocated for dimensioned variables.
If DIMUSE >= VARUSE a MEMORY ALLOCATION ERROR is generated
1.8 FORMAT OF AN MCS BASIC-52 PROGRAM
This section answers the question "How does MCS BASIC-52 store a program?"
LINE FORMAT
Each line of MCS BASIC-52 text consists of tokens and ASCII characters, plus 4 bytes of overhead. Three of these four bytes are stored at the beginning of every line. The first byte contains the length of a line in binary and the second two bytes are the line number in binary. The fourth byte is stored at the end of the line and this byte is always a 0DH or a carriage return in ASCII. An example of a typical line is shown below, assume that this is the first line of a program in RAM.
10 FOR I = I TO 10: PRINT 1: NEXT I LOCATION BYTE DESCRIPTION 512 11H THE LENGTH OF THE LINE IN BINARY (17D BYTES) 513 00H HIGH BYTE OF THE LINE NUMBER 514 0AH LOW BYTE OF THE LINE NUMBER 515 0A0H THE TOKEN FOR "FOR" 516 49H THE ASCII CHARACTER "I" 517 0EAH THE TOKEN FOR "=" 518 31H THE ASCII FOR "1" 519 0A6H THE TOKEN FOR "TO" 520 31H THE ASCII FOR "1" 521 30H THE ASCII FOR "0" 522 3AH THE ASCII FOR ":" 523 89H THE TOKEN FOR "PRINT" 524 49H THE ASCII FOR "I" 525 3AH THE ASCII FOR ":" 526 97H THE TOKEN FOR "NEXT" 527 49H THE ASCII FOR "I" 528 0DH END OF LINE (CARRIAGE RETURN) TO FIND THE LOCATION OF THE NEXT LINE, THE LENGTH OF THE LINE IS ADDED TO THE LOCATION WHERE THE LENGTH OF THE LINE IS STORED. IN THIS EXAMPLE, 512 + 17D = 529, WHICH IS WHERE THE NEXT LINE IS STORED.
The END of a program is designated by the value 01H. So, in the previous example if line 10 was the only line in the program, location 529 would contain the value 01H. A program simply consists of a number of lines packed together in one continuous block with the last line ending in a 0DH, 01H sequence.
EPROM FILE FORMAT
The EPROM FILE format consists of the same line and program format, previously described except that each program in the EPROM file begins with the value 55H. The value 55H is only used by MCS BASIC- 52 to determine if a valid program is present. If the user types ROM 6, MCS BASIC-52 actually goes through the first program stored in EPROM line by line until the END of PROGRAM (01H) is found, then it examines the next location to see if a 55H is stored in that location. It then goes through that program line by line. This process is repeated 6 times. If the character 55H is not found after the end of a program, MCS BASIC-52 will return with the PROM MODE error message. This would mean that less than six programs were stored in that EPROM.
The first program stored in EPROM (ROM 1) always begins at location 8010H and this location will always contain a 55H. The actual user program will begin at location 8011H.
EPROM locations 8000H through 800FH are reserved by MCS BASIC-52. These locations contain ini- tialization information when the PROGX options are used. Version 1.0 of MCS BASIC-52 only used the first three bytes of this reserved EPROM area. The information stored in these bytes is as follows:
LOCATION DESCRIPTION 8000H CONTAINED A 31H IF PROG 1 WAS USED, CONTAINED A 32H IF PROG 2 WAS USED 8001H BAUD RATE (RCAP2H) 8002H BAUD RATE (RCAP2L)
Version 1.1 of MCS BASIC-52 uses the same locations as Version 1.0, but additionally locations 8003H and 8004H (high byte, low byte) are used to store the MTOP information for the PROG 3, 4, 5, 6 options.
IMPORTANT NOTE--
The PROG X options simply store ASCII character following the PROG command in loction 8000H. That is why PROG 1 stores a 31H in location 8000H, PROG 2 a 32H, PROG 3 (Version 1.1 only) a 33H etc. If the user employs the user defined reset option defined in Chapter 11 of this manual, it would be possible for the user to create unique PROG options. For example, PROG A would store a 41H in location 8000H and upon RESET the user could examine this location with an assembly language routine and generate a unique PROG A reset routine for that particular application.
1.9 ANSWERS TO A FEW QUESTIONS
QUESTION
Why can't MCS BASIC-52 access the 8052's SPECIAL FUNCTION REGISTER SCON?
ANSWER
The only time the user would likely change the contents of SCON is if the user is writing custom I/O drivers in assembly language. If the user is writing assembly language I/O drivers, then the user can change the contents of SCON in assembly language. Changing the contents of SCON can cause MCS BASIC- 52's console routines to crash.
QUESTION
I have written an upload/download routine using my computer, but when I download a program, MCS BASIC-52 misses characters, why?
ANSWER
MCS BASIC-52 is actually capable of accepting characters at 38,400 baud. The problem is that after MCS BASIC-52 receives a carriage return (cr), it tokenizes the line of text that was just entered. Depending on how complicated and how long the line is, MCS BASIC-52 can take up to a couple of hundred milliseconds to tokenize the line. If the user keeps stuffing characters into the serial port while MCS BASIC-52 is tokenizing the line, the characters will be lost. What the user must do in the download routine is wait until MCS BASIC-52 responds with the prompt character (>) after a carriage return is sent to the MCS BASIC- 52 device. The prompt (>) informs the user that MCS BASIC-52 is ready to receive characters from the console device.
QUESTION
I am writing in assernbly language and I notice that the 8052AH has no decrement DPTR instruction. What is the easiest. shonest or simplest way to decrement the DPTR?
ANSWER
The shortest one we know is:
XCH A,DPL ; SWAPA<>DPL JNZ DECDP ; DPH = DPH-1 IF DPL = O DEC DPH DECDP: DEC A ; DPL = DPL-1 XCH A,DPL
This routine affects no flags or registers (except the DPTR) either!
QUESTION
After RESET or power-up, MCS BASIC-52 does not return the proper value for MTOP, what's the problem?
ANSWER
Virtually everytime this problem occurs it is because something is wrong with the decoding circuitry in the system or one or more of the address lines to the RAM are open or shorted. The user should make sure that all of the address lines to the system RAM are connected properly!
A simple memory test can be implemented in the COMMAND MODE to verify the addressing to the RAM. First set XBY(1000H) = 55, then walk ones across the address (i.e. P. XBY(1001H) - P. XBY(1002H) - P. XBY(1004H) -- P. XBY(1008H) P. XBY(1010H)) until all locations are tested. If for instance, P. XBY(1008H) returns a result of 55, then address line 3 (A3) would probably be open or shorted.
1.11 8052AH SPECIAL FUNCTION REGISTERS
The following details the operation of the special function registers on the 8052AH:
SYMBOL NAME NAME ADDRESS MCS BASIC-52 ACC Accumulator 0E0H NOT ADDRESSABLE B B Register 0F0H NOT ADDRESSABLE PSW Program Status Word 0D0H NOT ADDRESSABLE SP Stack Pointer 81H NOT ADDRESSABLE DPTR Data Pointer 2 Bytes: DPH Low Byte 82H NOT ADDRESSABLE DPL High Byte 83H NOT ADDRESSABLE P0 Port 0 80H NOT ADDRESSABLE P1 Port 1 90H PORT1 P2 Port 2 0A0H NOT ADDRESSABLE P3 Port 3 0B0H NOT ADDRESSABLE IP Interrupt Priority Control 0B8H IP IE Interrupt Enable Control 0A8H IE TMOD Timer/Counter Mode Control 89H TMOD TCON Timer/Counter Control 88H TCON T2CON Timer/Counter 2 Control 0C8H T2CON TH0 Timer/Counter 0 High Byte 8CH \ TIMER0 TL0 Timer/Counter 0 Low Byte 8AH / TH1 Timer/Counter 1 High Byte 8DH \ TIMER1 TL1 Timer/Counter 1 Low Byte 8BH / TH2 Timer/Counter 2 High Byte 0CDH \ TIMER2 TL2 Timer/Counter 2 Low Byte 0CCH / RCAP2H T/C 2 Capture Reg. High Byte 0CBH \ RCAP2 RCAP2L T/C 2 Capture Reg. Low Byte 0CAH / SCON Serial Control 98H NOT ADDRESSABLE SBUF Serial Data Buffer 99H NOT ADDRESSABLE PCON Power Control 87H NOT ADDRESSABLE PSW: PROGRAM STATUS WORD. ADDRESS 0D0H ----------------------------------------- | CY | AC | F0 | RS1 | RS0 | OV | - | P | ----------------------------------------- CY PSW.7 Carry Flag. AC PSW.6 Auxiliary Carry Flag. F0 PSW.5 Flag 0 available to the user for general purpose. RS1 PSW.4 Register Bank selector bit 1. RS0 PSW.3 Register Bank selector bit 0. OV PSW.2 Overflow Flag. -- PSW.1 RESERVED FOR FUTURE USE. P PSW.0 PARITY FLAG. PCON: POWER CONTROL REGISTER. NOT BIT ADDRESSABLE. SMOD SMOD Doubles the baud rate when TIMER 1 is used to generate the baud rate for the serial port. The remaining bits of PCON are not implemented on the MCS BASIC-52 device. TMOD: Timer/Counter Mode Controlregister (MSB) (LSB) ------------------------------------------- |GATE| C/T | M1 | M0 |GATE| C/T | M1 | M0 | ------------------------------------------- TIMER 1 | TIMER 0 GATE Gating control When set. Timer/Counter "x" M1 M0 Operating Mode is enabled only while "INTx" pin is high and 0 0 MCS-48 Timer "TLx" serves as five-bit "TRx" control pin is set. When cleared Timer prescaler. "x" is enabled whenever "TRx" control bit is 0 1 16 bit Timer/Counter "THx" and "TLX" set are cascaded; there is no prescaler C/T Timer or Counter Selector Cleared for Timer 1 0 8-bit auto-reload timer-counter "THx" operation (input from internal system clock). holds a value which is to be reloaded into Set for Counter operation (input from "Tx" "TLx" each time it overflows. input pin). (Timer 0) TL0 is an eight-bit timer counter-controlled by the standard Timer 0 control bits TH0 is an eight-bit timer only controlled by Timer 1 control blts. (Timer 1) Timer-counter 1 stopped. Timer/Counter2 Control Register (MSB) (LSB) ----------------------------------------------------------- | TF2 | EXF2 T RCLK | TCLK T EXEN2 | TR2 | C/T2 | CP/RLS2 | ----------------------------------------------------------- Symbol Position Name and Significance TF2 T2CON.7 Timer 2 overflow flag set by a Timer 2 overflow and must be cleared by software. TF2 will not be set when either RCLK = 1 or TCLK = 1. EXF2 T2CON.6 Timer 2 external flag set when either a capture or reload is caused by a negative transition on T2EX and EXEN2 = 1. When Timer 2 interrupt is enabled, EXF2 = 1 will cause the CPU to vector to the Timer 2 interrupt routine. EXF2 must be cleared by software. RCLK T2CON.5 Receive clock flag. When set, causes the serial port to use Timer 2 overflow pulses for its receive clock in modes 1 and 3. RCLK = 0 causes Timer 1 overflow to be used for the receive clock. TCLK T2CON.4 Transmit clock flag. When set, causes the serial port to use Timer 2 overflow pulses for its transmit clock in modes 1 and 3. TCLK = 0 causes Timer 1 overflows to be used for the transmit clock. EXEN2 T2CON.3 Timer 2 external enable flag. When set, allows a capture or reload to occur as a result of a negative transition on T2EX if Timer 2 is not being used to clock the serial port. EXEN2 = 0 causes Timer 2 to ignore events at T2EX. TR2 T2CON.2 Start/stop control for Timer 2. A logic 1 starts the timer. C/T2 T2CON.1 Timer or counter select. (Timer 2) 0 = Internal timer (OSC/12) 1 = External event counter (falling edge triggered). CP/RL2 T2CON.0 Capture/Reload flag. When set, captures will occur on negative transitions at T2EX if EXEN2 = 1. When cleared, auto reloads will occur either with Timer 2 overflows or negative transitions at T2EX when EXEN 2 = 1. When either RCLK = 1 or TCLK = 1, this bit is ignored and the timer is forced to auto-reload on Timer 2 overflow. SCON: Serial Port Control Register (MSB) (LSB) ----------------------------------------------- | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | ----------------------------------------------- where SM0, SM1 specify the serial port mode, as follows: SM0 SM1 Mode Description Baud Rate TB8 is the 9th data bit that will be transmitted in 0 0 0 shift fosc /12 modes 2 and 3. Set or clear by software as 0 1 1 register variable desired. 1 0 2 8-bit UART fosc./64 9-bit UART or RB8 In modes 2 and 3, is the 9th data bit that fosc /32 was received. In mode 1, if SM2 = 0, RB8 is the stop bit that was received. In mode 0, 1 1 3 9-bit UART variable RB8 is not used. SM2 enables the multiprocessor communication TI is transmit interrupt flag. Set by hardware at feature in modes 2 and 3. In mode 2 or 3, the end of the 8th bit time in mode 0, or at if SM2 issetto 1 then RI will not be activated the beginning of the stop bit in the other if the received 9th data bit (RB8) is 0. In modes, in any serial transmission. Must be mode 1, if SM2 = 1 then RI will not be cleared by software. activated if a valid stop bit was not received. In mode 0, SM2 should be 0. RI is receive interrupt flag. Set by hardware at the end of the 8th bit time in mode 0, or REN enables serial reception. Set by software to halfway through the stop bit time in the other enable reception. Clear by software to dis- modes, in any serial reception (except see able reception. SM2). Must be cleared by software. TCON: Timer/Counter Control Register (MSB) (LSB) ------------------------------------------------- | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | ------------------------------------------------- Symbol Position Name and Significance Symbol Position Name and Significance TF1 TCON.7 Timer 1 overflow Flag. Set by IE1 TCON.3 Interrupt 1 Edge flag. Set by hardware on timer/counter ov- hardware when external inter- erflow. Cleared by hardware rupt edge detected. Cleared when processor vectors to inter- when interrupt processed. rupt routine. IT1 TCON.2 Interrupt 1 Type control bit. Set TR1 TCON.6 Timer 1 Run control bit. Set cleared by software to specify cleared by software to turn timer/ falling edge/low level triggered counter on/off. external interrupts. TF0 TCON.5 Timer 0 overflow Flag. Set by IE0 TCON.1 Interrupt 0 Edge flag. Set by hardware on timer/counter ov- hardware whan external inter- erflow. Cleared by hardware rupt edge detected. Cleared when processor vectors to inter- when interrupt processed. rupt routine. IT0 TCON.0 Interrupt 0 Type control bit. SeV TR0 TCON.4 Timer 0 Run control bit. Set cleared by software to specify cleared by software to turn timer/ falling edge/low level triggered counter on/off. external interrupts. Interrupt Priority Register Interrupt Enable Register (MSB) (LSB) (MSB) (LSB) ---------------------------------- ----------------------------------- | X | X |PT2| PS |PT1|PX1|PT0|PX0| | EA | X |ET2| ES |ET1|EX1|ET0|EX0| ---------------------------------- ----------------------------------- Symbol Position Function Symbol Position Function -- IP.7 reserved EA IE.7 disables all interrupts. If EA = 0, no interrupt will be acknowl- -- IP.6 reserved edged. If EA = 1, each interrupt source is individually enabled or PT2 IP.5 defines the Timer 2 interrupt disabledbysettingorclearingits priority level. PT2 = 1 programs enable bit. it to the higher priority level. -- IE.6 reserved PS IP.4 defines the Serial Port interrupt priority level. PS = 1 programs ET2 IE.5 enables or disables the Timer 2 it to the higher priority level. overflow or capture interrupt. If ET2 = 0, the Timer 2 interrupt PT1 IP.3 defines the Timer 1 interrupt is disabled. priority level. PT1 = 1 programs it to the higher priority level. ES IE.4 enables or disables the Serial Port interrupt. If ES = 0, the Se- PX1 IP.2 defines the External Interrupt 1 rial Port interrupt is disabled. priority level. PX1 = 1 programs it to the higher priority level. ET1 IE.3 enables or disables the Timer 1 Overflow interrupt. If ET1 = 0, PT0 IP.1 defines the Timer 0 interrupt theTimer 1 interruptisdisabled. priority level. PT0 = 1 programs it to the higher priority level. EX1 IE.2 enables or disables External In- terrupt 1. If EX1 = 0, External PX0 IP.0 defines the External Interrupt 0 Interrupt 1 is disabled. priority level. PX0 = 1 programs it to the higher priority level. ET0 IE.1 enables or disables the Timer 0 Overflow interrupt. If ET0 = 0. the Timer 0 Interrupt is disabled. EX0 IE.0 enables or disables External In- terrupt 0. If EX0 = 0, External Interrupt 0 is disabled.
1.12 REFERENCES
J. Sack and J: Meadows, Entering BASIC, Science Research Associates,
1973.
C. Pegels, BASIC: A Computer Programming Language, Holden-Day, Inc.,
1973.
J. Kemeny and T. Kurtz, BASIC Programming, People Computer Company,
1967.
Albrecht, Finkle, and Brown, BASIC, People Computer Company,
1973.
T. Dwyer, A Guided Tour of Computer Programming in BASIC, Houghton
Mifflin Co., 1973.
Eugene H. Barnett, Programming Time Shared Computers in
BASIC, Wiley-Interscience, L/C 72-175789.
Programming Language #2, Digital
Equipment Corp., Maynard, Mass. 01754.
101 BASIC Computer Games, Digital
Equipment Corp., Maynard, Mass. 01754.
What to do After You Hit Return.
People Computer Company.
BASIC-80 REFERENCE MANUAL, Intel Corp., Santa Clara,
Calif