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

📄 can.lst

📁 CAN_EXAMPLE CAN+MCU51开发实例
💻 LST
📖 第 1 页 / 共 3 页
字号:
A51 MACRO ASSEMBLER  CAN                                                                  05/11/2004 13:50:13 PAGE     4

  00C2          +1   191     CANIE1          DATA    0C2H    
  00C3          +1   192     CANIE2          DATA    0C3H
  00C4          +1   193     CANIDM1         DATA    0C4H
  00C5          +1   194     CANIDM2         DATA    0C5H
  00C6          +1   195     CANIDM3         DATA    0C6H
  00C7          +1   196     CANIDM4         DATA    0C7H
  00CE          +1   197     CANEN1          DATA    0CEH
  00CF          +1   198     CANEN2          DATA    0CFH
                +1   199     
                +1   200     
                     201     
                     202     
  0010               203     num_channel DATA 10H
  0011               204     num_data DATA 11H
  0012               205     data0 DATA 12H
  0013               206     data1 DATA 13H
  0014               207     data2 DATA 14H
  0015               208     data3 DATA 15H
  0016               209     data4 DATA 16H
  0017               210     data5 DATA 17H
  0018               211     data6 DATA 18H
  0019               212     data7 DATA 19H
                     213     
                     214     ;/* baud rate and bit timing parameters */
                     215     
                     216     
                     217     
                     218     
                     219     
                     220     
0000                 221     org 000h
0000 020100          222     ljmp begin
                     223     
003B                 224     org 3Bh
003B 0201B9          225     ljmp can_it
                     226     
                     227     ;/**
                     228     ; * FUNCTION_PURPOSE: This file set up Can at 500Kbauds with channel 0 id 0x123 in receptio
                             n
                     229     ; * and channel 1 id 0x001 in emission.
                     230     ; * FUNCTION_INPUTS: void
                     231     ; * FUNCTION_OUTPUTS: void
                     232     ; */
                     233     
0100                 234     org 0100h
0100                 235     begin:
0100 43AB01          236     ORL CANGCON,#01h;                      ;/* reset CAN */ 
                     237     
                     238     ;/* reset all mailboxes */
0103 751000          239     MOV      num_channel,#00h
0106                 240     reset_mailbox:
0106 E510            241        MOV      A,num_channel                 ;/* load accumulator with channel value */
0108 C4              242        SWAP     A
0109 54F0            243        ANL      A,#0F0h
010B F5B1            244        MOV      CANPAGE,A                     ;/* CHNB=num_channel; */
010D 75B300          245        MOV      CANCONCH,#00h                 ;/* channel disable */
0110 75B200          246        MOV      CANSTCH,#00h
0113 75BC00          247        MOV      CANIDT1,#00h
0116 75BD00          248        MOV      CANIDT2,#00h
0119 75BE00          249        MOV      CANIDT3,#00h
011C 75BF00          250        MOV      CANIDT4,#00h
011F 75C400          251        MOV      CANIDM1,#00h
0122 75C500          252        MOV      CANIDM2,#00h
0125 75C600          253        MOV      CANIDM3,#00h
0128 75C700          254        MOV      CANIDM4,#00h
012B 751100          255        MOV      num_data,#00h
A51 MACRO ASSEMBLER  CAN                                                                  05/11/2004 13:50:13 PAGE     5

012E                 256        reset_data:
012E 75A300          257           MOV      CANMSG,#00h
0131 0511            258           INC      num_data
0133 E511            259           MOV      A,num_data
0135 B408F6          260        CJNE        A,#08h,reset_data
0138 0510            261        INC         num_channel
013A E510            262        MOV      A,num_channel
013C B40FC7          263     CJNE        A,#0Fh,reset_mailbox
                     264     
                     265     ;/* setup bit timing */
013F 7400            266     MOV      A,#00
0141 23              267     RL       A
0142 F5B4            268     MOV      CANBT1,A
0144 53B59F          269     ANL      CANBT2,#9Fh                   ;/* reset SJW   */
0147 7400            270     MOV      A,#00
0149 C4              271     SWAP     A
014A 23              272     RL       A
014B 54E0            273     ANL      A,#0E0h
014D 42B5            274     ORL      CANBT2,A                      ;/* SJW=0x00; */ 
014F 53B5F1          275     ANL      CANBT2,#0F1h                  ;/* reset PRS   */
0152 7402            276     MOV      A,#02
0154 23              277     RL       A
0155 42B5            278     ORL      CANBT2,A                      ;/* PRS=0x02; */
0157 53B68F          279     ANL      CANBT3,#8Fh                   ;/* reset PHS2  */    
015A 7403            280     MOV      A,#03
015C C4              281     SWAP     A
015D 54F0            282     ANL      A,#0F0h
015F 42B6            283     ORL      CANBT3,A                      ;/* PHS2=0x03;*/  
0161 53B6F1          284     ANL      CANBT3,#0F1h                  ;/* reset PHS1  */ 
0164 7403            285     MOV      A,#03
0166 23              286     RL       A
0167 42B6            287     ORL      CANBT3,A                      ;/* PHS1=0x03 */ 
0169 43AB02          288     ORL      CANGCON,#02h                  ;/* start CAN */ 
                     289     ;/* Channel 0 init */
016C 7400            290     MOV      A,#00h                        ;/* load accumulator with channel value */
016E C4              291     SWAP     A
016F 54F0            292     ANL      A,#0F0h
0171 F5B1            293     MOV      CANPAGE,A                     ;/* CHNB=0x00; select channel 0 */
0173 75B200          294     MOV      CANSTCH,#00h                  ;/* reset channel staus */               
0176 75B300          295     MOV      CANCONCH,#00h                 ;/* reset control and dlc register */            
                     296     ;/* Channel 0: identifier = 11bits. CANIDT=0x123 */
0179 75BC24          297     MOV      CANIDT1,#24h
017C 53BD7F          298     ANL      CANIDT2,#07Fh
017F 43BD60          299     ORL      CANIDT2,#060h
                     300     ;/* Channel 0: mask = 11bits. 0x7F0 */
0182 75C4FE          301     MOV      CANIDM1,#0FEh
0185 53C51F          302     ANL      CANIDM2,#1Fh
0188 75C700          303     MOV      CANIDM4,#00h
                     304     ;/* Channel 0 configuration */
018B 53BFFB          305     ANL      CANIDT4,#0FBh                 ;/* clear bit rtr in CANIDT4. */
018E 43B308          306     ORL      CANCONCH,#08h                 ;/* Reception 8 bytes.*/
0191 43B380          307     ORL      CANCONCH,#80h                 ;/* Reception enabled without buffer.*/
                     308     ;/* Channel 1 init */
0194 7401            309     MOV      A,#01h                        ;/* load accumulator with channel value */
0196 C4              310     SWAP     A
0197 54F0            311     ANL      A,#0F0h
0199 F5B1            312     MOV      CANPAGE,A                     ;/* CHNB=0x01; select channel 1 */
019B 75B200          313     MOV      CANSTCH,#00h                  ;/* reset channel staus */               
019E 75B300          314     MOV      CANCONCH,#00h                 ;/* reset control and dlc register */            
                     315     ;/* Channel 1: identifier = 11bits. CANIDT=0x001 */
01A1 75BC80          316     MOV      CANIDT1,#80h
01A4 53BD3F          317     ANL      CANIDT2,#3Fh
01A7 43BD20          318     ORL      CANIDT2,#20h
                     319     ;/* interrupt configuration */
01AA 43C301          320     ORL      CANIE2,#01h                   ;/* IECH0=1 */
01AD 43C110          321     ORL      CANGIE,#10h                   ;/* Can_Tx IT enable */
A51 MACRO ASSEMBLER  CAN                                                                  05/11/2004 13:50:13 PAGE     6

01B0 43C120          322     ORL      CANGIE,#20h                   ;/* Can_Rx IT enable */
01B3 D2E8            323     SETB     ECAN                          ;/* CAN IT enable */
01B5 D2AF            324     SETB     EA                            ;/* all IT enable */   
01B7 80FE            325     JMP $                                  ;/* endless */
                     326     
                     327     
                     328     ;/**
                     329     ; * FUNCTION_PURPOSE: can interrupt. echo receive data on channel 0 reception.
                     330     ; * Reception id between 0x120 and 0x12F.
                     331     ; * FUNCTION_INPUTS: P4.1(RxDC) can input
                     332     ; * FUNCTION_OUTPUTS: P4.0(TxDC) can output 
                     333     ; */
01B9                 334     can_it:
01B9 AFB1            335     MOV R7,CANPAGE                         ;/* save current context */
                     336     ;/* set channel */
01BB 7400            337     MOV      A,#00h                        ;/* load accumulator with channel value */
01BD C4              338     SWAP     A
01BE 54F0            339     ANL      A,#0F0h
01C0 F5B1            340     MOV      CANPAGE,A                     ;/* CHNB=0x00; select channel 0 */
                     341     ;/* echo receive data on channel 0 reception */
01C2 E5B2            342     MOV      A,CANSTCH
01C4 B42046          343     CJNE     A,#20h,end_if_rxok
                     344        ;/* save receive data */
01C7 85A312          345        MOV      data0,CANMSG
01CA 85A313          346        MOV      data1,CANMSG
01CD 85A314          347        MOV      data2,CANMSG
01D0 85A315          348        MOV      data3,CANMSG
01D3 85A316          349        MOV      data4,CANMSG
01D6 85A317          350        MOV      data5,CANMSG
01D9 85A318          351        MOV      data6,CANMSG
01DC 85A319          352        MOV      data7,CANMSG
                     353        ;/* set channel */
01DF 7401            354        MOV      A,#01h                     ;/* load accumulator with channel value */
01E1 C4              355        SWAP     A
01E2 54F0            356        ANL      A,#0F0h
01E4 F5B1            357        MOV      CANPAGE,A                  ;/* CHNB=0x00; select channel 1 */
                     358        ;/* Channel 1 configuration */
01E6 75B300          359        MOV      CANCONCH,#00h;             ;/* reset channel 1 configuration */            
                     360        ;/* load saved data */
01E9 8512A3          361        MOV      CANMSG,data0
01EC 8513A3          362        MOV      CANMSG,data1
01EF 8514A3          363        MOV      CANMSG,data2
01F2 8515A3          364        MOV      CANMSG,data3
01F5 8516A3          365        MOV      CANMSG,data4
01F8 8517A3          366        MOV      CANMSG,data5
01FB 8518A3          367        MOV      CANMSG,data6
01FE 8519A3          368        MOV      CANMSG,data7
                     369        
0201 43B308          370        ORL      CANCONCH,#08h              ;/* transmit 8 bytes */            
0204 43B340          371        ORL      CANCONCH,#40h              ;/* emission enabled */
0207 43CF02          372        ORL      CANEN2,#02h                ;/* channel 1 enable */
020A 75B200          373        MOV      CANSTCH,#00h               ;/* reset channel 1 status */
                     374     
020D                 375     end_if_rxok:
                     376     
                     377     ;/* set channel */
020D 7400            378     MOV      A,#00h                        ;/* load accumulator with channel value */
020F C4              379     SWAP     A
0210 54F0            380     ANL      A,#0F0h
0212 F5B1            381     MOV      CANPAGE,A                     ;/* CHNB=0x00; select channel 0 */
0214 75B300          382     MOV      CANCONCH,#00h                 ;/* reset channel 0 configuration */            
0217 43B308          383     ORL      CANCONCH,#08h                 ;/* receive 8 bytes */
021A 43B380          384     ORL      CANCONCH,#80h                 ;/* reception enable */
021D 43CF01          385     ORL      CANEN2,#01h                   ;/* channel 0 enable */
0220 75B200          386     MOV      CANSTCH,#00h                  ;/* reset channel 0 status */

⌨️ 快捷键说明

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