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

📄 main.s

📁 工业开关量检测模块的原代码,带断线检测功能
💻 S
📖 第 1 页 / 共 3 页
字号:
	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 + -