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

📄 up2dsptest1.lst

📁 This program allows reading or writing values to and from the DSP through hyperterminal serial por
💻 LST
📖 第 1 页 / 共 5 页
字号:
                     463     
0185 ED              464             MOV     A, R5
0186 C4              465             SWAP    A
                     466     
                     467             ; do nibble 5
0187 120000   F      468             CALL    BCD_ASCII       ;input in A, return in A
                     469             
018A F50D            470             MOV     0DH, A          ;using location 13,12,11,10,9,8 to store result
                     471     
                     472             ;done getting ASCII values, now send to screen
018C E50F            473     READ_DONE:      MOV     A, 0FH
018E 120000   F      474             CALL    TRANS_BYTE
                     475     
0191 E50E            476             MOV     A, 0EH
0193 120000   F      477             CALL    TRANS_BYTE
                     478     
0196 E50B            479             MOV     A, 0BH
0198 120000   F      480             CALL    TRANS_BYTE
                     481     
019B E50A            482             MOV     A, 0AH
019D 120000   F      483             CALL    TRANS_BYTE
                     484     
                     485             ;check to see if PM word, if so then read two more nibbles
01A0 BA000A          486             CJNE    R2, #0, end_rd_done
                     487     
01A3 E50D            488             MOV     A, 0DH
01A5 120000   F      489             CALL    TRANS_BYTE
                     490     
01A8 E50C            491             MOV     A, 0CH
01AA 120000   F      492             CALL    TRANS_BYTE
                     493     
01AD 00              494     end_rd_done:    nop
                     495     ;       RET
01AE 020000   F      496             JMP label                  ;DO IT ALL OVER AGAIN
                     497     
                     498     
                     499     ;*********************************************                                             
                                                    
                     500     ; receive byte
                     501     ; return value in A
                     502     ;   first check to see if data in if not then wait
                     503     ;       then read in data from rxbuf
                     504     ;       next copy all unread data up by one... ie. rxbuf[0]=rxbuf[1] 
                     505     ;*********************************************
01B1                 506     RECEI_BYTE:
                     507     
01B1 2000FD   F      508             JB     rxdone,$            ;Wait until character received.
01B4 AE00     F      509             MOV     R6,rxbuf          ;Read input character.
                     510     
01B6 C200     F      511             CLR     rxflag          ;Clear reception flag.
                     512     
                     513             ; check if needed to copy buffer content
01B8 E500     F      514             MOV A, rxbuf_ptr
A51 MACRO ASSEMBLER  UP2DSPTEST1                                                          04/12/2006 14:30:29 PAGE     9

01BA 14              515             DEC A
01BB F500     F      516             MOV rxbuf_ptr, A
                     517     
                     518     
01BD 6012            519             JZ SET_RXDONE
                     520     
                     521     
                     522             ; update receive buffer by shifting content by one
01BF AF00     F      523             MOV R7, rxbuf_ptr               ; counter for use in decimation loop
                     524     
01C1 7400     F      525             MOV A, #rxbuf
01C3 2500     F      526             ADD A, rxbuf_ptr
01C5 F9              527             MOV R1, A
                     528     
01C6 A801            529     UPDATE_RXBUF:   MOV R0, 01H             ; MOV R0, R1
01C8 E8              530             MOV A, R0
01C9 14              531             DEC A
01CA F9              532             MOV R1, A
                     533     
01CB E6              534             MOV A, @R0
01CC F7              535             MOV @R1, A
01CD DFF7            536             DJNZ    R7, UPDATE_RXBUF
                     537     
                     538     
01CF                 539     SET_RXDONE_RTN:
01CF EE              540             MOV A, R6
                     541     
01D0 22              542             RET
                     543     
01D1                 544     SET_RXDONE:
01D1 D200     F      545             SETB rxdone             ; no more data inside
                     546     
01D3 100002   F      547             JBC flow_control, SET_XON       ; if xoff has been sent now should send xon
01D6 80F7            548             SJMP SET_RXDONE_RTN
                     549     
01D8                 550     SET_XON:
01D8 7411            551             MOV     A, #17  ;xon
01DA 120000   F      552             CALL TRANS_BYTE
01DD 7458            553             MOV A, #'X'
01DF 120000   F      554             call TRANS_BYTE
01E2 744E            555             MOV A, #'N'
01E4 120000   F      556             call TRANS_BYTE
                     557     
01E7 80E6            558             SJMP SET_RXDONE_RTN
                     559     
                     560     ;transmit byte
                     561     ; transmit value in A
01E9                 562     TRANS_BYTE:
                     563     
                                     
                             
                                     
                                     
                             
                                     
                                     
                             
                             
                     573     
                     574     
                     575     ;this is non-interrupt version, not used       
01E9 3099FD          576             JNB TI,$                  ;WAIT UNTIL TRANSMISSION COMPLETED
01EC C299            577             CLR TI                    ;READY TO TRANSMIT ANOTHER
01EE F599            578             MOV SBUF,A
                     579     
01F0 22              580             RET
A51 MACRO ASSEMBLER  UP2DSPTEST1                                                          04/12/2006 14:30:29 PAGE    10

                     581     
                     582     
                     583     ;Converting ASCII value to BCD value
                     584     ; input can be upper or lower case letters
                     585     ;Input A, Output A
01F1                 586     ASCII_BCD:      
01F1 F9              587             MOV     R1,A            ;R1= raw received byte
01F2 9461            588             SUBB    A, #61H         ;subtract to check whether it is numbers or letters
                     589                                     ;subtract to get back lower case value from ASCII format
01F4 7E57            590             MOV     R6, #57H
01F6 30E70A          591             JNB     ACC.7,RECEIVE_LTR
                     592     
                     593     ;       MOV     20H,A           ;20= temp testing location
                     594     ;       JNB     20H.7,RECEIVE_LTR       ; check sign bit of R2
01F9 E9              595             MOV     A, R1           
                     596     
01FA 9440            597             SUBB    A, #40H         ;subtract to get back upper case value from ASCII format
01FC 7E37            598             MOV     R6, #37H
01FE 30E702          599             JNB     ACC.7,RECEIVE_LTR
                     600     
0201 7E2F            601             MOV     R6, #2FH                ;subtract to get back num value from ASCII format
                     602     
                     603     
0203 E9              604     RECEIVE_LTR:    MOV A, R1
0204 9E              605                     SUBB A, R6
0205 22              606             RET
                     607     
                     608     ;**************************************************
                     609     ; Returning one byte address or data in BCD form in A
0206 120000   F      610     GET_BCD:        CALL RECEI_BYTE         ;getting first nibble of BCD value
0209 200003   F      611             JB      download, NO_ECHO
020C 120000   F      612             CALL TRANS_BYTE
020F 00              613     NO_ECHO: nop
0210 120000   F      614             CALL ASCII_BCD          ; input A return A
                     615     
0213 C4              616             SWAP    A               ;high nibble now in place
0214 FB              617             MOV     R3,A            ;R3= holding output byte        
                     618     
0215 120000   F      619             CALL RECEI_BYTE         ;getting second nibble of BCD value
0218 200003   F      620             JB      download, NO_ECHO1
021B 120000   F      621             CALL TRANS_BYTE
021E 00              622     NO_ECHO1: nop
021F 120000   F      623             CALL ASCII_BCD          ; input A return A
                     624     
0222 4B              625             ORL     A, R3           ;put low nibble together with high nibble
                     626     
                     627     ;       MOV     P0, A           ; output to port 0
                     628     
0223 22              629             RET
                     630     
                     631     ;****************************************************
                     632     ; Convert BCD nibble in A to ASCII value
                     633     ;  output values in lower case
                     634     ; Input value in A, return values in A
0224 540F            635     BCD_ASCII:      ANL     A, #0FH         ;do low nibble 
                     636     
0226 F9              637             MOV     R1, A           ;R1= current processing nibble
0227 940A            638             SUBB    A, #0AH         ;subtract to check whether it is numbers or letters
                     639                                     
0229 F520            640             MOV     20H,A           ;20= sign_tst, temp testing location
022B E9              641             MOV     A, R1           
022C 2430            642             ADD     A, #30H         ;ADD to get ASCII format
                     643     
022E 200702          644             JB      20H.7,GOT_NUMBERS_DONE  ; check sign bit, if neg then is number
                     645     
                     646             ;got letters
A51 MACRO ASSEMBLER  UP2DSPTEST1                                                          04/12/2006 14:30:29 PAGE    11

0231 2427            647             ADD     A, #27H         ;57H-30H=27H, ADD to get ASCII format   
                     648     
0233 00              649     GOT_NUMBERS_DONE:       NOP             
                     650     
0234 22              651             RET
                     652     
                     653     
                     654     
                     655     
                     656     
                     657     ;********************************************************************
                     658     ; Print welcome message
                     659     ;********************************************************************
0235 20446562        660     prompt1:        db ' Debugger and bootloader: ',0
0239 75676765                
023D 7220616E                
0241 6420626F                
0245 6F746C6F                
0249 61646572                
024D 3A2000                  
0250 64722C64        661     prompt2:        db 'dr,dw,pr,pw or Download *.exe file',0
0254 772C7072                
0258 2C707720                
025C 6F722044                
0260 6F776E6C                
0264 6F616420                
0268 2A2E6578                
026C 65206669                
0270 6C6500                  
                     662     
0273 900000   F      663     intro:          mov dptr,#prompt1
0276 120000   F      664                     lcall outstr
0279 900000   F      665                     mov dptr,#prompt2
027C 120000   F      666                     lcall outstr
027F 22              667                     ret
                     668     
                     669     ;********************************************************************
                     670     ; Send a null terminated string out serial port
                     671     ;********************************************************************
0280 E4              672     outstr:         clr a
0281 93              673                     movc a,@a+dptr      ; get character
0282 6006            674                     jz exit_outstr      ; stop if char == null
0284 120000   F      675                     call TRANS_BYTE       ; else send it
0287 A3              676                     inc dptr            ; point to next char
0288 80F6            677                     sjmp outstr
028A 22              678     exit_outstr:           ret
                     679     
                     680     
                     681     ;**********************************************
                     682     ; Serial Interrupt service routine
                     683     ; interrupt routine uses  B
                     684     ;*********************************************
028B                 685     ser_isr:
028B 109802          686             jbc     ri,RXisr        ; incoming character?

⌨️ 快捷键说明

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