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

📄 can.lis

📁 不可多得的atmel公司canbus通讯程序(at90can128)
💻 LIS
字号:
                        .module CAN.C
                        .area text(rom, con, rel)
 0000                   .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
                        .area data(ram, con, rel)
 0000                   .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
 0000           _send_Buf::
 0000                   .blkb 2
                        .area idata
 0000 3132              .byte 49,50
                        .area data(ram, con, rel)
 0002                   .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
 0002                   .blkb 2
                        .area idata
 0002 3334              .byte 51,52
                        .area data(ram, con, rel)
 0004                   .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
 0004                   .blkb 2
                        .area idata
 0004 3536              .byte 53,54
                        .area data(ram, con, rel)
 0006                   .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
 0006                   .blkb 2
                        .area idata
 0006 3738              .byte 55,56
                        .area data(ram, con, rel)
 0008                   .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
 0008                   .dbsym e send_Buf _send_Buf A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
 0000                   .dbfunc e CAN_ClrMailBox _CAN_ClrMailBox fV
 0000           ;    mob_channel -> R16
 0000           ;       mob_data -> R18
                        .even
 0000           _CAN_ClrMailBox::
 0000                   .dbline -1
 0000                   .dbline 34
 0000           ; //////////////////////////////////////////////////////////
 0000           ; //单向查询
 0000           ; //说明:
 0000           ; //            本程序是结点2,只负责发送
 0000           ; //////////////////////////////////////////////////////////
 0000           ; 
 0000           ; 
 0000           ; //-------------------------------------------------------------------
 0000           ; //                                    查询发送方式1总结:
 0000           ; //检测上次发送完成(TXOK)
 0000           ; //前提条件:CAN_Init()子程序中,必须事先将CANPAGE对象的TXOK位置位
 0000           ; //-------------------------------------------------------------------
 0000           ; //    IF 上次发送完成(TXOK) THEN
 0000           ; //            (1)、清除TXOK
 0000           ; //            (2)、填写发送数据
 0000           ; //            (3)、启动发送
 0000           ; 
 0000           ; //-------------------------------------------------------------------
 0000           ; //                                    查询发送方式2总结:
 0000           ; //while (当前发送完成)
 0000           ; //-------------------------------------------------------------------
 0000           ; //    (1)、填写发送数据
 0000           ; //    (2)、启动发送
 0000           ; //    (3)、while (TXOK)
 0000           ; //    (4)、清除TXOK
 0000           ; 
 0000           ; #define _CAN_H
 0000           ; #include "AT90CAN128.H"
 0000           ; 
 0000           ; uint8 send_Buf[8] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
 0000           ; 
 0000           ; 
 0000           ; void CAN_ClrMailBox(void) 
 0000           ; { 
 0000                   .dbline 38
 0000           ;       uint8 mob_channel;
 0000           ;       uint8 mob_data; 
 0000           ; 
 0000           ;       for (mob_channel = 0 ; mob_channel < 15 ; mob_channel++)
 0000 0027              clr R16
 0002 23C0              xjmp L7
 0004           L4:
 0004                   .dbline 39
 0004           ;       {
 0004                   .dbline 40
 0004           ;               CANPAGE = (mob_channel << 4);
 0004 802F              mov R24,R16
 0006 8F70              andi R24,#0x0F
 0008 8295              swap R24
 000A 8093ED00          sts 237,R24
 000E                   .dbline 41
 000E           ;               CANIDT4        = 0; 
 000E 2224              clr R2
 0010 2092F000          sts 240,R2
 0014                   .dbline 42
 0014           ;               CANIDT3        = 0; 
 0014 2092F100          sts 241,R2
 0018                   .dbline 43
 0018           ;               CANIDT2        = 0; 
 0018 2092F200          sts 242,R2
 001C                   .dbline 44
 001C           ;               CANIDT1        = 0; 
 001C 2092F300          sts 243,R2
 0020                   .dbline 45
 0020           ;               CANIDM4        = 0; 
 0020 2092F400          sts 244,R2
 0024                   .dbline 46
 0024           ;               CANIDM3        = 0; 
 0024 2092F500          sts 245,R2
 0028                   .dbline 47
 0028           ;               CANIDM2        = 0; 
 0028 2092F600          sts 246,R2
 002C                   .dbline 48
 002C           ;               CANIDM1        = 0; 
 002C 2092F700          sts 247,R2
 0030                   .dbline 49
 0030           ;               CANSTMOB = 0; 
 0030 2092EE00          sts 238,R2
 0034                   .dbline 50
 0034           ;               CANCDMOB = 0; 
 0034 2092EF00          sts 239,R2
 0038                   .dbline 51
 0038           ;               for (mob_data = 0; mob_data < 8; mob_data++) 
 0038 2227              clr R18
 003A 04C0              xjmp L11
 003C           L8:
 003C                   .dbline 52
 003C           ;                       CANMSG = 0; 
 003C 2224              clr R2
 003E 2092FA00          sts 250,R2
 0042           L9:
 0042                   .dbline 51
 0042 2395              inc R18
 0044           L11:
 0044                   .dbline 51
 0044 2830              cpi R18,8
 0046 D0F3              brlo L8
 0048           X0:
 0048                   .dbline 53
 0048           ;       }
 0048           L5:
 0048                   .dbline 38
 0048 0395              inc R16
 004A           L7:
 004A                   .dbline 38
 004A 0F30              cpi R16,15
 004C D8F2              brlo L4
 004E           X1:
 004E                   .dbline -2
 004E           L3:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbsym r mob_channel 16 c
 0050                   .dbsym r mob_data 18 c
 0050                   .dbend
 0050                   .dbfunc e CAN_Init _CAN_Init fV
                        .even
 0050           _CAN_Init::
 0050                   .dbline -1
 0050                   .dbline 58
 0050           ; } 
 0050           ; 
 0050           ; 
 0050           ; void CAN_Init(void)
 0050           ; {
 0050                   .dbline 59
 0050           ;       CAN_SOFT_RESET();
 0050 81E0              ldi R24,1
 0052 8093D800          sts 216,R24
 0056           L13:
 0056                   .dbline 60
 0056           ;       while (CANGSTA & (1 << ENFG));
 0056           L14:
 0056                   .dbline 60
 0056 2090D900          lds R2,217
 005A 22FC              sbrc R2,2
 005C FCCF              rjmp L13
 005E           X2:
 005E                   .dbline 61
 005E           ;       CAN_ClrMailBox();
 005E D0DF              xcall _CAN_ClrMailBox
 0060                   .dbline 62
 0060           ;       CANBT1 = 0x02;
 0060 82E0              ldi R24,2
 0062 8093E200          sts 226,R24
 0066                   .dbline 63
 0066           ;       CANBT2 = 0x04;
 0066 84E0              ldi R24,4
 0068 8093E300          sts 227,R24
 006C                   .dbline 64
 006C           ;       CANBT3 = 0x13;
 006C 83E1              ldi R24,19
 006E 8093E400          sts 228,R24
 0072                   .dbline 65
 0072           ;       CANTCON = 0xFF;
 0072 8FEF              ldi R24,255
 0074 8093E500          sts 229,R24
 0078                   .dbline 66
 0078           ;       CANPAGE = 0x00;
 0078 2224              clr R2
 007A 2092ED00          sts 237,R2
 007E                   .dbline 67
 007E           ;       CANSTMOB = 0x00;
 007E 2092EE00          sts 238,R2
 0082                   .dbline 68
 0082           ;       CANIDT4 = 0x00;
 0082 2092F000          sts 240,R2
 0086                   .dbline 69
 0086           ;       CANIDT3 = 0x00; 
 0086 2092F100          sts 241,R2
 008A                   .dbline 70
 008A           ;       CANIDT2 = 0x40;
 008A 80E4              ldi R24,64
 008C 8093F200          sts 242,R24
 0090                   .dbline 71
 0090           ;       CANIDT1 = 0x02;
 0090 82E0              ldi R24,2
 0092 8093F300          sts 243,R24
 0096                   .dbline 72
 0096           ;       CANSTMOB = BIT(TXOK);     
 0096 80E4              ldi R24,64
 0098 8093EE00          sts 238,R24
 009C                   .dbline 73
 009C           ;       CAN_START();
 009C 8091D800          lds R24,216
 00A0 8260              ori R24,2
 00A2 8093D800          sts 216,R24
 00A6           L16:
 00A6                   .dbline 74
 00A6           ;       while (!(CANGSTA & (1 << ENFG)));
 00A6           L17:
 00A6                   .dbline 74
 00A6 2090D900          lds R2,217
 00AA 22FE              sbrs R2,2
 00AC FCCF              rjmp L16
 00AE           X3:
 00AE                   .dbline -2
 00AE           L12:
 00AE                   .dbline 0 ; func end
 00AE 0895              ret
 00B0                   .dbend
 00B0           ; }
 00B0           ; 
 00B0           ; 
 00B0           ; /*
 00B0           ; #pragma interrupt_handler AT90CAN128_ISR:iv_CANIT
 00B0           ; void AT90CAN128_ISR(void)
 00B0           ; {
 00B0           ;       uint8 i;
 00B0           ;       uint8 save_canpage;
 00B0           ; 
 00B0           ;    save_canpage = CANPAGE;
 00B0           ; // echo receive data on channel 0 reception 
 00B0           ;    
 00B0           ;       CANPAGE = (0 << 4);                                             // CHNB=0x00; select channel 0 
 00B0           ;       if (CANSTMOB & (1 << RXOK))
 00B0           ;       {
 00B0           ;               CHA_Init();
 00B0           ;     USART1_send_buffer[0] = CANIDT1;
 00B0           ;     USART1_send_buffer[1] = CANIDT2;
 00B0           ;               for (i = 0 ; i < 8 ; i++) 
 00B0           ;                       USART1_send_buffer[2+i] = CANMSG;       // save receive data 
 00B0           ;     USART1_Begin_Send();
 00B0           ;         
 00B0           ;         
 00B0           ;               CANPAGE = (1 << 4);                                             // CHNB=0x00; select channel 1    
 00B0           ; // Channel 1 configuration 
 00B0           ;               CANCDMOB = 0x00;                                                // reset channel 1 configuration
 00B0           ;               for (i = 0 ; i < 8 ; i++) 
 00B0           ;                       CANMSG = i;                                                     // load saved data 
 00B0           ;               CANCDMOB |= 0x08;                                               //      DLC_MAX; /* transmit 8 bytes 
 00B0           ;               CANCDMOB |= 0x40;                                               //      CH_TxENA; /* emission enabled 
 00B0           ;               CANEN2 |= (1 << 1);                                             // channel 1 enable 
 00B0           ;               CANSTMOB=0x00;                                                  // reset channel 1 status 
 00B0           ; 
 00B0           ;     
 00B0           ;       }   
 00B0           ;       CANPAGE = (0 << 4);                                             // CHNB=0x00; select channel 0 
 00B0           ;       CANCDMOB = 0x00;                                                        //      CH_DISABLE;  reset channel 0 configuration 
 00B0           ;       CANCDMOB |= 0x08;                                               //      DLC_MAX;  receive 8 bytes 
 00B0           ;       CANCDMOB |= 0x80;                                               //CH_RxENA;  reception enable 
 00B0           ;       CANEN2 |= (1 << 0);                                             // channel 0 enable 
 00B0           ;       CANSTMOB=0x00;                                                  // reset channel 0 status 
 00B0           ;       CANPAGE= save_canpage;                                  // restore saved context 
 00B0           ;       CANGIT = 0x00;                                                  // reset all flags    
 00B0           ; }   
 00B0           ; */

⌨️ 快捷键说明

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