📄 up2dsptest1.lst
字号:
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 + -