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

📄 test3.lst

📁 SJA1000驱动程序(分别用C&ASM书写)
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -