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

📄 paulmon1.asm

📁 MCS51系列单片机的汇编器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;  PAULMON 8051 Debugger by Paul Stoffregen;   Please distribute freely -- may not be sold, period.;        .command +h58   ;set page height to 58 in listing file...        .equ    start,0000h    ;address for start of EPROM (0000h)        .equ    program,2000h  ;address for program loading location        .ORG    start        rst:    lJMP    poweron        .org    start+3       ;ext int #0        LJMP    program+3        .org    start+11      ;timer #0        LJMP    program+11        .org    start+13h     ;external interrupt routine #1        jnb     tcon.2,intr0        ljmp    program+13h     ;don't do ssrun if edge trigger'dintr0:  ajmp    step            ;but do ssrun if level trigger'd        .org    start+1bh     ;timer #1        ljmp    program+1bh           .org    start+23h     ;serial port        ljmp    program+23h           .org    start+2bh     ;timer #2 (8052 only)        ljmp    program+2bh        .org    start+30h     ;the jump table        ajmp    cout        ajmp    cin        ajmp    phex        ajmp    phex16        ajmp    pstr        ajmp    ghex        ajmp    ghex16        ajmp    esc        ajmp    upper        ljmp    initstep:    ;this is the single step interrupt processor code...        push    psw     ;better save these while we still can        push    acc        clr     psw.3   ;gotta be set to bank zero...        clr     psw.4step1:  acall   cin        acall   upperstep2:  cjne    a,#13,step7        ajmp    statusstep7:  cjne    a,#32,step8    ;check space        ajmp    donestep8:  cjne    a,#'?',step10  ;check '?'        acall   sshelp        ajmp    step1step10: cjne    a,#'Q',step11  ;check 'Q'=quit and run normal        push    dpl        push    dph        mov     dptr,#squit        acall   pstr        pop     dph        pop     dpl        clr     ie.2        ajmp    donestep11: cjne    a,#'H',step12  ;check 'H'=hex dump internal ram        acall   ssdmp        ajmp    step1step12: cjne    a,#'R',step13  ;check 'R'=print out registers        ajmp    ssregstep13: cjne    a,#'S',step14  ;check 'S'=skip this inst        ajmp    skip0step14: cjne    a,#'A',step20  ;check 'A'=change acc value        ajmp    chacc        step20: ajmp    step1   pequal:        ; prints '='        mov     a,#'='        acall   cout        retstatus:         ;prints two-line status during single step run        mov     a,r0        push    acc        acall   space        mov     a,#'S'        acall   cout        mov     a,#'P'        acall   cout        acall   pequal        mov     r0,sp        push    b        acall   phex        dec     r0        acall   space        lcall   pa        acall   pequal        mov     a,@r0        acall   phex        dec     r0        acall   space        lcall   prc        acall   pequal        mov     a,@r0        mov     c,acc.7        clr     a        rlc     a        acall   phex1        acall   space        lcall   pdptr        acall   pequal        mov     a,dph        acall   phex        mov     a,dpl        acall   phex        clr     a        acall   pregsn        mov     r0,sp        dec     r0        mov     a,@r0        acall   phex        mov     a,#1        acall   pregsn        mov     a,r1        acall   phex        mov     a,#2        acall   pregsn        mov     a,r2        acall   phex        mov     a,#3        acall   pregsn        mov     a,r3        acall   phex        mov     a,#4        acall   pregsn        mov     a,r4        acall   phex        mov     a,#5        acall   pregsn        mov     a,r5        acall   phex        mov     a,#6        acall   pregsn        mov     a,r6        acall   phex        mov     a,#7        acall   pregsn        mov     a,r7        acall   phex        acall   newline        acall   space           ;now begin printing the 2nd line        mov     a,#'P'        acall   cout        lcall   prc        acall   pequal        clr     c                      mov     a,sp        subb    a,#4        mov     r0,a        push    dpl        push    dph        lcall   inst        pop     dph        pop     dpl        pop     b        pop     acc        mov     r0,adone:   pop     acc        pop     psw        retisshelp: push    dpl        push    dph        acall   newline        mov     dptr,#help5txt        acall   pstr        pop     dph        pop     dpl        retpregsn: push    acc        acall   space        mov     a,#'R'        acall   cout        pop     acc        acall   phex1        acall   pequal        retssdmp:                    ;.        push    0        push    1        push    b        push    dpl        push    dph        mov     dptr,#ssdmps1        acall   pstr        pop     dph        pop     dpl        clr     a        acall   phex        mov     a,#':'        acall   cout        acall   space        mov     a,r0        acall   phex        acall   space        mov     a,r1        acall   phex        mov     r0,#2        mov     r1,#14        ajmp    ssdmp2ssdmp1: mov     a,r0        acall   phex        mov     a,#':'        acall   cout        mov     r1,#16ssdmp2: acall   space        mov     a,@r0        acall   phex        inc     r0        djnz    r1,ssdmp2        acall   newline        cjne    r0,#80h,ssdmp1        acall   newline        pop     b        pop     1        pop     0        retssreg:                   push    b             ;.        acall   space        mov     a,#'B'        acall   cout        acall   pequal        mov     a,b        acall   phex        acall   space        mov     a,#'P'        acall   cout        mov     a,#'S'        acall   cout        mov     a,#'W'        acall   cout        acall   pequal        mov     a,r0        push    acc        mov     r0,sp        dec     r0        dec     r0        dec     r0        mov     a,@r0        acall   phex        acall   space        push    dpl        push    dph        mov     dptr,#sfr3+1        mov     r0,0xA8        acall   psfr        mov     dptr,#sfr4+1        mov     r0,0xB8        acall   psfr        mov     dptr,#sfr5+1        mov     r0,0x89        acall   psfr        mov     dptr,#sfr6+1        mov     r0,0x88        acall   psfr        mov     dptr,#sfr7+1        mov     r0,0x98        acall   psfr        mov     dptr,#sfr8+1        mov     r0,0x87        acall   psfr        mov     a,#'T'        acall   cout        mov     a,#'0'        acall   cout        acall   pequal        mov     a,8Ch        acall   phex        mov     a,8Ah        acall   phex        acall   space        mov     a,#'T'        acall   cout        mov     a,#'1'        acall   cout        acall   pequal        mov     a,8Dh        acall   phex        mov     a,8Bh        acall   phex        acall   newline        pop     dph        pop     dpl        pop     acc        mov     r0,a        pop     b        ajmp    step1psfr:   acall   pstr        acall   pequal        mov     a,r0        acall   phex        acall   space        retskip0:                       ;.        push    b        mov     a,r0        push    acc        mov     a,sp        clr     c        subb    a,#4        mov     r0,a        push    dpl        push    dph        mov     dptr,#sskip1        acall   pstr        lcall   inst          ;print skipped instruction r0 points to pc        mov     a,sp        clr     c        subb    a,#6        mov     r0,a        mov     @r0,dph         ;actually change the pc!        dec     r0        mov     @r0,dpl        mov     dptr,#sskip2        acall   pstr        inc     r0        lcall   inst            ;print new instruction        pop     dph        pop     dpl        pop     acc        mov     r0,a        pop     b        ajmp    step1chacc:        mov     a,r0        push    acc        push    b        mov     r0,sp        dec     r0        dec     r0        push    dpl        push    dph        mov     dptr,#chaccs1        acall   pstr        acall   ghex        jc      chacc2        mov     @r0,a        acall   newline        pop     dph        pop     dpl        pop     b        pop     acc        mov     r0,a        ajmp    step1chacc2: mov     dptr,#abort        acall   pstr        pop     dph        pop     dpl        pop     b        pop     acc        mov     r0,a        ajmp    step1DownLoad:       ;Note, this is a modified version of the                ;auto baud rate detection routine from                ;MDP/51.  Thank You, Kei-Yong Khoo (3-31-87)        push    dpl        push    dph        mov     dptr,#dwlds1                    acall   pstr            ;"begin sending file <ESC> to abort"dwld0a: aCALL   cin         CJNE    A, #27, DWLD0   ; Test for escapedwldesc:mov     dptr,#dwlds2            acall   pstr            ;"download aborted."        pop     dph        pop     dpl        retDWLD0:                                 CJNE    a, #0x3A, DWLD0a     ; wait for ':'        ACALL   ghex        jc      dwldesc        MOV     R0, A             ; R0 = # of data bytes        ACALL   ghex        jc      dwldesc        MOV     DPH, A            ; High byte of load address        ACALL   ghex        jc      dwldesc        MOV     DPL, A            ; Low byte of load address        ACALL   ghex              ; Record type        jc      dwldesc        CJNE    A, #1, DWLD1      ; End record?        mov     dptr,#dwlds3        acall   pstr              ;"download went ok..."        pop     dph        pop     dpl        retDWLD1:  INC     R0                ; adjust for repeat loop        AJMP    DWLD3DWLD2:  ACALL   ghex              ; Get data byte        jc      dwldesc        MOVX    @DPTR, A        INC     DPTRDWLD3:  DJNZ    R0, DWLD2        ACALL   ghex              ; Discard checksum        jc      dwldesc        aJMP    DWLD0aINIT:           ;Note, this is a modified version of the                ;auto baud rate detection routine from                ;MDP/51.  Thank You, Kei-Yong Khoo (3-31-87)        orl     PCON,#10000000b   ; set double baud rate        MOV     TMOD,#00010001b        MOV     SCON,#01010000b  ; Set Serial for mode 1 &                                 ; Enable reception        ORL     TCON,#01010010b  ; Start timer 1 both timer        mov     a,7Bh        mov     r1,7Ah        mov     r2,79h        mov     r3,78h        xrl     1,#01010101b        xrl     2,#11001100b        xrl     3,#00011101b        cjne    a,1,auto        cjne    a,2,auto        cjne    a,3,auto        sjmp    autoend          ;baud rate is known from last time...AUTO:   CLR     TR1              ; Stop timer 1        MOV     TH1, #0          ; Clear timer 1        MOV     TL1, #0        JB      RXD, *           ; Wait for start bit        JB      RXD,AUTO         ; make sure it's not just noise        JB      RXD,AUTO        JB      RXD,AUTO        JB      RXD,AUTO        JNB     RXD, *           ; skip start bit        SETB    TR1        JB      RXD, *         JNB     RXD, *        JB      RXD, *        JNB     RXD, *         ; Count 3 more bits        CLR     TR1         ;  Compute baud rate        MOV     A, TL1           ; divide TH1-TL1 by 128        RLC     A                        MOV     A, TH1        RLC     A        CPL     A        INC     A                ; 2's complement        mov     b,a              ; store the reload value four times        mov     7Bh,a            ;so that it might be there later        xrl     a,#01010101b     ;we'll store the reload value        mov     7Ah,a            ;four times, just to be safe        mov     a,b        xrl     a,#11001100b        mov     79h,a        mov     a,b        xrl     a,#00011101b        mov     78h,a        mov     a,bautoend:MOV     TH1,A        mov     tmod,#00100001b  ;now it's 8 bit auto-reload        SETB    TR1        RETHELP:        push    dpl        push    dph        MOV     DPTR,#HELP1txt        ACALL   PSTR        mov     dptr,#cmd_tbl        clr     ahelp0:  movc    a,@a+dptr        jz      help_2        inc     dptr        acall   space        acall   cout        mov     r0,#4help1:  acall   space        djnz    r0,help1        clr     a        movc    a,@a+dptr   ;(high)        mov     b,a        inc     dptr        clr     a        movc    a,@a+dptr   ;(low)        inc     dptr        inc     dptr        inc     dptr        push    dpl        push    dph        mov     dpl,a        mov     dph,b        clr     a

⌨️ 快捷键说明

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