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

📄 loadprogram.asm

📁 单片机89C2051的时钟应用程序程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;                 *************************************
;                 *                                   *
;                 *           LOAD 程序下载器         *
;                 *                                   *
;                 *     CPU:        W78E516           *
;                 *                                   *

;                 *************************************
;
;**********************************************************************
;*                        谀哪哪哪哪哪哪哪哪目                        *
;*                  P1.0  ?1             40 ? VCC                   *
;*                  P1.1  ?2             39 ? P0.0                  *
;*                  P1.2  ?3             38 ? P0.1                  *
;*                  P1.3  ?4             37 ? P0.2                  *
;*                  P1.4  ?5             36 ? P0.3                  *
;*                  P1.5  ?6             35 ? P0.4                  *
;*                  P1.6  ?7             34 ? P0.5                  *
;*                  P1.7  ?8             33 ? P0.6                  *
;*                  RST   ?9             32 ? P0.7                  *
;*            RXD   P3.0  ?10   MCS-51   31 ? EA    VDD             *
;*            TXD   P3.1  ?11            30 ? ALE                   *
;*            INT0  P3.2  ?12            29 ? PSEN                  *
;*            INT1  P3.3  ?13            28 ? P2.7                  *
;*  MCUDOG    T0    P3.4  ?14            27 ? P2.6                  *
;*            T1    P3.5  ?15            26 ? P2.5                  *
;*            WR    P3.6  ?16            25 ? P2.4                  *
;*            RD    P3.7  ?17            24 ? P2.3                  *
;*                 XTAL2  ?18            23 ? P2.2                  *
;*                 XTAL1  ?19            22 ? P2.1                  *
;*                   VSS  ?20            21 ? P2.0                  *
;*                        滥哪哪哪哪哪哪哪哪馁                        *
;**********************************************************************
;
;
;****************************************************
;*                                                  *
;*                    变量定义                      *
;*                                                  *
;****************************************************
; 常数定义
;
                RXBUFFSTART     EQU     040H    ; 接收缓冲区队列首址 (170 字节)
                XBUFFSTART      EQU     050H    ; 接收缓冲区队列首址 (170 字节)
                RXBUFFEND       EQU     0F0H    ; 接收缓冲区队列末址
                COMMANDLEN      EQU     008H    ; 命令字符最大长度
; 编程延时
                P15MS           EQU     0C9H    ; 11.0592 MHz 12.000 MHz 14.318 MHz
                P1US            EQU     0FEH    ;
                P50US           EQU     0D1H    ;
;
;                P15MS           EQU     0B7H    ; 18.4320 MHz 24.000 MHz
;                P1US            EQU     0FDH    ;
;                P50US           EQU     0C2H    ;
;
; 流控字符
                XON             EQU     011H    ; 继续传送
                XOFF            EQU     013H    ; 停止传送
; 控制键
                CTRLC           EQU     003H    ; CTRL_C  键
                ESC             EQU     027H    ; ESC   键
                BACKSPACE       EQU     008H    ; 退后删除键
; XMODEM 协议关键字
; 发送端 -> 接收端
                SOH             EQU     001H    ; 每个包的开始
                EOT             EQU     004H    ; 通知接收端结束
; 接收端 -> 发送端
                ACK             EQU     006H    ; 包成功接收
                NAK             EQU     015H    ; 包出错
                CAN             EQU     018H    ; 结束传送操作
                CRC             EQU     043H    ; C
;
                BLKSIZE         EQU     080H    ; 每包的数据大小
                XMODEMMXAERROR  EQU     01EH    ; 最大错误次数
; 芯片引脚定义
; WATCH DOG
                 MCUDOG          EQU     P3.3    ; 看门狗清零
;                MCUDOG          EQU     P3.4    ; 看门狗清零
; 内部寄存器定义
                T2CON           EQU     0C8H    ; T2 控制寄存器
                T2MOD           EQU     0C9H    ;
                TL2             EQU     0CCH    ; T2 计数寄存器低字节
                TH2             EQU     0CDH    ; T2 计数寄存器高字节
                TR2             EQU     0CAH    ; T2 启动位
                RCAP2L          EQU     0CAH    ; T2 计数重栽寄存器低字节
                RCAP2H          EQU     0CBH    ; T2 计数重栽寄存器高字节
                CHPCON          EQU     0BFH    ; 在系统编程控制寄存器
                CHPENR          EQU     0F6H    ; 编程状态下 MTP ROM 的控制字节寄存器
                SFRAL           EQU     0C4H    ; 编程状态下的目标低地址
                SFRAH           EQU     0C5H    ; 编程状态下的目标高地址
                SFRFD           EQU     0C6H    ; 编程状态下 MTP ROM 的编程数据
                SFRCN           EQU     0C7H    ;
;
; 控制标志位定义
                TIME10MS        EQU     01H     ; 10ms 标记
                TIME500MS       EQU     02H     ; 500ms 标记
                KEYFUNFLAG      EQU     03H     ;
                TXOKFLAG        EQU     04H     ; 发送 OK 标记
                RXCOMMFLAG      EQU     05H     ;
                COMMSPACEFLAG   EQU     06H     ; 命令删除 OK 标记
                RXCOMMOKFLAG    EQU     07H     ;
                FBOOTFLAG       EQU     08H     ;
;
; 全局变量定义
; 串口
                RXBUFFTAIL      EQU     3BH     ; 接收缓冲区尾指针
                RXBUFFHEAD      EQU     3AH     ; 接收缓冲区头指针
                RXBUFFLEN       EQU     39H     ; 命令长度计数
;
                TIMECOUNT       EQU     38H     ; 500 ms 时间计数
; CRC
                CRCLO           EQU     37H     ;
                CRCHI           EQU     36H     ;
                BLKCHK          EQU     35H     ;
                TIMELO          EQU     34H     ;
                TIMEHI          EQU     33H     ;
                DPLO            EQU     32H     ;
                DPHI            EQU     31H     ;
;
;
                ORG     0000H
                LJMP    START
;****************************************************
;*                                                  *
;*                  中断向量入口                    *
;*                                                  *
;****************************************************
                ORG     0003H                   ; 中断入口表
                RETI
;
                ORG     000BH
                LJMP    INT_T0
;
                ORG     0013H
                RETI
;
                ORG     001BH
                LJMP    INT_T1
;
                ORG     0023H
                LJMP    INT_SIO
;
                ORG     002BH
                RETI
;
                ORG     0080H
;****************************************************
;*                                                  *
;*                    初始化程序                    *
;*                                                  *
;****************************************************
START:          MOV     R0, #0F0H               ; 清
                CLR     A                       ; 00 到
CLRAM:          MOV     @R0, A                  ; 7F
                DJNZ    R0, CLRAM               ; RAM
;
                MOV     P1, #0FFH               ; 清 P1
;                CLR     PWRON                   ;
                MOV     P2, #0FFH               ; 置 P2
                MOV     P3, #0FFH               ; 置 P3
                MOV     DPL, #00H               ; 清 DPTR
                MOV     DPH, #00H
                MOV     PSW, #00H               ; 设第一组寄存器
                MOV     SP, #0F1H               ; 设置堆栈指针
                MOV     SCON, #01010000B        ; 串口工作方式 1 (8 BIT UART) 允许接收
                MOV     TMOD, #00010001B        ; 定时器工作方式 1 (16 BIT CONUTER) 计数方式
                MOV     TH1, #0DBH              ; 10ms定时参数
                MOV     TL1, #0FFH              ;
                MOV     T2CON, #00110000B       ; T2CON
;                CLR     A                       ; 设置波特率 0: 38400 1: 19200
                MOV     A, #01H                 ;
                LCALL   INITBAUD                ;            2: 9600  3: 4800
                SETB    ES                      ; 允许串口中断
                SETB    ET0                     ; 允许定时器 0 中断
                SETB    ET1                     ; 允许定时器 1 中断
                MOV     IP, #00H                ; 低优先级
                SETB    TR1                     ; 启动定时计数器 1
                SETB    TR2                     ; 启动定时计数器 2
                SETB    REN                     ; 启动串口接收中断
                CLR     TI                      ; 清串口发送中断标志位
                CLR     RI                      ; 清串口接收中断标志位
                SETB    EA                      ; 开放所有中断
;
                MOV     RXBUFFHEAD, #RXBUFFSTART;
                MOV     RXBUFFTAIL, #RXBUFFSTART;
                CLR     RXCOMMFLAG              ;
                MOV     DPTR, #LOGOTBL          ; 在终端上显示 LOGO 字符
                LCALL   DISPINFO                ;
                MOV     DPTR, #ROMMARKTBL       ; 在终端上显示 ROM> 字符
                LCALL   DISPINFO
;
;****************************************************
;*                                                  *
;*                     主程序                       *
;*                                                  *
;****************************************************
MAIN:           LCALL   WATDOG                  ; 清看门狗
                LCALL   GETCOMMAND
MAINOUT:        LJMP    MAIN
                NOP
                NOP
                NOP
                LJMP    START
;
;
;****************************************************************************
;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
;****************************************************************************
; 主要处理程序
;
;****************************************************
;*                                                  *
;*                     看门狗                       *
;*                                                  *
;****************************************************
WATDOG:         CPL     MCUDOG                  ; 清看门狗
                RET
;
;
;****************************************************
;*                                                  *
;*                     获取命令                     *
;*                                                  *
;****************************************************
GETCOMMAND:     LCALL   PUTCOMMSPACE            ; 刷新命令符
                MOV     A, RXBUFFTAIL           ;
                XRL     A, #RXBUFFSTART         ;
                JZ      GETCOMMOUT              ; 接收缓冲区空不处理
                JNB     RXCOMMOKFLAG, GETCOMMOUT; 命令接收不成功不处理
                MOV     A, RXBUFFLEN            ;
                CLR     C                       ;
                SUBB    A, #COMMANDLEN          ;
                JNC     GETCOMMERROR            ; 命令字符超长出错
                CLR     A                       ;
                MOV     R4, A                   ; 清查表计数器
                MOV     R5, #RXBUFFSTART        ; 置接收缓冲区首址
                MOV     DPTR, #COMMANDTBL       ; 置命令表首址
GETCOMMCOMP:    MOV     A, R4                   ;
                MOVC    A, @A+DPTR              ; 查表
                INC     R4                      ;
                MOV     R6, A                   ; 暂存到 R6
                MOV     A, R4                   ;
                JNZ     GETCOMMOVER             ;
                INC     DPH                     ; 计数器溢出处理
GETCOMMOVER:    MOV     A, R5                   ;
                INC     R5                      ;
                MOV     R0, A                   ;
                MOV     A, @R0                  ; 读接收缓冲区
                MOV     R7, A                   ; 暂存到 R7
                MOV     A, R6                   ;
                XRL     A, #0FFH                ;
                JZ      GETCOMMERROR            ; 是否出错
                MOV     A, R6                   ;
                XRL     A, #0AH                 ;
                JZ      GETCOMMCOMPEND          ; 比较成功
                MOV     A, R7                   ;
                XRL     A, R6                   ;
                JZ      GETCOMMCOMP             ; 去下一个比较
                MOV     A, R6                   ;
                ADD     A, #20H                 ; 小写处理
                XRL     A, R7                   ;
                JZ      GETCOMMCOMP             ; 去下一个比较
                MOV     R5, #RXBUFFSTART	;
                MOV     A, R4                   ;
                MOV     B, #COMMANDLEN          ;
                DIV	AB			;
                MOV     B, #COMMANDLEN          ;
                INC	A			;

⌨️ 快捷键说明

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