⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic-52.sdi

📁 proteus 仿真实例
💻 SDI
📖 第 1 页 / 共 5 页
字号:
,,,;  December 18, 1986
,,,;  MS-DOS compatible Source code for MCS BASIC-52 (tm)
,,,;  Assembles with ASM51 Macro Assembler Version 2.2
,,,;
,,,;  The following source code does not include the floating point math
,,,;  routines. These are seperately compiled using FP52.SRC.
,,,;
,,,;  Both the BASIC.SRC and FP52.SRC programs assemble into ABSOLUTE
,,,;  object files, and do not need to be relocated or linked. The FP52
,,,;  object code and the BASIC object code, when compiled without modification
,,,;  of the source listings, create the same object code that is found on
,,,;  the MCS BASIC-52 Version 1.1 microcontrollers.
,,,;
,,,;  The original source code had 7 "include" files that have been incorporated
,,,;  into this file for ease of assembly.
,,,;  These 7 files are: LOOK52.SRC, BAS52.RST, BAS52.PGM, BAS52.TL, BAS52.OUT,
,,,;  BAS52.PWM, and BAS52.CLK.
,,,;
,,,;
,,,;                       Intel Corporation, Embedded Controller Operations
,,,
,,,$EJECT
,,,        ;**************************************************************
,,,        ;
,,,        ; TRAP VECTORS TO MONITOR
,,,        ;
,,,        ; RESET TAG (0AAH) ---------2001H
,,,        ;
,,,        ; TAG LOCATION (5AH) ------ 2002H
,,,        ;
,,,        ; EXTERNAL INTERRUPT 0 ---- 2040H
,,,        ;
,,,        ; COMMAND MODE ENTRY ------ 2048H
,,,        ;
,,,        ; SERIAL PORT ------------- 2050H
,,,        ;
,,,        ; MONITOR (BUBBLE) OUTPUT - 2058H
,,,        ;
,,,        ; MONITOR (BUBBLE) INPUT -- 2060H
,,,        ;
,,,        ; MONITOR (BUBBLE) CSTS --- 2068H
,,,        ;
,,,        ; GET USER JUMP VECTOR ---- 2070H
,,,        ;
,,,        ; GET USER LOOKUP VECTOR -- 2078H
,,,        ;
,,,        ; PRINT AT VECTOR --------- 2080H
,,,        ;
,,,        ; INTERRUPT PWM ----------- 2088H
,,,        ;
,,,        ; EXTERNAL RESET ---------- 2090H
,,,        ;
,,,        ; USER OUTPUT-------------- 4030H
,,,        ;
,,,        ; USER INPUT -------------- 4033H
,,,        ;
,,,        ; USER CSTS --------------- 4036H
,,,        ;
,,,        ; USER RESET -------------- 4039H
,,,        ;
,,,        ; USER DEFINED PRINT @ ---  403CH
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,$EJECT
,,,        ;***************************************************************
,,,        ;
,,,        ; MCS - 51  -  8K BASIC VERSION 1.1
,,,        ;
,,,        ;***************************************************************
,,,        ;
0000,61 87,,        AJMP    CRST            ;START THE PROGRAM
,,,        ;
,,,        ORG     3H
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;EXTERNAL INTERRUPT 0
,,,        ;
,,,        ;***************************************************************
,,,        ;
0003,20 31 2D,,        JB      DRQ,STQ         ;SEE IF DMA IS SET
0006,C0 D0,,        PUSH    PSW             ;SAVE THE STATUS
0008,02 40 03,,        LJMP    4003H           ;JUMP TO USER IF NOT SET
,,,        ;
,,,        ORG     0BH
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;TIMER 0 OVERFLOW INTERRUPT
,,,        ;
,,,        ;***************************************************************
,,,        ;
000B,C0 D0,,        PUSH    PSW             ;SAVE THE STATUS
000D,20 2E 10,,        JB      C_BIT,STJ       ;SEE IF USER WANTS INTERRUPT
0010,02 40 0B,,        LJMP    400BH           ;EXIT IF USER WANTS INTERRUPTS
,,,        ;
,,,        ORG     13H
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;EXTERNAL INTERRUPT 1
,,,        ;
,,,        ;***************************************************************
,,,        ;
0013,20 12 2B,,        JB      INTBIT,STK
0016,C0 D0,,        PUSH    PSW
0018,02 40 13,,        LJMP    4013H
,,,        ;
,,,$EJECT
,,,        ;
,,,        ORG     1BH
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;TIMER 1 OVERFLOW INTERRUPT
,,,        ;
,,,        ;***************************************************************
,,,        ;
001B,C0 D0,,        PUSH    PSW
001D,02 1F 78,,        LJMP    CKS_I
,,,        ;
0020,02 19 03,STJ,STJ:    LJMP    I_DR            ;DO THE INTERRUPT
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;SERIAL PORT INTERRUPT
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ORG     23H
,,,        ;
0023,C0 D0,,        PUSH    PSW
0025,20 1F 1C,,        JB      SPINT,STU       ;SEE IF MONITOR EANTS INTERRUPT
0028,02 40 23,,        LJMP    4023H
,,,        ;
,,,        ORG     2BH
,,,        ;
,,,        ;**************************************************************
,,,        ;
,,,        ;TIMER 2 OVERFLOW INTERRUPT
,,,        ;
,,,        ;**************************************************************
,,,        ;
002B,C0 D0,,        PUSH    PSW
002D,02 40 2B,,        LJMP    402BH
,,,        ;
,,,$EJECT
,,,        ;**************************************************************
,,,        ;
,,,        ;USER ENTRY
,,,        ;
,,,        ;**************************************************************
,,,        ;
,,,        ORG     30H
,,,        ;
0030,02 19 3D,,        LJMP    IBLK            ;LINK TO USER BLOCK
,,,        ;
0033,20 26 08,STQ,STQ:    JB      I_T0,STS        ;SEE IF MONITOR WANTS IT
0036,C2 96,,        CLR     DACK
0038,30 B2 FD,,        JNB     P3.2,$          ;WAIT FOR DMA TO END
003B,D2 96,,        SETB    DACK
003D,32,,        RETI
,,,        ;
003E,02 20 40,STS,STS:    LJMP    2040H           ;GO TO THE MONITOR
,,,        ;
0041,D2 16,STK,STK:    SETB    INTPEN          ;TELL BASIC AN INTERRUPT WAS RECEIVED
0043,32,,        RETI
,,,        ;
0044,02 20 50,STU,STU:    LJMP    2050H           ;SERIAL PORT INTERRUPT
,,,        ;
,,,$EJECT
,,,
,,,;$INCLUDE(:F2:LOOK52.SRC)
,,,; INCLUDED BELOW
,,,
,,,        ;
,,,        ;**************************************************************
,,,        ;
,,,        ; This is the equate table for 8052 basic.
,,,        ;
,,,        ;**************************************************************
,,,        ;
,,,        ; The register to direct equates for CJNE instructions.
,,,        ;
,,,R0B0    EQU     0
,,,R1B0    EQU     1
,,,R2B0    EQU     2
,,,R3B0    EQU     3
,,,R4B0    EQU     4
,,,R5B0    EQU     5
,,,R6B0    EQU     6
,,,R7B0    EQU     7
,,,        ;
,,,        ; Register bank 1 contains the text pointer
,,,        ; and the arg stack pointer.
,,,        ;
,,,TXAL    EQU     8               ;R0 BANK 1 = TEXT POINTER LOW
,,,ASTKA   EQU     9               ;R1 BANK 1 = ARG STACK
,,,TXAH    EQU     10              ;R2 BANK 1 = TEXT POINTER HIGH
,,,        ;
,,,        ; Now five temporary locations that are used by basic.
,,,        ;
,,,TEMP1   EQU     11
,,,TEMP2   EQU     12
,,,TEMP3   EQU     13
,,,TEMP4   EQU     14
,,,TEMP5   EQU     15
,,,        ;
,,,$EJECT
,,,        ; Register bank 2 contains the read text pointer
,,,        ; and the control stack pointer.
,,,        ;
,,,RTXAL   EQU     16              ;R0 BANK 2 = READ TEXT POINTER LOW
,,,CSTKA   EQU     17              ;R1 BANK 2 = CONTROL STACK POINTER
,,,RTXAH   EQU     18              ;R2 BANK 2 = READ TEXT POINTER HIGH
,,,        ;
,,,        ; Now some internal system equates.
,,,        ;
,,,BOFAH   EQU     19              ;START OF THE BASIC PROGRAM, HIGH BYTE
,,,BOFAL   EQU     20              ;START OF THE BASIC PROGRAM, LOW BYTE
,,,NULLCT  EQU     21              ;NULL COUNT
,,,PHEAD   EQU     22              ;PRINT HEAD POSITION
,,,FORMAT  EQU     23
,,,        ;
,,,        ; Register bank 3 is for the user and can be loaded
,,,        ; by basic
,,,        ;
,,,        ;
,,,        ;
,,,        ; Now everything else is used by basic.
,,,        ; First the bit locations, these use bytes 34, 35, 36, 37 and 38
,,,        ;
,,,$EJECT
,,,OTS             BIT     16      ;34.0-ON TIME INSTRUCTION EXECUTED
,,,INPROG          BIT     17      ;34.1-INTERRUPT IN PROCESS
,,,INTBIT          BIT     18      ;34.2-INTERRUPT SET BIT
,,,ON_ERR          BIT     19      ;34.3-ON ERROR EXECUTED
,,,OTI             BIT     20      ;34.4-ON TIME INTERRUPT IN PROGRESS
,,,LINEB           BIT     21      ;34.5-LINE CHANGE OCCURED
,,,INTPEN          BIT     22      ;34.6-INTERRUPT PENDING BIT
,,,CONB            BIT     23      ;34.7-CAN CONTINUE IF SET
,,,GTRD            BIT     24      ;35.0-READ GET LOCATION
,,,LPB             BIT     25      ;35.1-PRINT TO LINE PRINTER PORT
,,,CKS_B           BIT     26      ;35.2-FOR PWM INTERRUPT
,,,COB             BIT     27      ;35.3-CONSOLE OUT BIT
,,,                                ;     0 = SERIAL PORT
,,,                                ;     1 = LINE PRINTER
,,,COUB            BIT     28      ;35.4-USER CONSOLE OUT BIT
,,,                                ;     0 = SERIAL PORT
,,,                                ;     1 = USER DRIVER
,,,INBIT           BIT     29      ;35.5-INITIALIZATION BIT
,,,CIUB            BIT     30      ;35.6-USER CONSOLE IN BIT
,,,                                ;     0 = SERIAL PORT
,,,                                ;     1 = USER ROUTINE
,,,SPINT           BIT     31      ;35.7-SERIAL PORT INTERRUPT
,,,STOPBIT         BIT     32      ;36.0-PROGRAM STOP ENCOUNTERED
,,,U_IDL           BIT     33      ;36.1-USER IDLE BREAK
,,,INP_B           BIT     34      ;36.2-SET DURING INPUT INSTRUCTION
,,,;DCMPXZ         BIT     35      ;36.3-DCMPX ZERO FLAG
,,,ARGF            BIT     36      ;36.4-ARG STACK HAS A VALUE
,,,RETBIT          BIT     37      ;36.5-RET FROM INTERRUPT EXECUTED
,,,I_T0            BIT     38      ;36.6-TRAP INTERRUPT ZERO TO MON
,,,UPB             BIT     39      ;36.7-SET WHEN @ IS VALID
,,,JKBIT           BIT     40      ;37.0-WB TRIGGER
,,,ENDBIT          BIT     41      ;37.1-GET END OF PROGRAM
,,,UBIT            BIT     42      ;37.2-FOR DIM STATEMENT
,,,ISAV            BIT     43      ;37.3-SAVE INTERRUPT STATUS
,,,BO              BIT     44      ;37.4-BUBBLE OUTPUT
,,,XBIT            BIT     45      ;37.5-EXTERNAL PROGRAM PRESENT
,,,C_BIT           BIT     46      ;37.6-SET WHEN CLOCK RUNNING
,,,DIRF            BIT     47      ;37.7-DIRECT INPUT MODE
,,,NO_C            BIT     48      ;38.0-NO CONTROL C
,,,DRQ             BIT     49      ;38.1-DMA ENABLED
,,,BI              BIT     50      ;38.2-BUBBLE INPUT
,,,INTELB          BIT     51      ;38.3-INTELLIGENT PROM PROGRAMMING
,,,C0ORX1          BIT     52      ;38.4-PRINT FROM ROM OR RAM
,,,CNT_S           BIT     53      ;38.5-CONTROL S ENCOUNTERED
,,,ZSURP           BIT     54      ;38.6-ZERO SUPRESS
,,,HMODE           BIT     55      ;38.7-HEX MODE PRINT
000B,,,LP              BIT     P1.7    ;SOFTWARE LINE PRINTER
000B,,,DACK            BIT     P1.6    ;DMA ACK
000B,,,PROMV           BIT     P1.5    ;TURN ON PROM VOLTAGE
000B,,,PROMP           BIT     P1.4    ;PROM PULSE
000B,,,ALED            BIT     P1.3    ;ALE DISABLE
000B,,,T_BIT           BIT     P1.2    ;I/O TOGGLE BIT
,,,        ;
,,,$EJECT
,,,        ;
,,,        ; The next location is a bit addressable byte counter
,,,        ;
,,,BABC    EQU     39
,,,        ;
,,,        ; Now floating point and the other temps
,,,        ;
,,,        ; FP Uses to locations 03CH
,,,        ;
,,,        ; Now the stack designators.
,,,        ;
,,,SPSAV   EQU     3EH
,,,S_LEN   EQU     3FH
,,,T_HH    EQU     40H
,,,T_LL    EQU     41H
,,,INTXAH  EQU     42H
,,,INTXAL  EQU     43H
,,,MT1     EQU     45H
,,,MT2     EQU     46H
,,,MILLIV  EQU     47H             ;TIMER LOCATIONS
,,,TVH     EQU     48H
,,,TVL     EQU     49H
,,,SAVE_T  EQU     4AH
,,,SP_H    EQU     4BH             ;SERIAL PORT TIME OUT
,,,SP_L    EQU     4CH
,,,CMNDSP  EQU     4DH             ;SYSTEM STACK POINTER
,,,IRAMTOP EQU     0FFH            ;TOP OF RAM

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -