?? can.lis
字號:
038C 90E0 ldi R25,0
038E 2090F000 lds R2,_CAN_tx_OverFlow
0392 3090F100 lds R3,_CAN_tx_OverFlow+1
0396 8215 cp R24,R2
0398 9305 cpc R25,R3
039A 90F0 brlo L52
039C .dbline 187
039C ; {
039C .dbline 188
039C ; can_tx_count = 0;
039C 2224 clr R2
039E 20920000 sts _can_tx_count,R2
03A2 .dbline 189
03A2 ; can_sendingP = can_willsendP;
03A2 20900100 lds R2,_can_willsendP
03A6 20920200 sts _can_sendingP,R2
03AA .dbline 190
03AA ; CANSTMOB &= ~(1<<TXOK);
03AA 8091EE00 lds R24,238
03AE 8F7B andi R24,191
03B0 8093EE00 sts 238,R24
03B4 .dbline 191
03B4 ; CAN_tx_OverFlow = 60000;
03B4 80E6 ldi R24,60000
03B6 9AEE ldi R25,234
03B8 9093F100 sts _CAN_tx_OverFlow+1,R25
03BC 8093F000 sts _CAN_tx_OverFlow,R24
03C0 .dbline 192
03C0 ; }
03C0 L52:
03C0 .dbline 193
03C0 L50:
03C0 .dbline 183
03C0 80910000 lds R24,_can_tx_count
03C4 8830 cpi R24,8
03C6 C1F2 breq L49
03C8 .dbline 194
03C8 ; }
03C8 ; if(can_tx_count || (CANGSTA & (1<<TXBSY)))
03C8 8823 tst R24
03CA 21F4 brne L56
03CC 8091D900 lds R24,217
03D0 8071 andi R24,16
03D2 11F1 breq L54
03D4 L56:
03D4 .dbline 195
03D4 ; {
03D4 .dbline 196
03D4 ; tx_msg_buff[can_willsendP] = tx_msg;
03D4 20900100 lds R2,_can_willsendP
03D8 8CE0 ldi R24,12
03DA 829D mul R24,R2
03DC 1001 movw R2,R0
03DE 80E0 ldi R24,<_tx_msg_buff
03E0 90E0 ldi R25,>_tx_msg_buff
03E2 280E add R2,R24
03E4 391E adc R3,R25
03E6 0CE0 ldi R16,12
03E8 10E0 ldi R17,0
03EA 3A92 st -y,R3
03EC 2A92 st -y,R2
03EE 5A93 st -y,R21
03F0 4A93 st -y,R20
03F2 0E940000 xcall asgnblk
03F6 .dbline 197
03F6 ; if(++can_willsendP == can_TX_BUFFER_SIZE)
03F6 80910100 lds R24,_can_willsendP
03FA 8F5F subi R24,255 ; addi 1
03FC 282E mov R2,R24
03FE 20920100 sts _can_willsendP,R2
0402 8830 cpi R24,8
0404 19F4 brne L57
0406 .dbline 198
0406 ; can_willsendP = 0;
0406 2224 clr R2
0408 20920100 sts _can_willsendP,R2
040C L57:
040C .dbline 199
040C ; ++can_tx_count;
040C 80910000 lds R24,_can_tx_count
0410 8F5F subi R24,255 ; addi 1
0412 80930000 sts _can_tx_count,R24
0416 .dbline 200
0416 ; }
0416 17C0 xjmp L55
0418 L54:
0418 .dbline 202
0418 ; else
0418 ; {
0418 .dbline 203
0418 ; if(can_willsendP != can_sendingP)
0418 20900200 lds R2,_can_sendingP
041C 30900100 lds R3,_can_willsendP
0420 3214 cp R3,R2
0422 31F0 breq L59
0424 .dbline 204
0424 ; {
0424 .dbline 205
0424 ; NOP();
0424 0000 nop
0426 .dbline 206
0426 ; can_willsendP=0;
0426 2224 clr R2
0428 20920100 sts _can_willsendP,R2
042C .dbline 207
042C ; can_sendingP=0;
042C 20920200 sts _can_sendingP,R2
0430 .dbline 208
0430 ; }
0430 L59:
0430 .dbline 209
0430 CE01 movw R24,R28
0432 0CE0 ldi R16,12
0434 10E0 ldi R17,0
0436 9A93 st -y,R25
0438 8A93 st -y,R24
043A 5A93 st -y,R21
043C 4A93 st -y,R20
043E 0E940000 xcall asgnblk
0442 8E01 movw R16,R28
0444 37DF xcall _can_tx
0446 .dbline 210
0446 L55:
0446 .dbline -2
0446 L48:
0446 2C96 adiw R28,12
0448 0E940000 xcall pop_gset1
044C .dbline 0 ; func end
044C 0895 ret
044E .dbsym r tx_msg 20 pS[_VCI_CAN_OBJ]
044E .dbend
.area vector(rom, abs)
.org 72
0048 0C942702 jmp _can_ReceiveData
.area text(rom, con, rel)
044E .dbfile F:\測量模塊\16MCan\can.c
044E .dbfunc e can_ReceiveData _can_ReceiveData fV
044E ; RCFlag -> <dead>
044E ; RCtemp2 -> R10,R11
044E ; RCtemp1 -> R12,R13
044E ; temp -> y+210
044E ; RC_CANSI -> y+208
044E ; CAN_REMOb -> y+180
044E ; RCF -> R10,R11
044E ; tempp -> R14,R15
044E ; nn -> R14
044E ; tt -> y+207
044E ; msg -> y+0
044E ; i -> R12
044E ; nb_data -> R10
.even
044E _can_ReceiveData::
044E 0E940000 xcall push_lset
0452 0E940000 xcall push_gset5
0456 EF97 sbiw R28,63
0458 EF97 sbiw R28,63
045A EF97 sbiw R28,63
045C 6697 sbiw R28,22 ; offset = 211
045E .dbline -1
045E .dbline 219
045E ; can_tx(tx_msg);
045E ; }
045E ; }
045E ;
045E ;
045E ; /*******************************************************************
045E ; CAN receive interrupt service routine (mailbox i)
045E ; *******************************************************************/
045E ; #pragma interrupt_handler can_ReceiveData:19
045E ; void can_ReceiveData (void) //receive interrupt
045E ; {Uchar RCFlag;
045E .dbline 221
045E ; unsigned char nb_data;
045E ; unsigned char temp = CANPAGE; //save CANPAGE
045E 2090ED00 lds R2,237
0462 FE01 movw R30,R28
0464 EE52 subi R30,46 ; addi 210
0466 FF4F sbci R31,255
0468 2082 std z+0,R2
046A .dbline 222
046A ; unsigned char i,tt=0,CAN_REMOb[15],nn;
046A 0024 clr R0
046C FE01 movw R30,R28
046E E153 subi R30,49 ; addi 207
0470 FF4F sbci R31,255
0472 0082 std z+0,R0
0474 .dbline 229
0474 ; unsigned int RC_CANSI,RCtemp1,RCtemp2,tempp,RCF;
0474 ; VCI_CAN_OBJ msg[15];
0474 ;
0474 ; //VCI_CAN_OBJ CanTkfrm;
0474 ;
0474 ;
0474 ; if(CANSTMOB & (1<<TXOK))
0474 8091EE00 lds R24,238
0478 8074 andi R24,64
047A 99F1 breq L62
047C .dbline 230
047C ; {
047C .dbline 231
047C ; CANSTMOB &= ~(1<<TXOK);
047C 8091EE00 lds R24,238
0480 8F7B andi R24,191
0482 8093EE00 sts 238,R24
0486 .dbline 232
0486 ; if(can_tx_count)
0486 20900000 lds R2,_can_tx_count
048A 2220 tst R2
048C 09F4 brne X4
048E 42C1 xjmp L63
0490 X4:
0490 .dbline 233
0490 ; {
0490 .dbline 234
0490 ; --can_tx_count;
0490 822D mov R24,R2
0492 8150 subi R24,1
0494 80930000 sts _can_tx_count,R24
0498 .dbline 235
0498 ; can_tx(tx_msg_buff[can_sendingP]);
0498 20900200 lds R2,_can_sendingP
049C 8CE0 ldi R24,12
049E 829D mul R24,R2
04A0 1001 movw R2,R0
04A2 80E0 ldi R24,<_tx_msg_buff
04A4 90E0 ldi R25,>_tx_msg_buff
04A6 280E add R2,R24
04A8 391E adc R3,R25
04AA CE01 movw R24,R28
04AC 8D53 subi R24,61 ; offset = 195
04AE 9F4F sbci R25,255
04B0 0CE0 ldi R16,12
04B2 10E0 ldi R17,0
04B4 9A93 st -y,R25
04B6 8A93 st -y,R24
04B8 3A92 st -y,R3
04BA 2A92 st -y,R2
04BC 0E940000 xcall asgnblk
04C0 8E01 movw R16,R28
04C2 0D53 subi R16,61 ; offset = 195
04C4 1F4F sbci R17,255
04C6 F6DE xcall _can_tx
04C8 .dbline 236
04C8 ; if(++can_sendingP==can_TX_BUFFER_SIZE) can_sendingP=0;
04C8 80910200 lds R24,_can_sendingP
04CC 8F5F subi R24,255 ; addi 1
04CE 282E mov R2,R24
04D0 20920200 sts _can_sendingP,R2
04D4 8830 cpi R24,8
04D6 09F0 breq X5
04D8 1DC1 xjmp L63
04DA X5:
04DA .dbline 236
04DA 2224 clr R2
04DC 20920200 sts _can_sendingP,R2
04E0 .dbline 237
04E0 ; }
04E0 .dbline 238
04E0 ; }
04E0 19C1 xjmp L63
04E2 L62:
04E2 .dbline 240
04E2 ; else
04E2 ; {
04E2 .dbline 241
04E2 ; RCtemp2=CANSIT2;
04E2 A090E000 lds R10,224
04E6 BB24 clr R11
04E8 .dbline 242
04E8 ; RCtemp1=CANSIT1;
04E8 C090E100 lds R12,225
04EC DD24 clr R13
04EE .dbline 243
04EE ; CANSTMOB &= ~(1<<RXOK);
04EE 8091EE00 lds R24,238
04F2 8F7D andi R24,223
04F4 8093EE00 sts 238,R24
04F8 .dbline 244
04F8 ; RC_CANSI=(RCtemp1<<8)|RCtemp2;
04F8 1601 movw R2,R12
04FA 322C mov R3,R2
04FC 2224 clr R2
04FE 2A28 or R2,R10
0500 3B28 or R3,R11
0502 FE01 movw R30,R28
0504 E053 subi R30,48 ; addi 208
0506 FF4F sbci R31,255
0508 3182 std z+1,R3
050A 2082 std z+0,R2
050C .dbline 245
050C ; for(i=0;i<15;i++)
050C CC24 clr R12
050E 2BC0 xjmp L71
0510 L68:
0510 .dbline 246
0510 ; {
0510 .dbline 247
0510 ; tempp=(1<<i);
0510 2C2D mov R18,R12
0512 3327 clr R19
0514 01E0 ldi R16,1
0516 10E0 ldi R17,0
0518 0E940000 xcall lsl16
051C 7801 movw R14,R16
051E .dbline 248
051E ; RCF=(RC_CANSI&tempp);
051E FE01 movw R30,R28
0520 E053 subi R30,48 ; addi 208
0522 FF4F sbci R31,255
0524 A080 ldd R10,z+0
0526 B180 ldd R11,z+1
0528 A022 and R10,R16
052A B122 and R11,R17
052C .dbline 249
052C ; if(RCF!=0)
052C AA20 tst R10
052E 11F4 brne X3
0530 BB20 tst R11
0532 C1F0 breq L72
0534 X3:
0534 .dbline 250
0534 ; {
0534 .dbline 251
0534 ; if(i==10)
0534 8C2D mov R24,R12
0536 8A30 cpi R24,10
0538 09F4 brne L74
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -