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

📄 loadprogram.asm

📁 单片机89C2051的时钟应用程序程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
              	MUL     AB	                ; 比较下一个命令
                MOV     R4, A                   ;
                LJMP    GETCOMMCOMP             ;
;
GETCOMMCOMPEND: CLR     A                       ; 初始化
                MOV     RXBUFFLEN, A            ;
                MOV     RXBUFFTAIL, #RXBUFFSTART;
                CLR     RXCOMMOKFLAG            ;
                MOV     A, R4                   ;
                MOV     B, #COMMANDLEN          ;
                DIV     AB                      ; 调整地址
                MOV     B, A                    ;
                RL      A                       ;
                ADD     A, B                    ;
                MOV     DPTR, #COMMFUNTBL       ;
                JMP     @A+DPTR                 ;
GETCOMMOUT:     RET                             ;
;
;
GETCOMMERROR:   MOV     DPTR, #COMMERRORTBL     ; 显示 Bad command
                LCALL   DISPINFO                ;
                CLR     A                       ; 初始化
                MOV     RXBUFFLEN, A            ;
                MOV     RXBUFFTAIL, #RXBUFFSTART;
                CLR     RXCOMMOKFLAG            ;
                LJMP    DISPROM                 ;
                RET                             ;
;
;
COMMFUNTBL:     LJMP	HELPFUN
                LJMP    DISPROM
                LJMP    RAMFUN
                LJMP    SECFUN
                LJMP    SETBFUN
                LJMP    INFOFUN
                LJMP    ERASEFUN
                LJMP    BLANKFUN
                LJMP    RESETFUN
                LJMP    UPDATFUN
                RET
;
;
;****************************************************
;*                                                  *
;*              定时器 0 中断服务程序               *
;*                                                  *
;****************************************************
INT_T0:         CLR     TR0
                MOV     TL0, TIMELO
                MOV     TH0, TIMEHI
                RETI
;
;
;****************************************************
;*                                                  *
;*              定时器 1 中断服务程序               *
;*                                                  *
;****************************************************
INT_T1:         PUSH    PSW
		PUSH	ACC
                MOV     TH1, #0DBH              ; 重置计数值
                MOV     TL1, #0FFH              ;
INTKEY:         CPL     TIME10MS                ; 10ms 标志
                INC     TIMECOUNT               ;
                MOV     A, TIMECOUNT            ;
                CJNE    A, #10H, INTT0OUT       ;
                MOV     TIMECOUNT, #00H         ;
                CPL     TIME500MS               ; 500ms 标志
;
INTT0OUT:       POP	ACC
		POP     PSW
                RETI
;
;
;============================================================================
;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
;============================================================================
; 命令解释器功能处理子程序
;
;****************************************************
;*                                                  *
;*                   显示帮助信息                   *
;*                                                  *
;****************************************************
HELPFUN:        MOV     DPTR, #HELPTBL          ; 显示帮助信息
                LCALL   DISPINFO                ;
                LCALL   INITCOMMAND             ;
                LJMP    DISPROM                 ;
;
;
;****************************************************
;*                                                  *
;*                   RAM  功能处理                  *
;*                                                  *
;****************************************************
RAMFUN:         CLR     A                       ; 初始化
                MOV     R0, A                   ;
                MOV     R1, A                   ;
                MOV     R2, A                   ;
                MOV     B, #01H                 ;
                LCALL   DISPROMRAM              ;
                LCALL   INITCOMMAND             ;
                LJMP    DISPROM                 ;
;
;
;****************************************************
;*                                                  *
;*                   SEC  功能处理                  *
;*                                                  *
;****************************************************
SECFUN:         MOV     DPTR, #SECTBL           ;
                LCALL   DISPINFO                ;
                MOV     DPTR, #INPUTTBL         ;
                LCALL   DISPINFO                ;
SECLOOP:        MOV     RXBUFFTAIL, #RXBUFFSTART;
                LCALL   READWAIT                ;
                MOV     R0, #RXBUFFSTART        ;
                MOV     R4, #59H                ; 是否 Y
                LCALL   COMPASC                 ;
                JZ      SECCAPS                 ;
                MOV     R4, #4EH                ; 是否 N
                LCALL   COMPASC                 ;
                JNZ     SECERROR                ;
                LJMP    SECOUT                  ;
;
SECCAPS:        MOV     DPTR, #SECOKTBL         ;
                LCALL   DISPINFO                ;
SECOUT:         LCALL   INITCOMMAND             ;
                LJMP    DISPROM                 ;
;
SECERROR:       MOV     DPTR, #SETERRORTBL      ;
                LCALL   DISPINFO                ;
                LJMP    SECLOOP                 ;
;
;
;****************************************************
;*                                                  *
;*                  SETB  功能处理                  *
;*                                                  *
;****************************************************
SETBFUN:        MOV     DPTR, #SETBFUNTBL       ;
                LCALL   DISPINFO                ;
                MOV     DPTR, #INPUTTBL         ;
                LCALL   DISPINFO                ;
SETBLOOP:       LCALL   READWAIT                ;
                MOV     R0, #RXBUFFSTART        ;
                MOV     A, @R0                  ;
                MOV     R7, A                   ;
                DEC     R7                      ;
SETBLOOP1:      INC     R7                      ;
                MOV     RXBUFFTAIL, #RXBUFFSTART;
                LCALL   WATDOG                  ;
                XRL     A, R7                   ;
                JNZ     SETBLOOP1               ; 是否有输入
                MOV     A, @R0                  ;
                SUBB    A, #30H                 ;
                MOV     B, A                    ;
                MOV     A, B                    ;
                XRL     A, #04H                 ; 是否 Exit
                JZ      SETBERROR               ;
                MOV     A, B                    ;
                CLR     C                       ;
                SUBB    A, #05H                 ; 大于 5 重输
                JNC     SETBRELOAD              ;
                MOV     A, B                    ;
                LCALL   INITBAUD                ; 设置 Baud rate
SETBERROR:      LCALL   INITCOMMAND             ;
                LJMP    DISPROM                 ;
;
SETBRELOAD:     MOV     RXBUFFTAIL, #RXBUFFSTART;
                MOV     DPTR, #SETERRORTBL      ;
                LCALL   DISPINFO                ;
                LJMP    SETBLOOP                ;
;
;
;****************************************************
;*                                                  *
;*                     显示MCU信息                  *
;*                                                  *
;****************************************************
INFOFUN:        MOV     DPTR, #SYSINFOTBL       ; 显示 MCU 信息
                LCALL   DISPINFO                ;
                CLR     TR2                     ;
                MOV     A, RCAP2L               ; 读 RCAP2L
                SETB    TR2                     ;
                MOV     R2, A                   ;
                CLR     A                       ;
                MOV     R3, A                   ;
                MOV     DPTR, #BAUDTBL          ; 查询 Baud rate
GETBAUD:        MOV     A, R3                   ;
                MOVC    A, @A+DPTR              ;
                INC     A                       ;
                JZ      INFOFUNOUT              ; 是否结束
                DEC     A                       ;
                INC     R3                      ;
                XRL     A, R2                   ;
                JNZ     GETBAUD                 ;
                DEC     R3                      ; 得到 Baud rate
                MOV     A, R3                   ;
                MOV     B, #18H                 ;
                MOV     DPTR, #BAUDINFOTBL      ;
                LCALL   DISPMUL                 ;
INFOFUNOUT:     LJMP    DISPROM                 ;
;
;
;****************************************************
;*                                                  *
;*                   RESET功能处理                  *
;*                                                  *
;****************************************************
RESETFUN:       MOV     DPTR, #WARNINGTBL       ;
                LCALL   DISPINFO                ;
                MOV     DPTR, #INPUTTBL         ;
                LCALL   DISPINFO                ;
RESETLOOP:      MOV     RXBUFFTAIL, #RXBUFFSTART;
                LCALL   READWAIT                ;
                MOV     R0, #RXBUFFSTART        ;
                MOV     R4, #59H                ; 是否 Y
                LCALL   COMPASC                 ;
                JZ      RESETCAPS               ;
                MOV     R4, #4EH                ; 是否 N
                LCALL   COMPASC                 ;
                JNZ     RESETERROR              ;
                LCALL   INITCOMMAND             ;
                LJMP    DISPROM                 ;
;
RESETCAPS:      LCALL   PUTENTER                ; 显示回车
                LCALL   PUTENTER                ;
                MOV     CHPENR,#87H             ;  软件复位
                MOV     CHPENR,#59H
                MOV     CHPCON,#03H
                MOV     CHPENR,#87H             ;  软件复位
                MOV     CHPENR,#59H
                MOV     CHPCON,#83H
                RET
;
RESETERROR:     MOV     DPTR, #SETERRORTBL      ;
                LCALL   DISPINFO                ;
                LJMP    RESETLOOP               ;
;
;
;****************************************************
;*                                                  *
;*                  ERASE 功能处理                  *
;*                                                  *
;****************************************************
ERASEFUN:       MOV     CHPENR, #87H            ;
                MOV     CHPENR, #59H            ;
                MOV     CHPCON, #03H            ;
                MOV     CHPENR, #00H            ;
                LCALL   ERASECHIP               ;
                LCALL   INITCOMMAND             ;
                LJMP    DISPROM                 ;
;
;
;****************************************************
;*                                                  *
;*                  BLANK 功能处理                  *
;*                                                  *
;****************************************************
BLANKFUN:       MOV     CHPENR, #87H            ;
                MOV     CHPENR, #59H            ;
                MOV     CHPCON, #03H            ;
                MOV     CHPENR, #00H            ;
                LCALL   BLANKCHIP               ;
                LCALL   INITCOMMAND             ;
                LJMP    DISPROM                 ;
;

⌨️ 快捷键说明

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