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

📄 err.s

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 S
📖 第 1 页 / 共 2 页
字号:
; }
; 
; // 欠压检测
; // 红灯LED闪烁3下,绿灯熄灭
; void deal_err_low_vol(void)
; {
; 	led_flicker(1,3);
; 	GREEN_OFF();
; }
; 
; // 无停针信号检测
; // 红灯LED闪烁4下,绿灯熄灭
; void deal_err_no_stop_needle(void)
; {
; 	led_flicker(1,4);
; 	GREEN_OFF();
; }
; 
; // 过压检测
; // 红灯LED闪烁5下,绿灯熄灭
; void deal_err_over_vol(void)
; {
; 	led_flicker(1,5);
; 	GREEN_OFF();
; }
; 
; // 电磁阀驱动回路过流短路故障检测
; // 红灯LED长亮,绿灯闪烁1下
; void deal_err_solenoid_short(void)
; {
; 	RED_ON();
; 	led_flicker(0,1);
; }
; 
; // 同步编码器故障检测
; // 红灯LED长亮,绿灯闪烁2下
; void deal_err_syn_encoder(void)
; {
; 	RED_ON();
; 	led_flicker(0,2);
; }
; 
; // 电机堵转检测
; // 红灯LED长亮,绿灯闪烁3下
; void deal_err_motor_block(void)
; {
; 	RED_ON();
; 	led_flicker(0,3);
; }
; 
; // 电机HALL信号故障检测
; // 红灯LED长亮,绿灯闪烁4下
; void deal_err_motor_hall(void)
; {
; 	RED_ON();
; 	led_flicker(0,4);
; }
; #endif
; 
; /****************************************************
; 
; 
; 控制LED 灯闪烁函数
; 参数type : 1 表示控制红灯  0 表示控制绿灯
; 参数times : 闪烁的次数
; 
; *****************************************************/
; void led_flicker(byte type,byte times)
; {
	.dbline 314
; 	g_LedTimesT1 = 0;
	clr R2
	sts _g_LedTimesT1,R2
	.dbline 315
; 	g_LedTimesT2 = 0;
	sts _g_LedTimesT2,R2
	.dbline 316
; 	g_LedTimesT3 = 0;
	clr R3
	sts _g_LedTimesT3+1,R3
	sts _g_LedTimesT3,R2
	.dbline 318
; 	
; 	g_LedType = type;
	sts _g_LedType,R16
	.dbline 319
; 	g_LedTimes = times;
	sts _g_LedTimes,R18
	.dbline 320
; 	g_LedTimesCnt = times;
	sts _g_LedTimesCnt,R18
	.dbline 321
; 	g_StartLedFlick = 1;
	ldi R24,1
	sts _g_StartLedFlick,R24
	.dbline -2
L49:
	.dbline 0 ; func end
	ret
	.dbsym r times 18 c
	.dbsym r type 16 c
	.dbend
	.dbfunc e electromagne_ctrl _electromagne_ctrl fV
;           ctrl -> R18
;         target -> R16
	.even
_electromagne_ctrl::
	rcall push_gset1
	.dbline -1
	.dbline 331
; }
; 
; 
; 
; 
; // 电磁铁控制函数
; // 参数 target  : 电磁铁序号1~3
; // 参数 ctrl  : 1 	启动    0  停止
; void electromagne_ctrl(byte target ,byte ctrl)
; {
	.dbline 332
; 	switch (target)
	mov R20,R16
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L54
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L57
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L60
	rjmp L52
X0:
	.dbline 333
; 	{
L54:
	.dbline 335
; 		case 1:
; 			if (ctrl)
	tst R18
	breq L55
	.dbline 336
; 			{
	.dbline 337
; 				 E_MAG1_ON();
	cbi 0x5,3
	.dbline 338
; 			}
	rjmp L52
L55:
	.dbline 340
; 			else
; 			{
	.dbline 341
; 				E_MAG1_OFF();
	sbi 0x5,3
	.dbline 342
; 			}
	.dbline 343
; 			break;
	rjmp L52
L57:
	.dbline 346
; 			
; 		case 2:
; 			if (ctrl)
	tst R18
	breq L58
	.dbline 347
; 			{
	.dbline 348
; 				 E_MAG2_ON();
	cbi 0xb,5
	.dbline 349
; 			}
	rjmp L52
L58:
	.dbline 351
; 			else
; 			{
	.dbline 352
; 				E_MAG2_OFF();
	sbi 0xb,5
	.dbline 353
; 			}
	.dbline 354
; 			break;
	rjmp L52
L60:
	.dbline 357
; 			
; 		case 3:
; 			if (ctrl)
	tst R18
	breq L61
	.dbline 358
; 			{
	.dbline 359
; 				 E_MAG3_ON();
	cbi 0x5,2
	.dbline 360
; 			}
	rjmp L52
L61:
	.dbline 362
	.dbline 363
	sbi 0x5,2
	.dbline 364
	.dbline 365
	.dbline 368
L52:
	.dbline -2
L50:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ctrl 18 c
	.dbsym r target 16 c
	.dbend
	.dbfunc e timer1_ovf_isr_ _timer1_ovf_isr_ fV
	.even
_timer1_ovf_isr_::
	.dbline -1
	.dbline 382
; 			else
; 			{
; 				E_MAG3_OFF();
; 			}
; 			break;
; 			
; 		default:
; 			break;
; 	}
; 
; }
; 
; 
; 
; 
; //  10 ms 中断 一次
; // 需要提供低于220V 的信号g_singleLowVol
; // 高于400V 的信号g_singleOverVol
; // 电机正在运行标志g_MotorRun
; // 电机速度小于10 RPM 标志g_LowSpeed
; void timer1_ovf_isr_(void)
; {
	.dbline 383
; 	if (!g_MotorRun)
	lds R2,_g_MotorRun
	tst R2
	breq X1
	rjmp L64
X1:
	.dbline 384
; 	{
	.dbline 385
; 		if (g_SingleLowVol)
	lds R2,_g_SingleLowVol
	tst R2
	breq L66
	.dbline 386
; 		{
	.dbline 387
; 			g_Lower220VCnt ++;
	lds R24,_g_Lower220VCnt
	lds R25,_g_Lower220VCnt+1
	adiw R24,1
	sts _g_Lower220VCnt+1,R25
	sts _g_Lower220VCnt,R24
	.dbline 388
; 		}
	rjmp L67
L66:
	.dbline 390
; 		else
; 		{
	.dbline 391
; 			g_Over220VCnt ++;
	lds R24,_g_Over220VCnt
	lds R25,_g_Over220VCnt+1
	adiw R24,1
	sts _g_Over220VCnt+1,R25
	sts _g_Over220VCnt,R24
	.dbline 392
; 		}
L67:
	.dbline 393
; 		if (g_Lower220VCnt + g_Over220VCnt > 300)
	lds R2,_g_Over220VCnt
	lds R3,_g_Over220VCnt+1
	lds R4,_g_Lower220VCnt
	lds R5,_g_Lower220VCnt+1
	add R4,R2
	adc R5,R3
	ldi R24,300
	ldi R25,1
	cp R24,R4
	cpc R25,R5
	brsh L68
	.dbline 394
; 		{
	.dbline 395
; 			if (g_Lower220VCnt > g_Over220VCnt)
	lds R4,_g_Lower220VCnt
	lds R5,_g_Lower220VCnt+1
	cp R2,R4
	cpc R3,R5
	brsh L70
	.dbline 396
; 			{
	.dbline 397
; 				g_LowVol = 1;
	ldi R24,1
	sts _g_LowVol,R24
	.dbline 398
; 			}
	rjmp L71
L70:
	.dbline 400
; 			else
; 			{
	.dbline 401
; 				g_LowVol = 0;
	clr R2
	sts _g_LowVol,R2
	.dbline 402
; 			}
L71:
	.dbline 403
; 			g_Lower220VCnt = 0;
	clr R2
	clr R3
	sts _g_Lower220VCnt+1,R3
	sts _g_Lower220VCnt,R2
	.dbline 404
; 			g_Over220VCnt = 0;
	sts _g_Over220VCnt+1,R3
	sts _g_Over220VCnt,R2
	.dbline 405
; 		}
L68:
	.dbline 406
; 		g_LowSpeedCnt = 0;
	clr R2
	clr R3
	sts _g_LowSpeedCnt+1,R3
	sts _g_LowSpeedCnt,R2
	.dbline 407
; 	}
	rjmp L65
L64:
	.dbline 409
; 	else
; 	{
	.dbline 410
; 		g_Lower220VCnt = 0;
	clr R2
	clr R3
	sts _g_Lower220VCnt+1,R3
	sts _g_Lower220VCnt,R2
	.dbline 411
; 		g_Over220VCnt = 0;	
	sts _g_Over220VCnt+1,R3
	sts _g_Over220VCnt,R2
	.dbline 412
; 		if (g_LowSpeed)
	lds R2,_g_LowSpeed
	tst R2
	breq L72
	.dbline 413
; 		{
	.dbline 414
; 			g_LowSpeedCnt ++;
	lds R24,_g_LowSpeedCnt
	lds R25,_g_LowSpeedCnt+1
	adiw R24,1
	sts _g_LowSpeedCnt+1,R25
	sts _g_LowSpeedCnt,R24
	.dbline 415
; 		}
	rjmp L73
L72:
	.dbline 417
; 		else
; 		{
	.dbline 418
; 			g_LowSpeedCnt = 0;
	clr R2
	clr R3
	sts _g_LowSpeedCnt+1,R3
	sts _g_LowSpeedCnt,R2
	.dbline 419
; 		}
L73:
	.dbline 420
; 		if (g_LowSpeedCnt > 200)
	ldi R24,200
	ldi R25,0
	lds R2,_g_LowSpeedCnt
	lds R3,_g_LowSpeedCnt+1
	cp R24,R2
	cpc R25,R3
	brsh L74
	.dbline 421
; 		{
	.dbline 422
; 			g_MotorBlock = 1;
	ldi R24,1
	sts _g_MotorBlock,R24
	.dbline 423
; 			g_LowSpeedCnt = 0;
	clr R2
	clr R3
	sts _g_LowSpeedCnt+1,R3
	sts _g_LowSpeedCnt,R2
	.dbline 424
; 		}	
L74:
	.dbline 425
; 	}
L65:
	.dbline 428
; 
; 
; 	if (g_SingleOverVol)
	lds R2,_g_SingleOverVol
	tst R2
	breq L76
	.dbline 429
; 	{
	.dbline 430
; 		g_Lower400VCnt ++;
	lds R24,_g_Lower400VCnt
	lds R25,_g_Lower400VCnt+1
	adiw R24,1
	sts _g_Lower400VCnt+1,R25
	sts _g_Lower400VCnt,R24
	.dbline 431
; 	}
	rjmp L77
L76:
	.dbline 433
; 	else
; 	{
	.dbline 434
; 		g_Over400VCnt ++;
	lds R24,_g_Over400VCnt
	lds R25,_g_Over400VCnt+1
	adiw R24,1
	sts _g_Over400VCnt+1,R25
	sts _g_Over400VCnt,R24
	.dbline 435
; 	}
L77:
	.dbline 436
; 	if (g_Lower400VCnt + g_Over400VCnt > 300)
	lds R2,_g_Over400VCnt
	lds R3,_g_Over400VCnt+1
	lds R4,_g_Lower400VCnt
	lds R5,_g_Lower400VCnt+1
	add R4,R2
	adc R5,R3
	ldi R24,300
	ldi R25,1
	cp R24,R4
	cpc R25,R5
	brsh L78
	.dbline 437
; 	{
	.dbline 438
; 		if (g_Lower400VCnt >= g_Over400VCnt)
	lds R4,_g_Lower400VCnt
	lds R5,_g_Lower400VCnt+1
	cp R4,R2
	cpc R5,R3
	brlo L80
	.dbline 439
; 		{
	.dbline 440
; 			g_OverVol = 1;
	ldi R24,1
	sts _g_OverVol,R24
	.dbline 441
; 		}
	rjmp L81
L80:
	.dbline 443
; 		else
; 		{
	.dbline 444
; 			g_OverVol = 0;
	clr R2
	sts _g_OverVol,R2
	.dbline 445
; 		}
L81:
	.dbline 446
; 		g_Lower400VCnt = 0;
	clr R2
	clr R3
	sts _g_Lower400VCnt+1,R3
	sts _g_Lower400VCnt,R2
	.dbline 447
; 		g_Over400VCnt = 0;
	sts _g_Over400VCnt+1,R3
	sts _g_Over400VCnt,R2
	.dbline 448
; 	}
L78:
	.dbline 451
; 
; 
; 	if (g_StartLedFlick)
	lds R2,_g_StartLedFlick
	tst R2
	brne X2
	rjmp L82
X2:
	.dbline 452
; 	{
	.dbline 453
; 		if (g_LedTimesCnt)
	lds R2,_g_LedTimesCnt
	tst R2
	breq L84
	.dbline 454
; 		{
	.dbline 455
; 			if (g_LedTimesT1 < LEDFLICKTIME1)
	lds R24,_g_LedTimesT1
	cpi R24,50
	brsh L86
	.dbline 456
; 			{
	.dbline 457
; 				if (g_LedType)
	lds R2,_g_LedType
	tst R2
	breq L88
	.dbline 458
; 				{
	.dbline 459
; 					RED_ON();
	cbi 0x8,2
	.dbline 460
; 				}
	rjmp L89
L88:
	.dbline 462
; 				else
; 				{
	.dbline 463
; 					GREEN_ON();
	cbi 0x8,3
	.dbline 464
; 				}
L89:
	.dbline 465
; 				g_LedTimesT1 ++;
	lds R24,_g_LedTimesT1
	subi R24,255    ; addi 1
	sts _g_LedTimesT1,R24
	.dbline 466
; 			}
	rjmp L87
L86:
	.dbline 468
; 			else
; 			{
	.dbline 469
; 				if (g_LedType)
	lds R2,_g_LedType
	tst R2
	breq L90
	.dbline 470
; 				{
	.dbline 471
; 					RED_OFF();
	sbi 0x8,2
	.dbline 472
; 				}
	rjmp L91
L90:
	.dbline 474
; 				else
; 				{
	.dbline 475
; 					GREEN_OFF();
	sbi 0x8,3
	.dbline 476
; 				}
L91:
	.dbline 477
; 				g_LedTimesT2 ++;
	lds R24,_g_LedTimesT2
	subi R24,255    ; addi 1
	sts _g_LedTimesT2,R24
	.dbline 478
; 				if (g_LedTimesT2 == LEDFLICKTIME2)
	cpi R24,50
	brne L92
	.dbline 479
; 				{
	.dbline 480
; 					g_LedTimesT2 = 0;
	clr R2
	sts _g_LedTimesT2,R2
	.dbline 481
; 					g_LedTimesT1 = 0;
	sts _g_LedTimesT1,R2
	.dbline 482
; 					g_LedTimesCnt--;
	lds R24,_g_LedTimesCnt
	subi R24,1
	sts _g_LedTimesCnt,R24
	.dbline 483
; 				}
L92:
	.dbline 484
; 			}
L87:
	.dbline 485
; 		}
L84:
	.dbline 486
; 		if (g_LedTimesCnt == 0)
	lds R2,_g_LedTimesCnt
	tst R2
	brne L94
	.dbline 487
; 		{
	.dbline 488
; 			g_LedTimesT3 ++;
	lds R24,_g_LedTimesT3
	lds R25,_g_LedTimesT3+1
	adiw R24,1
	sts _g_LedTimesT3+1,R25
	sts _g_LedTimesT3,R24
	.dbline 489
; 			if (g_LedTimesT3 == LEDFLICKTIME3)
	cpi R24,250
	ldi R30,0
	cpc R25,R30
	brne L96
	.dbline 490
; 			{
	.dbline 491
; 				g_LedTimesT3 = 0;
	clr R2
	clr R3
	sts _g_LedTimesT3+1,R3
	sts _g_LedTimesT3,R2
	.dbline 492
; 				g_LedTimesCnt = g_LedTimes;
	lds R2,_g_LedTimes
	sts _g_LedTimesCnt,R2
	.dbline 493
; 			}
L96:
	.dbline 494
; 		}
L94:
	.dbline 495
L82:
	.dbline -2
L63:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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