📄 test3.lst
字号:
01A3 218E 506 AJMP LOOPER
507
01A5 508 MS_DEALPRG:
509 ; LCALL DISPLAY_PRG
01A5 2191 510 AJMP LOOPER1
511 ;发现错误处理
01A7 512 ERR_PRG:
01A7 1203B0 513 LCALL BCAN_ENTER_RETMODEL ;进入复位模式
01AA 757CFC 514 MOV ERROR_STATUS,#SJA_SEND_ERR
A51 MACRO ASSEMBLER TEST3 06/03/2003 11:04:01 PAGE 9
515 ;错误信息处理
01AD 516 ERROR_HANDLE:
01AD 120355 517 LCALL DISP_ERROR
01B0 120239 518 LCALL DELAY
01B3 120239 519 LCALL DELAY
01B6 02011B 520 LJMP SJA1000_INIT0 ;现错误,根据实际情况处理
521 ;数据超载处理
01B9 522 DOVER_PRG:
01B9 7F08 523 MOV R7,#08H ;清除数据超载
01BB 1204AB 524 LCALL BCAN_CMD_PRG ;
01BE 02019D 525 LJMP LOOPER5
526 ;上一次发送的数据发送完毕处理
01C1 527 DSEND_PRG:
01C1 12036E 528 LCALL DISP_OK
01C4 0201A0 529 LJMP LOOPER6
530 ;唤醒中断处理
01C7 531 WOKE_PRG: ;唤醒处理
01C7 02018E 532 LJMP LOOPER
533 ;接收数据处理部分
01CA 534 RCVDATA_PRG:
535 ;LCALL UART_INIT
01CA 7850 536 MOV R0,# RCV_DATA_BUF1 ;微处理器接收首地址
01CC 120404 537 LCALL BCAN_DATA_RECEIVE ;调用接收数据子程序
01CF 7F04 538 MOV R7,#04H ;释放接收缓冲区
01D1 1204AB 539 LCALL BCAN_CMD_PRG ;
540 ;将接收的数据发送至串口
01D4 7851 541 MOV R0,# RCV_DATA_BUF2 ;计算接收数据长度判断远程帧、数据帧
01D6 E6 542 MOV A,@R0
01D7 20E407 543 JB ACC.4,RD_PRG1 ;远程帧
544 ;数据帧
01DA 540F 545 ANL A,#0FH ;计算数据数目
01DC 2402 546 ADD A,#02H ;计算帧的数据长度
01DE FF 547 MOV R7, A
01DF 21E3 548 AJMP RD_UARTSD
01E1 549 RD_PRG1:
01E1 7F02 550 MOV R7,#02H
01E3 551 RD_UARTSD:
01E3 7850 552 MOV R0,#RCV_DATA_BUF1 ;微处理器接收首地址
01E5 120242 553 LCALL UART_SEND ;调用串口发送程序
01E8 12036E 554 LCALL DISP_OK
01EB 020194 555 LJMP LOOPER2
556 ;控制SJA1000向CAN总线发送数据处理部分
01EE 557 SENDDATA_PRG:
01EE 7840 558 MOV R0, #SEND_DATA_BUF1
01F0 76AA 559 MOV @R0, #0AAH
01F2 08 560 INC R0
01F3 E57F 561 MOV A, TEST_DATA
01F5 7F08 562 MOV R7, #08
01F7 7408 563 MOV A, #08
01F9 F6 564 MOV @R0, A
01FA 565 RB_DATA:
01FA E57F 566 MOV A, TEST_DATA
01FC 08 567 INC R0
01FD F6 568 MOV @R0, A
01FE DFFA 569 DJNZ R7, RB_DATA ;将特定格式的帧存入发送缓冲区
570
0200 7840 571 MOV R0, #SEND_DATA_BUF1
0202 1203D0 572 LCALL BCAN_DATA_WRITE ;将要发送的数据送入发送缓冲区
573
0205 7F01 574 MOV R7, #01
0207 1204AB 575 LCALL BCAN_CMD_PRG
020A 020197 576 LJMP LOOPER3
577
578 ;定时器0初始化
020D 579 T0_INIT:
020D E589 580 MOV A,TMOD
A51 MACRO ASSEMBLER TEST3 06/03/2003 11:04:01 PAGE 10
020F 54F0 581 ANL A,#0F0H
0211 4401 582 ORL A,#01H
0213 F589 583 MOV TMOD,A;T0工作在方式1
0215 758CFC 584 MOV TH0,#0FCH ;定时周期1MS
0218 758A66 585 MOV TL0,#066H
021B D2A9 586 SETB ET0
021D 758855 587 MOV TCON,#055H ;启动定时器
0220 22 588 RET
589 ;串口初始化
0221 590 UART_INIT:
0221 759850 591 MOV SCON,#050H ;串口数据1个STOP,8个DATA,无校验
0224 E589 592 MOV A,TMOD
0226 540F 593 ANL A,#0FH
0228 4420 594 ORL A,#020H
022A F589 595 MOV TMOD,A ;用定时器1做波特率发生器
022C 758DFD 596 MOV TH1,#0FDH ;波特率9600bps
022F 758BFD 597 MOV TL1,#0FDH
0232 D28E 598 SETB TR1
0234 C2AC 599 clr ES
0236 C299 600 CLR TI
0238 22 601 RET
602
603
604 ;延时程序
0239 605 DELAY:
0239 7FFF 606 MOV R7,#0FFH
023B 7EFF 607 D1: MOV R6,#0ffh
023D DEFE 608 DJNZ R6,$
023F DFFA 609 DJNZ R7,D1
0241 22 610 RET
611 ;串口发送子程序
0242 612 UART_SEND:
0242 C299 613 CLR TI
0244 E6 614 MOV A,@R0
0245 F599 615 MOV SBUF,A
0247 3099FD 616 JNB TI,$
024A C299 617 CLR TI
024C 08 618 INC R0
024D DFF3 619 DJNZ R7,UART_SEND
024F 22 620 RET
621 ;外部中断0
0250 622 BCAN_INT0:
0250 C083 623 push DPH
0252 C082 624 PUSH DPL
0254 C0D0 625 PUSH PSW ;PSW,ACC入栈
0256 C0E0 626 PUSH ACC
627 USING 3 ;应用寄存器第3组
0258 90FA03 628 MOV DPTR,#REG_INTERRUPT ;读中断寄存器
025B E0 629 MOVX A,@DPTR ;
025C F532 630 MOV SAVE_INT_INFO,A ;保存中断寄存器的内容
025E 30E002 631 JNB ACC.0,BCAN_INT1 ;接收中断
0261 D20F 632 SETB RCV_GOOD ;置位接收标志
0263 633 BCAN_INT1:
0263 E532 634 MOV A,SAVE_INT_INFO
0265 30E102 635 JNB ACC.1,BCAN_INT2 ;发送中断
0268 D213 636 SETB DS_END_FLAG ;发送完成处理
026A 637 BCAN_INT2:
026A E532 638 MOV A,SAVE_INT_INFO
026C 30E202 639 JNB ACC.2,BCAN_INT3 ;错误中断
026F D211 640 SETB ERR_FLAG ;置位错误标志
0271 641 BCAN_INT3:
0271 E532 642 MOV A,SAVE_INT_INFO
0273 30E302 643 JNB ACC.3 ,BCAN_INT4 ;超载中断
0276 D212 644 SETB OVER_FLAG ;置位超载标志
0278 645 BCAN_INT4:
0278 E532 646 MOV A,SAVE_INT_INFO
A51 MACRO ASSEMBLER TEST3 06/03/2003 11:04:01 PAGE 11
027A 30E402 647 JNB ACC.4,BCAN_INT5 ;唤醒中断
027D D214 648 SETB WUI_FLAG ;唤醒中断处理标志
027F 649 BCAN_INT5:
027F D0E0 650 POP ACC
0281 D0D0 651 POP PSW
0283 D082 652 POP DPL
0285 D083 653 POP DPH
0287 32 654 RETI
655 ;定时器0中断
0288 656 T0_INTERRUPT:
0288 C083 657 push DPH
028A C082 658 PUSH DPL
028C C0D0 659 PUSH PSW ;PSW、ACC入栈
028E C0E0 660 PUSH ACC
661 USING 2
0290 758CFC 662 MOV TH0,#0FCH ;设置定时周期1MS
0293 758A66 663 MOV TL0,#066H
0296 D215 664 SETB TOIR
665
0298 120388 666 LCALL DSEG_CONTRL
029B 1202D3 667 LCALL DISPLAY_PRG
668
029E E52F 669 MOV A,FLIGHDISP
02A0 600E 670 JZ NOFLIGH
02A2 057E 671 INC FLIGHCOUNT
02A4 E57E 672 MOV A,FLIGHCOUNT
02A6 B4C809 673 CJNE A,#200,NOFLIGH1
02A9 757E00 674 MOV FLIGHCOUNT,#00
02AC B27A 675 CPL FLIGHSYNC
02AE 41B2 676 AJMP NOFLIGH1
02B0 677 NOFLIGH:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -