📄 main.s
字号:
movw R2,R16
movw R4,R18
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _id4+1,R3
sts _id4,R2
sts _id4+2+1,R5
sts _id4+2,R4
.dbline 281
; id5 = BASE_ADDR/256+tempp*256+2;
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
ldi R20,2
ldi R21,40
ldi R22,0
ldi R23,0
movw R2,R16
movw R4,R18
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _id5+1,R3
sts _id5,R2
sts _id5+2+1,R5
sts _id5+2,R4
.dbline 282
; Pass_Flag <<= 1;
lds R2,_Pass_Flag
lsl R2
sts _Pass_Flag,R2
.dbline 283
; WDR();
wdr
.dbline 284
; CANMOBID[0] = id1;
lds R4,_id1+2
lds R5,_id1+2+1
lds R2,_id1
lds R3,_id1+1
sts _CANMOBID+1,R3
sts _CANMOBID,R2
sts _CANMOBID+2+1,R5
sts _CANMOBID+2,R4
.dbline 285
; CANMOBID[1] = id2;
lds R4,_id2+2
lds R5,_id2+2+1
lds R2,_id2
lds R3,_id2+1
sts _CANMOBID+4+1,R3
sts _CANMOBID+4,R2
sts _CANMOBID+4+2+1,R5
sts _CANMOBID+4+2,R4
.dbline 286
; CANMOBID[3] = id3;
lds R4,_id3+2
lds R5,_id3+2+1
lds R2,_id3
lds R3,_id3+1
sts _CANMOBID+12+1,R3
sts _CANMOBID+12,R2
sts _CANMOBID+12+2+1,R5
sts _CANMOBID+12+2,R4
.dbline 287
; CANMOBID[4] = id4;
lds R4,_id4+2
lds R5,_id4+2+1
lds R2,_id4
lds R3,_id4+1
sts _CANMOBID+16+1,R3
sts _CANMOBID+16,R2
sts _CANMOBID+16+2+1,R5
sts _CANMOBID+16+2,R4
.dbline 288
; CANMOBID[5] = id5;
lds R4,_id5+2
lds R5,_id5+2+1
lds R2,_id5
lds R3,_id5+1
sts _CANMOBID+20+1,R3
sts _CANMOBID+20,R2
sts _CANMOBID+20+2+1,R5
sts _CANMOBID+20+2,R4
.dbline 289
; if(Pass_Flag!=0x08)
lds R24,_Pass_Flag
cpi R24,8
breq L26
.dbline 290
; RESET;
jmp 0x00000
L26:
.dbline 291
; can_init ();
xcall _can_init
.dbline 292
; SEI();
sei
.dbline 293
; }
L20:
.dbline 295
;
; if(send_count>25) //连续25次发送失败则复位
ldi R24,25
lds R2,_send_count
cp R24,R2
brsh L28
.dbline 296
; RESET;
jmp 0x00000
L28:
.dbline 298
;
; if(Temp_Flag == 0x5a) //定时读去状态标志
lds R24,_Temp_Flag
cpi R24,90
breq X2
xjmp L30
X2:
.dbline 299
; {
.dbline 300
; CLI();
cli
.dbline 302
;
; WDR();
wdr
.dbline 303
; TIMSK0 = 0x00;
clr R2
sts 110,R2
.dbline 304
; if(LED)
.dbline 305
; {
.dbline 306
; PORTB &= 0X3F; //灭网络灯
in R24,0x5
andi R24,63
out 0x5,R24
.dbline 307
; }
xjmp L33
L32:
.dbline 310
; else
;
; PORTB |= 0Xc0;
in R24,0x5
ori R24,192
out 0x5,R24
L33:
.dbline 312
;
; DI_handle(); //读取开关状态
xcall _DI_handle
.dbline 314
;
; for(i=0;i<12;i++)
clr R10
xjmp L37
L34:
.dbline 315
; {
.dbline 316
; if(DI_data_pre[i] == DI_data_cur[i]) //去抖处理
ldi R24,<_DI_data_cur
ldi R25,>_DI_data_cur
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_DI_data_pre
ldi R25,>_DI_data_pre
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R3,z+0
cp R3,R2
brne L38
.dbline 317
; {
.dbline 318
; DI_data[i] = DI_data_cur[i];
ldi R24,<_DI_data_cur
ldi R25,>_DI_data_cur
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_DI_data
ldi R25,>_DI_data
mov R30,R10
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 319
; }
xjmp L39
L38:
.dbline 320
; else if (DI_data_pre[i] != DI_data_cur[i])
ldi R24,<_DI_data_cur
ldi R25,>_DI_data_cur
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_DI_data_pre
ldi R25,>_DI_data_pre
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R3,z+0
cp R3,R2
breq L40
.dbline 321
; {
.dbline 322
; DI_data[i] = DI_data_pre[i];
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_DI_data
ldi R25,>_DI_data
mov R30,R10
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 323
; }
L40:
L39:
.dbline 324
ldi R24,<_DI_data_cur
ldi R25,>_DI_data_cur
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_DI_data_pre
ldi R25,>_DI_data_pre
mov R30,R10
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 325
L35:
.dbline 314
inc R10
L37:
.dbline 314
mov R24,R10
cpi R24,12
brsh X3
xjmp L34
X3:
.dbline 326
; DI_data_pre[i] = DI_data_cur[i]; //新旧值更新
; }
; Temp_Flag = 0x00; //清除定时标志
clr R2
sts _Temp_Flag,R2
.dbline 328
;
; Time = 0;
sts _Time,R2
.dbline 330
;
; timer0_init();
xcall _timer0_init
.dbline 332
;
; TIMSK0 = 0x01; //timer interrupt sources
ldi R24,1
sts 110,R24
.dbline 334
;
; WDR();
wdr
.dbline 335
; SEI();
sei
.dbline 336
; }
L30:
.dbline 338
;
; if(Send_Flag == 0x5a)
lds R24,_Send_Flag
cpi R24,90
breq X4
xjmp L42
X4:
.dbline 339
; {
.dbline 340
; WDR();
wdr
.dbline 341
; msg[0].ID = id1; //前八个通道数据发送
lds R4,_id1+2
lds R5,_id1+2+1
lds R2,_id1
lds R3,_id1+1
sts _msg+1,R3
sts _msg,R2
sts _msg+2+1,R5
sts _msg+2,R4
.dbline 342
; for(i=0;i<8;i++)
clr R10
xjmp L47
L44:
.dbline 343
.dbline 344
ldi R24,<_DI_data
ldi R25,>_DI_data
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_msg+4
ldi R25,>_msg+4
mov R30,R10
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 345
L45:
.dbline 342
inc R10
L47:
.dbline 342
mov R24,R10
cpi R24,8
brlo L44
.dbline 346
; {
; msg[0].Data[i] = DI_data[i];
; }
; can_tx (msg[0]);
ldi R24,<_msg
ldi R25,>_msg
movw R30,R28
adiw R30,4
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgnblk
movw R16,R28
subi R16,252 ; offset = 4
sbci R17,255
xcall _can_tx
.dbline 347
; send_count++;
lds R24,_send_count
subi R24,255 ; addi 1
sts _send_count,R24
.dbline 348
; msg[1].ID = id2;
lds R4,_id2+2
lds R5,_id2+2+1
lds R2,_id2
lds R3,_id2+1
sts _msg+12+1,R3
sts _msg+12,R2
sts _msg+12+2+1,R5
sts _msg+12+2,R4
.dbline 349
; for(i=0;i<4;i++) //后四个通道数据发送
clr R10
xjmp L53
L50:
.dbline 350
.dbline 351
ldi R24,<_DI_data+8
ldi R25,>_DI_data+8
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_msg+12+4
ldi R25,>_msg+12+4
mov R30,R10
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 352
L51:
.dbline 349
inc R10
L53:
.dbline 349
mov R24,R10
cpi R24,4
brlo L50
.dbline 353
; {
; msg[1].Data[i] = DI_data[i+8];
; }
; for(i=4;i<8;i++)
ldi R24,4
mov R10,R24
xjmp L60
L57:
.dbline 354
.dbline 355
ldi R24,<_msg+12+4
ldi R25,>_msg+12+4
mov R30,R10
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 356
L58:
.dbline 353
inc R10
L60:
.dbline 353
mov R24,R10
cpi R24,8
brlo L57
.dbline 357
; {
; msg[1].Data[i]=0x00;
; }
; can_tx (msg[1]);
ldi R24,<_msg+12
ldi R25,>_msg+12
movw R30,R28
adiw R30,16
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgnblk
movw R16,R28
subi R16,240 ; offset = 16
sbci R17,255
xcall _can_tx
.dbline 358
; send_count++;
lds R24,_send_count
subi R24,255 ; addi 1
sts _send_count,R24
.dbline 359
; Send_Flag = 0x00;
clr R2
sts _Send_Flag,R2
.dbline 360
; WDR();
wdr
.dbline 361
; }
L42:
.dbline 363
L18:
.dbline 263
xjmp L17
X0:
.dbline -2
L6:
adiw R28,28
.dbline 0 ; func end
ret
.dbsym l tempp 0 L
.dbsym r i 10 c
.dbend
.area bss(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\开关量CAN网\main.c
_RUN::
.blkb 2
.dbsym e RUN _RUN i
_Time::
.blkb 1
.dbsym e Time _Time c
_Temp_Flag::
.blkb 1
.dbsym e Temp_Flag _Temp_Flag c
_Send_Flag::
.blkb 1
.dbsym e Send_Flag _Send_Flag c
_Pass_Flag::
.blkb 1
.dbsym e Pass_Flag _Pass_Flag c
_ID_net::
.blkb 1
.dbsym e ID_net _ID_net c
_ID_nu::
.blkb 1
.dbsym e ID_nu _ID_nu c
_id5::
.blkb 4
.dbsym e id5 _id5 L
_id4::
.blkb 4
.dbsym e id4 _id4 L
_id3::
.blkb 4
.dbsym e id3 _id3 L
_id2::
.blkb 4
.dbsym e id2 _id2 L
_id1::
.blkb 4
.dbsym e id1 _id1 L
_rece_data::
.blkb 36
.dbstruct 0 12 _VCI_CAN_OBJ
.dbfield 0 ID L
.dbfield 4 Data A[8:8]c
.dbend
.dbsym e rece_data _rece_data A[36:3]S[_VCI_CAN_OBJ]
_msg::
.blkb 24
.dbsym e msg _msg A[24:2]S[_VCI_CAN_OBJ]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -