?? can.s
字號(hào):
; RC_CANSI -> y+208
; CAN_REMOb -> y+180
; RCF -> R10,R11
; tempp -> R14,R15
; nn -> R14
; tt -> y+207
; msg -> y+0
; i -> R12
; nb_data -> R10
.even
_can_ReceiveData::
xcall push_lset
xcall push_gset5
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,22 ; offset = 211
.dbline -1
.dbline 219
; can_tx(tx_msg);
; }
; }
;
;
; /*******************************************************************
; CAN receive interrupt service routine (mailbox i)
; *******************************************************************/
; #pragma interrupt_handler can_ReceiveData:19
; void can_ReceiveData (void) //receive interrupt
; {Uchar RCFlag;
.dbline 221
; unsigned char nb_data;
; unsigned char temp = CANPAGE; //save CANPAGE
lds R2,237
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
std z+0,R2
.dbline 222
; unsigned char i,tt=0,CAN_REMOb[15],nn;
clr R0
movw R30,R28
subi R30,49 ; addi 207
sbci R31,255
std z+0,R0
.dbline 229
; unsigned int RC_CANSI,RCtemp1,RCtemp2,tempp,RCF;
; VCI_CAN_OBJ msg[15];
;
; //VCI_CAN_OBJ CanTkfrm;
;
;
; if(CANSTMOB & (1<<TXOK))
lds R24,238
andi R24,64
breq L62
.dbline 230
; {
.dbline 231
; CANSTMOB &= ~(1<<TXOK);
lds R24,238
andi R24,191
sts 238,R24
.dbline 232
; if(can_tx_count)
lds R2,_can_tx_count
tst R2
brne X4
xjmp L63
X4:
.dbline 233
; {
.dbline 234
; --can_tx_count;
mov R24,R2
subi R24,1
sts _can_tx_count,R24
.dbline 235
; can_tx(tx_msg_buff[can_sendingP]);
lds R2,_can_sendingP
ldi R24,12
mul R24,R2
movw R2,R0
ldi R24,<_tx_msg_buff
ldi R25,>_tx_msg_buff
add R2,R24
adc R3,R25
movw R24,R28
subi R24,61 ; offset = 195
sbci R25,255
ldi R16,12
ldi R17,0
st -y,R25
st -y,R24
st -y,R3
st -y,R2
xcall asgnblk
movw R16,R28
subi R16,61 ; offset = 195
sbci R17,255
xcall _can_tx
.dbline 236
; if(++can_sendingP==can_TX_BUFFER_SIZE) can_sendingP=0;
lds R24,_can_sendingP
subi R24,255 ; addi 1
mov R2,R24
sts _can_sendingP,R2
cpi R24,8
breq X5
xjmp L63
X5:
.dbline 236
clr R2
sts _can_sendingP,R2
.dbline 237
; }
.dbline 238
; }
xjmp L63
L62:
.dbline 240
; else
; {
.dbline 241
; RCtemp2=CANSIT2;
lds R10,224
clr R11
.dbline 242
; RCtemp1=CANSIT1;
lds R12,225
clr R13
.dbline 243
; CANSTMOB &= ~(1<<RXOK);
lds R24,238
andi R24,223
sts 238,R24
.dbline 244
; RC_CANSI=(RCtemp1<<8)|RCtemp2;
movw R2,R12
mov R3,R2
clr R2
or R2,R10
or R3,R11
movw R30,R28
subi R30,48 ; addi 208
sbci R31,255
std z+1,R3
std z+0,R2
.dbline 245
; for(i=0;i<15;i++)
clr R12
xjmp L71
L68:
.dbline 246
; {
.dbline 247
; tempp=(1<<i);
mov R18,R12
clr R19
ldi R16,1
ldi R17,0
xcall lsl16
movw R14,R16
.dbline 248
; RCF=(RC_CANSI&tempp);
movw R30,R28
subi R30,48 ; addi 208
sbci R31,255
ldd R10,z+0
ldd R11,z+1
and R10,R16
and R11,R17
.dbline 249
; if(RCF!=0)
tst R10
brne X3
tst R11
breq L72
X3:
.dbline 250
; {
.dbline 251
; if(i==10)
mov R24,R12
cpi R24,10
brne L74
.dbline 252
; NOP();
nop
L74:
.dbline 253
; CAN_REMOb[tt]=i;
movw R24,R28
subi R24,76 ; offset = 180
sbci R25,255
movw R26,R28
subi R26,49 ; addi 207
sbci R27,255
ld R30,x
clr R31
add R30,R24
adc R31,R25
std z+0,R12
.dbline 254
; tt++;
movw R30,R28
subi R30,49 ; addi 207
sbci R31,255
ldd R0,z+0
inc R0
movw R30,R28
subi R30,49 ; addi 207
sbci R31,255
std z+0,R0
.dbline 255
; }
L72:
.dbline 256
L69:
.dbline 245
inc R12
L71:
.dbline 245
mov R24,R12
cpi R24,15
brlo L68
.dbline 275
; }
;
; /* for(i=0;i<tt;i++)
; {
; CANPAGE = (CAN_REMOb[i]<<4);
; CANSTMOB &= ~(1<<RXOK);
; for (nb_data = 0; nb_data <(CANCDMOB&DLC_MSK); nb_data++)
; {
; msg[i].Data[nb_data]=CANMSG;
; }
; msg[i].ID = 0;
; msg[i].ID |= ((unsigned long) CANIDT1<<24); //get identifier
; msg[i].ID |= ((unsigned long) CANIDT2<<16);
; msg[i].ID |= ((unsigned long) CANIDT3<<8);
; msg[i].ID |= (CANIDT4&0xF8);
; msg[i].ID >>= 3;
; CANCDMOB = (2<<CONMOB) | (1<<IDE);
; }*/
;
; for(i=0;i<tt;i++)
clr R12
xjmp L79
L76:
.dbline 276
; {
.dbline 277
; CANPAGE = (CAN_REMOb[i]<<4);
movw R24,R28
subi R24,76 ; offset = 180
sbci R25,255
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
andi R24,#0x0F
swap R24
sts 237,R24
.dbline 278
; CANSTMOB &= ~(1<<RXOK);
lds R24,238
andi R24,223
sts 238,R24
.dbline 279
; for (nb_data = 0; nb_data <(CANCDMOB&DLC_MSK); nb_data++)
clr R10
xjmp L83
L80:
.dbline 280
.dbline 281
ldi R24,12
mul R24,R12
movw R2,R0
movw R24,R28
adiw R24,4
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lds R2,250
std z+0,R2
.dbline 282
L81:
.dbline 279
inc R10
L83:
.dbline 279
lds R24,239
andi R24,15
cp R10,R24
brlo L80
.dbline 283
ldi R24,12
mul R24,R12
movw R30,R0
movw R24,R28
add R30,R24
adc R31,R25
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 284
ldi R24,12
mul R24,R12
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
ldi R24,24
ldi R25,0
lds R16,243
clr R17
clr R18
clr R19
st -y,R24
xcall lsl32
movw R30,R2
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
or R4,R16
or R5,R17
or R6,R18
or R7,R19
std z+0,R4
std z+1,R5
std z+2,R6
std z+3,R7
.dbline 285
ldi R24,12
mul R24,R12
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
lds R4,242
clr R5
clr R6
clr R7
movw R6,R4
clr R4
clr R5
movw R30,R2
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
or R20,R4
or R21,R5
or R22,R6
or R23,R7
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 286
ldi R24,12
mul R24,R12
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
ldi R24,8
ldi R25,0
lds R16,241
clr R17
clr R18
clr R19
st -y,R24
xcall lsl32
movw R30,R2
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
or R4,R16
or R5,R17
or R6,R18
or R7,R19
std z+0,R4
std z+1,R5
std z+2,R6
std z+3,R7
.dbline 287
ldi R24,12
mul R24,R12
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
lds R24,240
clr R25
andi R24,248
andi R25,0
movw R4,R24
clr R6
sbrc R5,7
com R6
clr R7
sbrc R6,7
com R7
movw R30,R2
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
or R20,R4
or R21,R5
or R22,R6
or R23,R7
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 288
ldi R24,12
mul R24,R12
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
ldi R24,3
ldi R25,0
movw R30,R2
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
st -y,R24
xcall asr32
movw R30,R2
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 289
ldi R24,144
sts 239,R24
.dbline 290
L77:
.dbline 275
inc R12
L79:
.dbline 275
movw R30,R28
subi R30,49 ; addi 207
sbci R31,255
ldd R0,z+0
cp R12,R0
brsh X6
xjmp L76
X6:
.dbline 292
; {
; msg[i].Data[nb_data]=CANMSG;
; }
; msg[i].ID = 0;
; msg[i].ID |= ((unsigned long) CANIDT1<<24); //get identifier
; msg[i].ID |= ((unsigned long) CANIDT2<<16);
; msg[i].ID |= ((unsigned long) CANIDT3<<8);
; msg[i].ID |= (CANIDT4&0xF8);
; msg[i].ID >>= 3;
; CANCDMOB = (2<<CONMOB) | (1<<IDE);
; }
;
; for(nn=0;nn<tt;nn++)
clr R14
xjmp L88
L85:
.dbline 293
.dbline 299
L86:
.dbline 292
inc R14
L88:
.dbline 292
movw R30,R28
subi R30,49 ; addi 207
sbci R31,255
ldd R0,z+0
cp R14,R0
brlo L85
.dbline 300
; {
; /*****************************************************
; * 用戶程序
; * 舉例: msg[nn].ID 是ID 號(hào)
; msg[nn].date[0]~msg[nn].date[8] 是數(shù)據(jù)
; ********************************************************/
; }
; }
L63:
.dbline 301
; CANPAGE = temp; //restore CANPAGE
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
ldd R0,z+0
sts 237,R0
.dbline -2
L61:
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,22 ; offset = 211
xcall pop_gset5
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym l RCFlag 1 c
.dbsym r RCtemp2 10 i
.dbsym r RCtemp1 12 i
.dbsym l temp 210 c
.dbsym l RC_CANSI 208 i
.dbsym l CAN_REMOb 180 A[15:15]c
.dbsym r RCF 10 i
.dbsym r tempp 14 i
.dbsym r nn 14 c
.dbsym l tt 207 c
.dbsym l msg 0 A[180:15]S[_VCI_CAN_OBJ]
.dbsym r i 12 c
.dbsym r nb_data 10 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\測(cè)量模塊\16MCan\can.c
_can_tx_count::
.blkb 1
.dbsym e can_tx_count _can_tx_count c
_can_willsendP::
.blkb 1
.dbsym e can_willsendP _can_willsendP c
_can_sendingP::
.blkb 1
.dbsym e can_sendingP _can_sendingP c
_tx_msg_buff::
.blkb 96
.dbsym e tx_msg_buff _tx_msg_buff A[96:8]S[_VCI_CAN_OBJ]
_counterTemp::
.blkb 1
.dbsym e counterTemp _counterTemp c
_canbaud::
.blkb 1
.dbsym e canbaud _canbaud c
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -