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

📄 can.lis

📁 工业开关量检测模块的原代码,带断线检测功能
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03B4 0C940000          jmp 0x00000
 03B8           L58:
 03B8                   .dbline 154
 03B8           ;               
 03B8           ;       CANGCON = (1<<ENASTB);                //start CAN interface, enable mod
 03B8 82E0              ldi R24,2
 03BA 8093D800          sts 216,R24
 03BE                   .dbline 156
 03BE           ;       
 03BE           ;       CANGIE = (1<<ENIT)| (1<<ENRX)|(1<<ENTX);    //enable receive interrupt and transmitte interrupt 
 03BE 80EB              ldi R24,176
 03C0 8093DB00          sts 219,R24
 03C4                   .dbline 157
 03C4           ;       CANIE1 = 0x00;                  
 03C4 2224              clr R2
 03C6 2092DF00          sts 223,R2
 03CA                   .dbline 158
 03CA           ;       CANIE2 = 0x3f;                              //enable ALL MObs interrupt
 03CA 8FE3              ldi R24,63
 03CC 8093DE00          sts 222,R24
 03D0                   .dbline 160
 03D0           ;     
 03D0           ;        WDR();
 03D0 A895              wdr
 03D2           L60:
 03D2                   .dbline 161
 03D2           L61:
 03D2                   .dbline 161
 03D2           ;     while (!(CANGSTA & (1<<ENFG)));         //wait until module ready
 03D2 8091D900          lds R24,217
 03D6 8470              andi R24,4
 03D8 E1F3              breq L60
 03DA                   .dbline 163
 03DA           ;       
 03DA           ;     CANGCON |= (1<<ENA);      //enable CAN controller
 03DA 8091D800          lds R24,216
 03DE 8260              ori R24,2
 03E0 8093D800          sts 216,R24
 03E4                   .dbline 165
 03E4           ;       
 03E4           ;       SEI();
 03E4 7894              sei
 03E6                   .dbline -2
 03E6           L2:
 03E6 2496              adiw R28,4
 03E8 0E940000          xcall pop_gset3
 03EC                   .dbline 0 ; func end
 03EC 0895              ret
 03EE                   .dbsym r temp2 10 i
 03EE                   .dbsym r temp1 22 i
 03EE                   .dbsym l temp 0 l
 03EE                   .dbsym r j 22 c
 03EE                   .dbsym r i 20 c
 03EE                   .dbend
 03EE                   .dbfunc e can_tx _can_tx fV
 03EE                   .dbstruct 0 12 _VCI_CAN_OBJ
 03EE                   .dbfield 0 ID L
 03EE                   .dbfield 4 Data A[8:8]c
 03EE                   .dbend
 03EE           ;          index -> R14
 03EE           ;      pass_Flag -> R12
 03EE           ;              i -> R12
 03EE           ;            msg -> R10,R11
                        .even
 03EE           _can_tx::
 03EE 0E940000          xcall push_gset5
 03F2 5801              movw R10,R16
 03F4                   .dbline -1
 03F4                   .dbline 174
 03F4           ; }
 03F4           ; 
 03F4           ; 
 03F4           ; 
 03F4           ; /*******************************************************************
 03F4           ; CAN transmission via mailbox 1 (polling)
 03F4           ; *******************************************************************/
 03F4           ; void can_tx (VCI_CAN_OBJ msg)
 03F4           ; {
 03F4                   .dbline 176
 03F4           ;     unsigned char i,index,pass_Flag;
 03F4           ;       pass_Flag = 0x01;
 03F4 CC24              clr R12
 03F6 C394              inc R12
 03F8                   .dbline 177
 03F8           ;       CLI();
 03F8 F894              cli
 03FA                   .dbline 178
 03FA           ;       index =(unsigned char) (msg.ID%256);   
 03FA 40E0              ldi R20,0
 03FC 51E0              ldi R21,1
 03FE 60E0              ldi R22,0
 0400 70E0              ldi R23,0
 0402 F501              movw R30,R10
 0404 0081              ldd R16,z+0
 0406 1181              ldd R17,z+1
 0408 2281              ldd R18,z+2
 040A 3381              ldd R19,z+3
 040C 7A93              st -y,R23
 040E 6A93              st -y,R22
 0410 5A93              st -y,R21
 0412 4A93              st -y,R20
 0414 0E940000          xcall mod32s
 0418 E02E              mov R14,R16
 041A                   .dbline 179
 041A           ;       pass_Flag <<= 1;
 041A CC0C              lsl R12
 041C                   .dbline 180
 041C           ;       msg.ID <<= 3;     
 041C 83E0              ldi R24,3
 041E 90E0              ldi R25,0
 0420 F501              movw R30,R10
 0422 0081              ldd R16,z+0
 0424 1181              ldd R17,z+1
 0426 2281              ldd R18,z+2
 0428 3381              ldd R19,z+3
 042A 8A93              st -y,R24
 042C 0E940000          xcall lsl32
 0430 F501              movw R30,R10
 0432 0083              std z+0,R16
 0434 1183              std z+1,R17
 0436 2283              std z+2,R18
 0438 3383              std z+3,R19
 043A                   .dbline 181
 043A           ;     CANPAGE = (index<<4);
 043A 8E2D              mov R24,R14
 043C 8F70              andi R24,#0x0F
 043E 8295              swap R24
 0440 8093ED00          sts 237,R24
 0444                   .dbline 182
 0444           ;     CANCDMOB = (1<<IDE) |(8<<DLC0);   
 0444 88E1              ldi R24,24
 0446 8093EF00          sts 239,R24
 044A                   .dbline 183
 044A           ;       pass_Flag <<= 1;                                               
 044A CC0C              lsl R12
 044C                   .dbline 184
 044C           ;     CANIDT4 = (unsigned char) (msg.ID&0xF8);
 044C 48EF              ldi R20,248
 044E 50E0              ldi R21,0
 0450 60E0              ldi R22,0
 0452 70E0              ldi R23,0
 0454 2080              ldd R2,z+0
 0456 3180              ldd R3,z+1
 0458 4280              ldd R4,z+2
 045A 5380              ldd R5,z+3
 045C 2422              and R2,R20
 045E 3522              and R3,R21
 0460 4622              and R4,R22
 0462 5722              and R5,R23
 0464 2092F000          sts 240,R2
 0468                   .dbline 185
 0468           ;     CANIDT3 = (unsigned char) (msg.ID>>8);
 0468 88E0              ldi R24,8
 046A 90E0              ldi R25,0
 046C 8A93              st -y,R24
 046E 0E940000          xcall asr32
 0472 0093F100          sts 241,R16
 0476                   .dbline 186
 0476           ;     CANIDT2 = (unsigned char) (msg.ID>>16);
 0476 F501              movw R30,R10
 0478 2080              ldd R2,z+0
 047A 3180              ldd R3,z+1
 047C 4280              ldd R4,z+2
 047E 5380              ldd R5,z+3
 0480 1201              movw R2,R4
 0482 2092F200          sts 242,R2
 0486                   .dbline 187
 0486           ;       pass_Flag <<= 1;
 0486 CC0C              lsl R12
 0488                   .dbline 188
 0488           ;     CANIDT1 = (unsigned char) (msg.ID>>24);
 0488 88E1              ldi R24,24
 048A 90E0              ldi R25,0
 048C 0081              ldd R16,z+0
 048E 1181              ldd R17,z+1
 0490 2281              ldd R18,z+2
 0492 3381              ldd R19,z+3
 0494 8A93              st -y,R24
 0496 0E940000          xcall asr32
 049A 0093F300          sts 243,R16
 049E                   .dbline 189
 049E           ;       if(pass_Flag!=0x08)
 049E 8C2D              mov R24,R12
 04A0 8830              cpi R24,8
 04A2 11F0              breq L64
 04A4                   .dbline 190
 04A4           ;         RESET;
 04A4 0C940000          jmp 0x00000
 04A8           L64:
 04A8                   .dbline 191
 04A8           ;     for(i=0;i<8;i++)                               
 04A8 CC24              clr R12
 04AA 0AC0              xjmp L69
 04AC           L66:
 04AC                   .dbline 192
 04AC                   .dbline 194
 04AC C501              movw R24,R10
 04AE 0496              adiw R24,4
 04B0 EC2D              mov R30,R12
 04B2 FF27              clr R31
 04B4 E80F              add R30,R24
 04B6 F91F              adc R31,R25
 04B8 2080              ldd R2,z+0
 04BA 2092FA00          sts 250,R2
 04BE                   .dbline 195
 04BE           L67:
 04BE                   .dbline 191
 04BE C394              inc R12
 04C0           L69:
 04C0                   .dbline 191
 04C0 8C2D              mov R24,R12
 04C2 8830              cpi R24,8
 04C4 98F3              brlo L66
 04C6                   .dbline 196
 04C6           ;       {
 04C6           ;          
 04C6           ;        CANMSG = msg.Data[i];
 04C6           ;         }        
 04C6           ;     CANCDMOB |= (1<<CONMOB0);           //enable transmission
 04C6 8091EF00          lds R24,239
 04CA 8064              ori R24,64
 04CC 8093EF00          sts 239,R24
 04D0                   .dbline 197
 04D0           ;       SEI();
 04D0 7894              sei
 04D2                   .dbline -2
 04D2           L63:
 04D2 0E940000          xcall pop_gset5
 04D6                   .dbline 0 ; func end
 04D6 0895              ret
 04D8                   .dbsym r index 14 c
 04D8                   .dbsym r pass_Flag 12 c
 04D8                   .dbsym r i 12 c
 04D8                   .dbsym r msg 10 pS[_VCI_CAN_OBJ]
 04D8                   .dbend
                        .area vector(rom, abs)
                        .org 72
 0048 0C946C02          jmp _can_ReceiveData
                        .area text(rom, con, rel)
 04D8                   .dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\开关量CAN网\can.c
 04D8                   .dbfunc e can_ReceiveData _can_ReceiveData fV
 04D8           ;            msg -> y+0
 04D8           ;       RC_CANSI -> <dead>
 04D8           ;             nn -> <dead>
 04D8           ;       err_temp -> R10
 04D8           ;       sta_temp -> R14
 04D8           ;        RCtemp2 -> y+37
 04D8           ;            RCF -> R10,R11
 04D8           ;          tempp -> R12,R13
 04D8           ;        nb_data -> R14
 04D8           ;              i -> y+36
                        .even
 04D8           _can_ReceiveData::
 04D8 0A92              st -y,R0
 04DA 1A92              st -y,R1
 04DC 2A92              st -y,R2
 04DE 3A92              st -y,R3
 04E0 4A92              st -y,R4
 04E2 5A92              st -y,R5
 04E4 6A92              st -y,R6
 04E6 7A92              st -y,R7
 04E8 0A93              st -y,R16
 04EA 1A93              st -y,R17
 04EC 2A93              st -y,R18
 04EE 3A93              st -y,R19
 04F0 8A93              st -y,R24
 04F2 9A93              st -y,R25
 04F4 EA93              st -y,R30
 04F6 FA93              st -y,R31
 04F8 0FB6              in R0,0x3f
 04FA 0A92              st -y,R0
 04FC 0E940000          xcall push_gset5
 0500 A797              sbiw R28,39
 0502                   .dbline -1
 0502                   .dbline 203
 0502           ; }
 0502           ; 
 0502           ; 
 0502           ; #pragma interrupt_handler can_ReceiveData:19
 0502           ; void can_ReceiveData (void)             //receive interrupt 
 0502           ; {
 0502                   .dbline 209
 0502           ;       unsigned char nb_data;
 0502           ;       unsigned char i,nn,err_temp,sta_temp;
 0502           ;       unsigned int RC_CANSI,RCtemp2,tempp,RCF;
 0502           ;       VCI_CAN_OBJ msg[3];
 0502           ;       
 0502           ;       WDR();
 0502 A895              wdr
 0504                   .dbline 210
 0504           ;     CANGIE &= ~((1<<ENRX)|(1<<ENTX));                  //关接收中断
 0504 8091DB00          lds R24,219
 0508 8F7C              andi R24,207
 050A 8093DB00          sts 219,R24
 050E                   .dbline 211
 050E           ;       RCtemp2=CANSIT2;                       //读取中断信息
 050E 2090E000          lds R2,224
 0512 3324              clr R3
 0514 3EA2              std y+38,R3
 0516 2DA2              std y+37,R2
 0518                   .dbline 212
 0518           ;       err_temp = CANTEC;                     //读取发送错误计数器
 0518 A090EA00          lds R10,234
 051C                   .dbline 214
 051C           ;       
 051C           ;       if(err_temp>96)                       
 051C 80E6              ldi R24,96
 051E 8A15              cp R24,R10
 0520 10F4              brsh L71
 0522                   .dbline 215
 0522           ;       RESET;
 0522 0C940000          jmp 0x00000

⌨️ 快捷键说明

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