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

📄 main.s

📁 工业开关量检测模块的原代码,带断线检测功能
💻 S
📖 第 1 页 / 共 3 页
字号:
	lds R25,_RUN+1
	adiw R24,1
	sts _RUN+1,R25
	sts _RUN,R24
	.dbline 207
;  if(Time>25)
	ldi R24,25
	lds R2,_Time
	cp R24,R2
	brsh L2
	.dbline 208
;  {
	.dbline 209
;  Time = 0;
	clr R2
	sts _Time,R2
	.dbline 210
;  Temp_Flag = 0x5a;
	ldi R24,90
	sts _Temp_Flag,R24
	.dbline 211
;  RUN_LED();
	xcall _RUN_LED
	.dbline 212
;  }
L2:
	.dbline 213
	ldi R24,50
	ldi R25,0
	lds R2,_RUN
	lds R3,_RUN+1
	cp R24,R2
	cpc R25,R3
	brsh L4
	.dbline 214
	.dbline 215
	wdr
	.dbline 216
	xcall _RUN_LED
	.dbline 217
	clr R2
	clr R3
	sts _RUN+1,R3
	sts _RUN,R2
	.dbline 218
	ldi R24,90
	sts _Send_Flag,R24
	.dbline 219
L4:
	.dbline -2
L1:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
;          tempp -> y+0
;              i -> R10
	.even
_main::
	sbiw R28,28
	.dbline -1
	.dbline 223
;  if(RUN>50)
;  {
;  WDR();
;  RUN_LED();
;  RUN = 0;
;  Send_Flag = 0x5a;
;  }
; }
; 
; void main(void)
; {
	.dbline 226
;  unsigned char i;
;  long tempp;
;  CLI();
	cli
	.dbline 227
;  init_devices();                                             //器件初始化
	xcall _init_devices
	.dbline 228
;  init_data();                                                //数据初始化
	xcall _init_data
	.dbline 230
;  
;  ID_nu = get_id();                                           //读取拨码开关的值
	xcall _get_id
	sts _ID_nu,R16
	.dbline 231
;  ID_net = ID_nu;                                             //计算网络ID号
	mov R2,R16
	sts _ID_net,R2
	.dbline 233
; 
;  Pass_Flag = 0x01;
	ldi R24,1
	sts _Pass_Flag,R24
	.dbline 234
;  tempp = ID_net*256;
	mov R18,R2
	clr R19
	ldi R16,256
	ldi R17,1
	xcall empy16s
	movw R2,R16
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	.dbline 235
;  Pass_Flag <<= 1;
	lds R2,_Pass_Flag
	lsl R2
	sts _Pass_Flag,R2
	.dbline 236
;  id1 = BASE_ADDR+tempp;
	ldi R20,0
	ldi R21,0
	ldi R22,40
	ldi R23,0
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _id1+1,R3
	sts _id1,R2
	sts _id1+2+1,R5
	sts _id1+2,R4
	.dbline 237
;  id2 = BASE_ADDR+1+tempp;
	ldi R20,1
	ldi R21,0
	ldi R22,40
	ldi R23,0
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _id2+1,R3
	sts _id2,R2
	sts _id2+2+1,R5
	sts _id2+2,R4
	.dbline 238
;  id3 = BASE_ADDR/256+tempp*256;
	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,0
	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 _id3+1,R3
	sts _id3,R2
	sts _id3+2+1,R5
	sts _id3+2,R4
	.dbline 239
;  Pass_Flag <<= 1;
	lds R2,_Pass_Flag
	lsl R2
	sts _Pass_Flag,R2
	.dbline 240
;  id4 = BASE_ADDR/256+tempp*256+1;
	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,1
	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 _id4+1,R3
	sts _id4,R2
	sts _id4+2+1,R5
	sts _id4+2,R4
	.dbline 241
;  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 242
;  Pass_Flag <<= 1;
	lds R2,_Pass_Flag
	lsl R2
	sts _Pass_Flag,R2
	.dbline 243
;  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 244
;  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 245
;  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 246
;  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 247
;  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 248
;  if(Pass_Flag!=0x08)
	lds R24,_Pass_Flag
	cpi R24,8
	breq L11
	.dbline 249
;  RESET;
	jmp 0x00000
L11:
	.dbline 250
;  can_init ();   
	xcall _can_init
	.dbline 252
;  
;  DI_handle();                                                //读取开关状态 去抖动处理
	xcall _DI_handle
	.dbline 253
;  for(i=0;i<12;i++)
	clr R10
	xjmp L16
L13:
	.dbline 254
	.dbline 255
	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 256
	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 257
L14:
	.dbline 253
	inc R10
L16:
	.dbline 253
	mov R24,R10
	cpi R24,12
	brlo L13
	.dbline 258
;  {
;  DI_data_pre[i] =DI_data_cur[i];
;  DI_data[i] =DI_data_cur[i];
;  }
;  SEI();
	sei
	.dbline 259
;  watchdog_init();
	xcall _watchdog_init
	.dbline 260
;  WDR();
	wdr
	.dbline 261
;  WDR();
	wdr
	xjmp L18
L17:
	.dbline 264
; 
;   while(1)
;   {
	.dbline 266
;  
;    WDR();
	wdr
	.dbline 267
;    ID_nu = get_id();                                           //读取拨码开关的值
	xcall _get_id
	sts _ID_nu,R16
	.dbline 268
;    ID_net = ID_nu;                                             //计算网络ID号
	mov R2,R16
	sts _ID_net,R2
	.dbline 269
;    if(tempp!=ID_nu*256)
	mov R18,R2
	clr R19
	ldi R16,256
	ldi R17,1
	xcall empy16s
	movw R2,R16
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldd R6,y+0
	ldd R7,y+1
	ldd R8,y+2
	ldd R9,y+3
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brne X1
	xjmp L20
X1:
	.dbline 270
;    {    
	.dbline 271
;     CLI();
	cli
	.dbline 272
;      tempp = ID_net*256;
	lds R18,_ID_net
	clr R19
	ldi R16,256
	ldi R17,1
	xcall empy16s
	movw R2,R16
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	.dbline 273
; 	 Pass_Flag = 0x01;
	ldi R24,1
	sts _Pass_Flag,R24
	.dbline 274
;        id1 = BASE_ADDR+tempp;
	ldi R20,0
	ldi R21,0
	ldi R22,40
	ldi R23,0
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _id1+1,R3
	sts _id1,R2
	sts _id1+2+1,R5
	sts _id1+2,R4
	.dbline 275
;        id2 = BASE_ADDR+1+tempp;
	ldi R20,1
	ldi R21,0
	ldi R22,40
	ldi R23,0
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _id2+1,R3
	sts _id2,R2
	sts _id2+2+1,R5
	sts _id2+2,R4
	.dbline 276
; 	 Pass_Flag <<= 1;  
	mov R2,R24
	lsl R2
	sts _Pass_Flag,R2
	.dbline 277
; 	   WDR();
	wdr
	.dbline 278
;        id3 = BASE_ADDR/256+tempp*256;
	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,0
	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 _id3+1,R3
	sts _id3,R2
	sts _id3+2+1,R5
	sts _id3+2,R4
	.dbline 279
; 	 Pass_Flag <<= 1;  
	lds R2,_Pass_Flag
	lsl R2
	sts _Pass_Flag,R2
	.dbline 280
;        id4 = BASE_ADDR/256+tempp*256+1;
	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,1
	ldi R21,40
	ldi R22,0
	ldi R23,0

⌨️ 快捷键说明

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