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

📄 loadprogram.asm

📁 单片机89C2051的时钟应用程序程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
PUTENTER:       MOV     A, #0DH                 ;
                LCALL   PUTCHAR                 ;
                MOV     A, #0AH                 ;
                LCALL   PUTCHAR                 ;
                RET
;
;
;****************************************************
;*                                                  *
;*                     显示查表                     *
;*                                                  *
;****************************************************
; DPRT 显示信息首址
; A 内容数据
; B 内容长度
DISPMUL:        MUL     AB                      ;
                LCALL   DPTRADDC                ;
                LCALL   DISPINFO                ; 显示
                RET
;
;
;****************************************************
;*                                                  *
;*                  显示存储器 ADDER                *
;*                                                  *
;****************************************************
; R2 内容高地址         R1 内容低地址
; 显示成 XXXX:
DISPADD:        LCALL   PUTENTER                ; 显示回车
                MOV     A, R2                   ;
                LCALL   DISPHEX                 ;
                MOV     A, R1                   ;
                LCALL   DISPHEX                 ;
                MOV     A, #3AH                 ;
                LCALL   PUTCHAR                 ; 发送 :
                MOV     A, #20H                 ;
                LCALL   PUTCHAR                 ;
                MOV     A, #20H                 ;
                LCALL   PUTCHAR                 ;
                RET
;
;
;****************************************************
;*                                                  *
;*                     显示BIN                      *
;*                                                  *
;****************************************************
; A 内容是 BCD 码
; 显示成 XXXXXXXX 二进制格式
DISPBIN:        MOV     R3, #08H                ; 字节计数
BINRL:          RLC     A                       ; 得到每一位
                JC      ONE                     ;
                MOV     A, #30H                 ;
                LCALL   PUTCHAR                 ; 发送 0
                LJMP    BINRL1                  ;
;
ONE:            MOV     A, #31H                 ;
                LCALL   PUTCHAR                 ; 发送 1
BINRL1:         DJNZ    R3, BINRL               ; 是否结束
                MOV     A, #42H                 ;
                LCALL   PUTCHAR                 ; 发送 B
                RET
;
;
;****************************************************
;*                                                  *
;*              单字节十六进制转十进制              *
;*                                                  *
;****************************************************
; A: 待转换的单字节十六进制数
; A: 高四位的 ASCII 码          R4: 低四位的ASCII码
HEX2ASC:        MOV     R4, A                   ; 暂存待转换的单字节十六进制数
                LCALL   HEX2ASC1                ; 转换低四位
                XCH     A, R4                   ; 存放低四位的 ASCII 码
                SWAP    A                       ; 准备转换高四位
HEX2ASC1:       ANL     A, #0FH                 ; 将累加器的低四位转换成 ASCII 码
                ADD     A, #90H                 ;
                DA      A                       ;
                ADDC    A, #40H                 ;
                DA      A                       ;
                CLR     C                       ;
                RET                             ;
;
;
;****************************************************
;*                                                  *
;*                     显示HEX                      *
;*                                                  *
;****************************************************
; A 内容是 BCD 码
; 显示成 XX 十六进制格式
DISPHEX:        LCALL   HEX2ASC                 ;
                LCALL   PUTCHAR                 ;
                MOV     A, R4                   ;
                LCALL   PUTCHAR                 ;
                RET                             ;
;
;
;****************************************************
;*                                                  *
;*                    显示 RAMASC                   *
;*                                                  *
;****************************************************
; 显示 RAM or ROM 内容
; R0 内容是 R2R1 地址的内容
; ASC 方式
; 格式: 0123456789ABCDEF
DISPRAMASC:     MOV     R6, #08H                ;
                MOV     R0, A                   ;
RAMSPACE:       MOV     A, #20H                 ; 显示 8 个空格
                LCALL   PUTCHAR                 ;
                DJNZ    R6, RAMSPACE            ;
                MOV     A, R0                   ;
                SUBB    A, #10H                 ; 指针减一列长度
                MOV     R0, A                   ;
                MOV     R6, #10H                ; 一列计数
RAMASC:         MOV     A, B                    ;
                JZ      ROMASC                  ; ROM RAM 处理
                MOV     A, @R0                  ;
                LJMP    ROMRAMASC               ;
;
ROMASC:         MOV     A, R0                   ;
                MOVC    A, @A+DPTR              ;
;
ROMRAMASC:      MOV     R4, A                   ;
                CLR     C                       ;
                SUBB    A, #2EH                 ; 过虑小于 #2EH ASC
                MOV     A, R4                   ;
                JNC     RAMASC1                 ;
RAMASC0:        MOV     A, #2EH                 ;
                LJMP    RAMASC2                 ;
;
RAMASC1:        CLR     C                       ;
                MOV     A, R4                   ;
                SUBB    A, #7FH                 ; 过虑大于 #7FH ASC
                MOV     A, R4                   ;
                JNC     RAMASC0                 ;
RAMASC2:        LCALL   PUTCHAR                 ; 显示 ASC
                INC     R0                      ;
                DJNZ    R6, RAMASC              ;
                RET
;
;
;****************************************************
;*                                                  *
;*                   显示 RAM ROM                   *
;*                                                  *
;****************************************************
; 显示 RAM or ROM 内容
; R2 内容高位地址   R1 内容低位地址
; R0 内容是 R2R1 地址的内容
; HEX 方式
; 格式: XXXX:  10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F
DISPROMRAM:     LCALL   DISPADD                 ; 显示地址
                MOV     R6, #10H                ; 一行计数
READRAMLOOP:    MOV     A, B                    ;
                JZ      READROM                 ;
                MOV     A, @R0                  ;
                LJMP    READRAMROMEND           ;
;
READROM:        MOV     A, R0                   ;
                MOVC    A, @A+DPTR              ;
READRAMROMEND:  INC     R0                      ;
                LCALL   DISPHEX                 ; 显示 HEX
                MOV     A, R0                   ;
                MOV     A, R6                   ;
                XRL     A, #09H                 ;
                JNZ     RAMROM16                ; 8 列处理
                MOV     A, #2DH                 ; 显示 -
                LCALL   PUTCHAR                 ;
                LJMP    RAMROM8                 ;
;
RAMROM16:       MOV     A, #20H                 ; 显示空格
                LCALL   PUTCHAR                 ;
RAMROM8:        DJNZ    R6, READRAMLOOP         ;
                MOV     A, R0                   ;
                LCALL   DISPRAMASC              ;
                LCALL   WATDOG                  ;
                MOV     A, R1                   ;
                ADD     A, #10H                 ;
                MOV     R1, A                   ;
                JNZ     DISPROMRAM              ; 是否结束
                INC     DPH                     ;
                MOV     A, DPH                  ;
                MOV     R2, A                   ;
                RET
;
;
;****************************************************
;*                                                  *
;*                初始化串口(COMMAND)               *
;*                                                  *
;****************************************************
; 初始化串口数据
INITCOMMAND:    CLR     A                       ;
                MOV     RXBUFFLEN, A            ; 初始化
                CLR     RXCOMMOKFLAG            ;
                MOV     RXBUFFTAIL, #RXBUFFSTART;
                CLR     RXCOMMFLAG              ; 起动 COMMAND 接收
                LCALL   PUTENTER                ; 显示回车
                RET
;
;
;****************************************************
;*                                                  *
;*                      读等待                      *
;*                                                  *
;****************************************************
; 死读缓冲区一直到有数据
READWAIT:       MOV     RXBUFFTAIL, #RXBUFFSTART;
                CLR     A                       ;
                MOV     A, RXBUFFLEN            ;
READWAIT1:      LCALL   WATDOG                  ;
                MOV     A, RXBUFFTAIL           ;
                XRL     A, #RXBUFFSTART         ;
                JZ      READWAIT1               ; 接收缓冲区空 LOOP
READLOOP:       LCALL   WATDOG                  ;
                LCALL   PUTCOMMSPACE            ;
                JNB     RXCOMMOKFLAG, READLOOP  ; 命令接收不成功不处理
                MOV     R0, #RXBUFFSTART        ;
                RET                             ;
;
;
;****************************************************
;*                                                  *
;*                   比较单个字符                   *
;*                                                  *
;****************************************************
; R0 内容为地址
; R4 内容为源
; A  内容为零: 成功; 非零: 失败
COMPASC:        MOV     A, @R0                  ;
                XRL     A, R4                   ; 是否大写
                JZ      COMPASCOUT              ;
                MOV     A, R4                   ; 是否小写
                ADD     A, #20H                 ;
                MOV     R4, A                   ;
                MOV     A, @R0                  ;
                XRL     A, R4                   ;
COMPASCOUT:     RET
;
;
;****************************************************
;*                                                  *
;*                      是否数字                    *
;*                                                  *
;****************************************************
; R0 内容为地址
; R4 内容为源
; A  内容为零: 成功; 非零: 失败
ISDIGIT:        MOV     A, @R0                  ;
                CLR     C                       ;
                SUBB    A, #30H                 ;
                JC      ISDIGITOUT              ;
                MOV     A, @R0                  ;
                CLR     C                       ;
                SUBB    A, #3AH                 ;
                JNC     ISDIGITOUT              ;
                CLR     A                       ;
                RET                             ;
;
ISDIGITOUT:     CLR     A                       ;
                DEC     A                       ;
                RET                             ;
;
;
;****************************************************
;*                                                  *
;*                     DPTR ADDC                    *

⌨️ 快捷键说明

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