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

📄 can.lis

📁 LED显示面板
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0382 80E0              ldi R24,<_CANIDM+1
 0384 90E0              ldi R25,>_CANIDM+1
 0386 E80F              add R30,R24
 0388 F91F              adc R31,R25
 038A 2080              ldd R2,z+0
 038C E6EF              ldi R30,246
 038E F0E0              ldi R31,0
 0390 2082              std z+0,R2
 0392                   .dbline 148
 0392 84E0              ldi R24,4
 0394 849F              mul R24,R20
 0396 F001              movw R30,R0
 0398 80E0              ldi R24,<_CANIDM+2
 039A 90E0              ldi R25,>_CANIDM+2
 039C E80F              add R30,R24
 039E F91F              adc R31,R25
 03A0 2080              ldd R2,z+0
 03A2 E5EF              ldi R30,245
 03A4 F0E0              ldi R31,0
 03A6 2082              std z+0,R2
 03A8                   .dbline 149
 03A8 84E0              ldi R24,4
 03AA 849F              mul R24,R20
 03AC F001              movw R30,R0
 03AE 80E0              ldi R24,<_CANIDM+3
 03B0 90E0              ldi R25,>_CANIDM+3
 03B2 E80F              add R30,R24
 03B4 F91F              adc R31,R25
 03B6 2080              ldd R2,z+0
 03B8 E4EF              ldi R30,244
 03BA F0E0              ldi R31,0
 03BC 2082              std z+0,R2
 03BE                   .dbline 150
 03BE 88E1              ldi R24,24
 03C0 EFEE              ldi R30,239
 03C2 8083              std z+0,R24
 03C4                   .dbline 151
 03C4 0000              nop
 03C6                   .dbline 152
 03C6 80910000          lds R24,_Pass_Flag
 03CA 8F5F              subi R24,255    ; addi 1
 03CC 80930000          sts _Pass_Flag,R24
 03D0                   .dbline 153
 03D0           L50:
 03D0                   .dbline 139
 03D0 4395              inc R20
 03D2           L52:
 03D2                   .dbline 139
 03D2 4630              cpi R20,6
 03D4 08F4              brsh X4
 03D6 95CF              xjmp L49
 03D8           X4:
 03D8                   .dbline 154
 03D8           ;       {
 03D8           ;        CANPAGE = (i<<4);                   //MOb3,4,5设置为发送模式
 03D8           ;      CANIDT1 = CANIDT[i][0];                  //初始化 ID
 03D8           ;      CANIDT2 = CANIDT[i][1];
 03D8           ;      CANIDT3 = CANIDT[i][2];
 03D8           ;      CANIDT4 = CANIDT[i][3];
 03D8           ;      CANIDM1 = CANIDM[i][0];                  //初始化 mask
 03D8           ;      CANIDM2 = CANIDM[i][1];
 03D8           ;      CANIDM3 = CANIDM[i][2];
 03D8           ;      CANIDM4 = CANIDM[i][3];               //0 = ignore bit
 03D8           ;      CANCDMOB = (1<<IDE)|(8<<DLC0);    
 03D8           ;        NOP();
 03D8           ;         Pass_Flag = Pass_Flag + 1;            
 03D8           ;       }
 03D8           ;          if(Pass_Flag!=0x03)
 03D8 80910000          lds R24,_Pass_Flag
 03DC 8330              cpi R24,3
 03DE 11F0              breq L59
 03E0                   .dbline 155
 03E0           ;           RESET;
 03E0 0C940000          jmp 0x000
 03E4           L59:
 03E4                   .dbline 157
 03E4           ;               
 03E4           ;       CANGCON = (1<<ENASTB);                //start CAN interface, enable mod
 03E4 82E0              ldi R24,2
 03E6 E8ED              ldi R30,216
 03E8 F0E0              ldi R31,0
 03EA 8083              std z+0,R24
 03EC                   .dbline 159
 03EC           ;       
 03EC           ;       CANGIE = (1<<ENIT)| (1<<ENRX)|(1<<ENTX);    //enable receive interrupt and transmitte interrupt 
 03EC 80EB              ldi R24,176
 03EE EBED              ldi R30,219
 03F0 8083              std z+0,R24
 03F2                   .dbline 160
 03F2           ;       CANIE1 = 0x00;                  
 03F2 2224              clr R2
 03F4 EFED              ldi R30,223
 03F6 2082              std z+0,R2
 03F8                   .dbline 161
 03F8           ;       CANIE2 = 0x3f;                              //enable ALL MObs interrupt
 03F8 8FE3              ldi R24,63
 03FA EEED              ldi R30,222
 03FC 8083              std z+0,R24
 03FE                   .dbline 163
 03FE           ;     
 03FE           ;        WDR();
 03FE A895              wdr
 0400           L61:
 0400                   .dbline 164
 0400           L62:
 0400                   .dbline 164
 0400           ;     while (!(CANGSTA & (1<<ENFG)));         //wait until module ready
 0400 E9ED              ldi R30,217
 0402 F0E0              ldi R31,0
 0404 2080              ldd R2,z+0
 0406 22FE              sbrs R2,2
 0408 FBCF              rjmp L61
 040A                   .dbline 166
 040A           ;       
 040A           ;     CANGCON |= (1<<ENA);      //enable CAN controller
 040A 8091D800          lds R24,216
 040E 8260              ori R24,2
 0410 8093D800          sts 216,R24
 0414                   .dbline 168
 0414           ;       
 0414           ;       SEI();
 0414 7894              sei
 0416                   .dbline -2
 0416           L3:
 0416 2496              adiw R28,4
 0418 0E940000          xcall pop_gset3
 041C                   .dbline 0 ; func end
 041C 0895              ret
 041E                   .dbsym r temp2 10 i
 041E                   .dbsym r temp1 22 i
 041E                   .dbsym l temp 0 l
 041E                   .dbsym r j 22 c
 041E                   .dbsym r i 20 c
 041E                   .dbend
 041E                   .dbfunc e can_tx _can_tx fV
 041E                   .dbstruct 0 12 _VCI_CAN_OBJ
 041E                   .dbfield 0 ID L
 041E                   .dbfield 4 Data A[8:8]c
 041E                   .dbend
 041E           ;        temp_id -> y+0
 041E           ;          index -> R14
 041E           ;      pass_Flag -> R12
 041E           ;              i -> R12
 041E           ;            msg -> R10,R11
                        .even
 041E           _can_tx::
 041E 0E940000          xcall push_gset5
 0422 5801              movw R10,R16
 0424 2497              sbiw R28,4
 0426                   .dbline -1
 0426                   .dbline 177
 0426           ; }
 0426           ; 
 0426           ; 
 0426           ; 
 0426           ; /*******************************************************************
 0426           ; CAN transmission via mailbox 1 (polling)
 0426           ; *******************************************************************/
 0426           ; void can_tx (VCI_CAN_OBJ msg)
 0426           ; {
 0426                   .dbline 181
 0426           ;     unsigned char i,index,pass_Flag;
 0426           ;       long temp_id;
 0426           ;       
 0426           ;       pass_Flag = 0x01;
 0426 CC24              clr R12
 0428 C394              inc R12
 042A                   .dbline 182
 042A           ;       pass_Flag <<= 1;
 042A CC0C              lsl R12
 042C                   .dbline 183
 042C           ;       msg.ID <<= 3;    
 042C 83E0              ldi R24,3
 042E 90E0              ldi R25,0
 0430 F501              movw R30,R10
 0432 0081              ldd R16,z+0
 0434 1181              ldd R17,z+1
 0436 2281              ldd R18,z+2
 0438 3381              ldd R19,z+3
 043A 8A93              st -y,R24
 043C 0E940000          xcall lsl32
 0440 F501              movw R30,R10
 0442 0083              std z+0,R16
 0444 1183              std z+1,R17
 0446 2283              std z+2,R18
 0448 3383              std z+3,R19
 044A                   .dbline 184
 044A           ;       temp_id = msg.ID&0x0f000000 ;
 044A 40E0              ldi R20,0
 044C 50E0              ldi R21,0
 044E 60E0              ldi R22,0
 0450 7FE0              ldi R23,15
 0452 2080              ldd R2,z+0
 0454 3180              ldd R3,z+1
 0456 4280              ldd R4,z+2
 0458 5380              ldd R5,z+3
 045A 2422              and R2,R20
 045C 3522              and R3,R21
 045E 4622              and R4,R22
 0460 5722              and R5,R23
 0462 2882              std y+0,R2
 0464 3982              std y+1,R3
 0466 4A82              std y+2,R4
 0468 5B82              std y+3,R5
 046A                   .dbline 185
 046A           ;       index =( unsigned char )(temp_id>>24);
 046A 88E1              ldi R24,24
 046C 90E0              ldi R25,0
 046E 0881              ldd R16,y+0
 0470 1981              ldd R17,y+1
 0472 2A81              ldd R18,y+2
 0474 3B81              ldd R19,y+3
 0476 8A93              st -y,R24
 0478 0E940000          xcall asr32
 047C E02E              mov R14,R16
 047E                   .dbline 186
 047E           ;       index = index + 3;
 047E 8E2D              mov R24,R14
 0480 8D5F              subi R24,253    ; addi 3
 0482 E82E              mov R14,R24
 0484                   .dbline 187
 0484           ;     CANPAGE = (index<<4);
 0484 8F70              andi R24,#0x0F
 0486 8295              swap R24
 0488 EDEE              ldi R30,237
 048A F0E0              ldi R31,0
 048C 8083              std z+0,R24
 048E                   .dbline 188
 048E           ;     CANCDMOB = (1<<IDE) |(8<<DLC0);   
 048E 88E1              ldi R24,24
 0490 EFEE              ldi R30,239
 0492 8083              std z+0,R24
 0494                   .dbline 189
 0494           ;       pass_Flag <<= 1;                                               
 0494 CC0C              lsl R12
 0496                   .dbline 190
 0496           ;     CANIDT4 = (unsigned char) (msg.ID&0xF8);
 0496 48EF              ldi R20,248
 0498 50E0              ldi R21,0
 049A 60E0              ldi R22,0
 049C 70E0              ldi R23,0
 049E F501              movw R30,R10
 04A0 2080              ldd R2,z+0
 04A2 3180              ldd R3,z+1
 04A4 4280              ldd R4,z+2
 04A6 5380              ldd R5,z+3
 04A8 2422              and R2,R20
 04AA 3522              and R3,R21
 04AC 4622              and R4,R22
 04AE 5722              and R5,R23
 04B0 E0EF              ldi R30,240
 04B2 F0E0              ldi R31,0
 04B4 2082              std z+0,R2
 04B6                   .dbline 191
 04B6           ;     CANIDT3 = (unsigned char) (msg.ID>>8);
 04B6 88E0              ldi R24,8
 04B8 90E0              ldi R25,0
 04BA F501              movw R30,R10
 04BC 0081              ldd R16,z+0
 04BE 1181              ldd R17,z+1
 04C0 2281              ldd R18,z+2
 04C2 3381              ldd R19,z+3
 04C4 8A93              st -y,R24
 04C6 0E940000          xcall asr32
 04CA E1EF              ldi R30,241
 04CC F0E0              ldi R31,0
 04CE 0083              std z+0,R16
 04D0                   .dbline 192
 04D0           ;     CANIDT2 = (unsigned char) (msg.ID>>16);
 04D0 F501              movw R30,R10
 04D2 2080              ldd R2,z+0
 04D4 3180              ldd R3,z+1
 04D6 4280              ldd R4,z+2
 04D8 5380              ldd R5,z+3
 04DA 1201              movw R2,R4
 04DC E2EF              ldi R30,242
 04DE F0E0              ldi R31,0
 04E0 2082              std z+0,R2
 04E2                   .dbline 193
 04E2           ;       pass_Flag <<= 1;
 04E2 CC0C              lsl R12
 04E4                   .dbline 194
 04E4           ;     CANIDT1 = (unsigned char) (msg.ID>>24);
 04E4 88E1              ldi R24,24
 04E6 90E0              ldi R25,0
 04E8 F501              movw R30,R10
 04EA 0081              ldd R16,z+0
 04EC 1181              ldd R17,z+1
 04EE 2281              ldd R18,z+2
 04F0 3381              ldd R19,z+3
 04F2 8A93              st -y,R24
 04F4 0E940000          xcall asr32
 04F8 E3EF              ldi R30,243
 04FA F0E0              ldi R31,0
 04FC 0083              std z+0,R16
 04FE                   .dbline 195
 04FE           ;       if(pass_Flag!=0x08)
 04FE 8C2D              mov R24,R12
 0500 8830              cpi R24,8
 0502 11F0              breq L65
 0504                   .dbline 196
 0504           ;         RESET;
 0504 0C940000          jmp 0x000
 0508           L65:
 0508                   .dbline 197
 0508           ;     for(i=0;i<8;i++)                               
 0508 CC24              clr R12
 050A 0BC0              xjmp L70

⌨️ 快捷键说明

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