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

📄 xunxiandongzuo8.s

📁 mega8 对电机控制。采用mega8对电机控制。然后再用mega16 来控制mega8
💻 S
📖 第 1 页 / 共 3 页
字号:
	adc R7,R17
	adc R8,R18
	adc R9,R19
	movw R30,R10
	std z+40,R6
	std z+41,R7
	std z+42,R8
	std z+43,R9
	.dbline 158
; 	if(Dir)				//计数累加
; 		Num_Speed += temp_int;
	ldi R20,0
	ldi R21,64
	ldi R22,6
	ldi R23,0
	movw R30,R10
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlt L37
	.dbline 159
; 	else
	ldi R20,0
	ldi R21,64
	ldi R22,6
	ldi R23,0
	movw R30,R10
	std z+40,R20
	std z+41,R21
	std z+42,R22
	std z+43,R23
	rjmp L38
L37:
	.dbline 160
; 		Num_Speed -= temp_int;
	ldi R20,0
	ldi R21,192
	ldi R22,249
	ldi R23,255
	movw R30,R10
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brlt L39
	.dbline 161
; 	
	ldi R20,0
	ldi R21,192
	ldi R22,249
	ldi R23,255
	movw R30,R10
	std z+40,R20
	std z+41,R21
	std z+42,R22
	std z+43,R23
L39:
L38:
	.dbline 162
; 	L_sPID.vi_FeedBack = Num_Speed;	//储存当前速速值
L28:
	.dbline 164
; 	
; 	/**************************************/
	ldi R24,10
	ldi R25,0
	movw R30,R10
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall asr32
	.dbline -2
L25:
	adiw R28,12
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l temp_comp 8 L
	.dbsym l d_error 4 L
	.dbsym l error 0 L
	.dbsym r pp 10 pX
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
_rev_buf::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.dbsym e rev_buf _rev_buf A[10:10]c
_send_buf::
	.blkb 2
	.area idata
	.byte 1,2
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.blkb 2
	.area idata
	.byte 3,4
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.blkb 2
	.area idata
	.byte 5,6
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.blkb 2
	.area idata
	.byte 7,9
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.dbsym e send_buf _send_buf A[10:10]c
	.area text(rom, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.dbfunc e spi_init _spi_init fV
	.even
_spi_init::
	.dbline -1
	.dbline 8
	.dbline 9
	in R24,0x18
	ori R24,60
	out 0x18,R24
	.dbline 10
	in R24,0x17
	andi R24,195
	out 0x17,R24
	.dbline 11
	sbi 0x17,4
	.dbline 14
	ldi R24,195
	out 0xd,R24
	.dbline 15
	clr R2
	out 0xe,R2
	.dbline -2
	.dbline 16
L41:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 20
	rjmp _spi_stc_isr
	.area text(rom, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
L43:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
L44:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
L45:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
L46:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.area text(rom, con, rel)
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Slave_SPI.c
	.dbfunc e spi_stc_isr _spi_stc_isr fV
	.dbsym s data_long L46 c
	.dbsym s com_flag L45 c
	.dbsym s start_trans_flag L44 c
	.dbsym s i L43 c
;       temp_int -> R10,R11
;      temp_long -> y+0
;      temp_char -> R12
	.even
_spi_stc_isr::
	rcall push_lset
	rcall push_gset4
	sbiw R28,4
	.dbline -1
	.dbline 40
	.dbline 46
	clr R12
	.dbline 47
	clr R10
	clr R11
	.dbline 48
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 50
	.dbline 52
	in R12,0xf
	lds R2,L44
	tst R2
	brne L47
	.dbline 53
	.dbline 54
	mov R24,R12
	andi R24,224
	cpi R24,64
	breq X1
	rjmp L48
X1:
	.dbline 55
	.dbline 56
	.dbline 57
	.dbline 58
	.dbline 60
	mov R24,R12
	andi R24,15
	sts L46,R24
	mov R24,R12
	andi R24,16
	sts L45,R24
	ldi R24,1
	sts L44,R24
	lds R2,L45
	tst R2
	brne X2
	rjmp L48
X2:
	.dbline 61
	.dbline 62
	lds R2,_send_buf
	out 0xf,R2
	.dbline 63
	lds R24,L43
	subi R24,255    ; addi 1
	sts L43,R24
	.dbline 64
	.dbline 65
	.dbline 66
	rjmp L48
L47:
	.dbline 68
	.dbline 69
	lds R2,L45
	tst R2
	breq X3
	rjmp L53
X3:
	.dbline 70
	.dbline 71
	ldi R24,<_rev_buf
	ldi R25,>_rev_buf
	lds R30,L43
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R12
	.dbline 73
	.dbline 75
	lds R24,L43
	subi R24,255    ; addi 1
	sts L43,R24
	lds R2,L46
	cp R24,R2
	brsh X4
	rjmp L54
X4:
	.dbline 76
	.dbline 77
	.dbline 78
	.dbline 79
	.dbline 80
	.dbline 82
	clr R2
	sts L43,R2
	sts L44,R2
	sts L46,R2
	sts L45,R2
	lds R12,_rev_buf
	clr R13
	movw R24,R12
	cpi R24,144
	ldi R30,0
	cpc R25,R30
	brne X5
	rjmp L70
X5:
	ldi R24,144
	cp R24,R12
	cpc R25,R13
	brlt L77
L76:
	movw R24,R12
	cpi R24,128
	ldi R30,0
	cpc R25,R30
	brne X6
	rjmp L67
X6:
	cpi R24,129
	ldi R30,0
	cpc R25,R30
	brne X7
	rjmp L66
X7:
	cpi R24,135
	ldi R30,0
	cpc R25,R30
	brne X8
	rjmp L64
X8:
	cpi R24,136
	ldi R30,0
	cpc R25,R30
	breq L60
	cpi R24,137
	ldi R30,0
	cpc R25,R30
	breq L61
	cpi R24,138
	ldi R30,0
	cpc R25,R30
	breq L62
	cpi R24,139
	ldi R30,0
	cpc R25,R30
	breq L63
	rjmp L54
L77:
	movw R24,R12
	cpi R24,164
	ldi R30,0
	cpc R25,R30
	brne X9
	rjmp L65
X9:
	rjmp L54
X0:
	.dbline 83
L60:
	.dbline 85
	.dbline 86
	ldi R16,103
	ldi R17,0
	rcall _risemotor
	.dbline 87
	ldi R16,2300
	ldi R17,8
	rcall _delay_ms
	.dbline 88
	ldi R16,115
	ldi R17,0
	rcall _risemotor
	.dbline 96
	.dbline 96
	rjmp L54
L61:
	.dbline 98
	.dbline 99
	ldi R16,98
	ldi R17,0
	rcall _risemotor
	.dbline 100
	ldi R16,1200
	ldi R17,4
	rcall _delay_ms
	.dbline 101
	ldi R16,115
	ldi R17,0
	rcall _risemotor
	.dbline 103
	.dbline 103
	rjmp L54
L62:
	.dbline 105
	.dbline 106
	ldi R16,103
	ldi R17,0
	rcall _pushmotor2
	.dbline 107
	ldi R16,2000
	ldi R17,7
	rcall _delay_ms
	.dbline 108
	ldi R16,115
	ldi R17,0
	rcall _pushmotor2
	.dbline 109
	.dbline 109
	rjmp L54
L63:
	.dbline 111
	.dbline 112
	ldi R16,98
	ldi R17,0
	rcall _pushmotor2
	.dbline 113
	ldi R16,2000
	ldi R17,7
	rcall _delay_ms
	.dbline 114
	ldi R16,115
	ldi R17,0
	rcall _pushmotor2
	.dbline 115
	.dbline 115
	rjmp L54
L64:
	.dbline 117
	.dbline 118
	ldi R16,103
	ldi R17,0
	rcall _pushmotor1
	.dbline 119
	ldi R16,1500
	ldi R17,5
	rcall _delay_ms
	.dbline 120
	ldi R16,115
	ldi R17,0
	rcall _pushmotor1
	.dbline 122
	.dbline 122
	rjmp L54
L65:
	.dbline 126
	.dbline 127
	rcall _L_PIDInit
	.dbline 128
	clr R2
	out 0x32,R2
	.dbline 129
	.dbline 130
	sts _num_H,R2
	clr R3
	sts _Num_Speed+1,R3
	sts _Num_Speed,R2
	.dbline 132
	.dbline 132
	rjmp L54
L66:
	.dbline 134
	.dbline 135
	clr R2
	out 0x25,R2
	.dbline 136
	.dbline 138
	ldi R24,255
	sts _PID_choice,R24
	rcall _free_stop
	.dbline 139
	.dbline 139
	rjmp L54
L67:
	.dbline 141
	.dbline 142
	.dbline 143
	.dbline 144
	.dbline 145
	.dbline 147
	.dbline 148
	lds R10,_rev_buf+1
	clr R11
	mov R11,R10
	clr R10
	lds R2,_rev_buf+2
	clr R3
	add R10,R2
	adc R11,R3
	sts _L_sPID+1,R11
	sts _L_sPID,R10
	ldi R24,128
	sts _PID_choice,R24
	ldi R24,7
	out 0x25,R24
	.dbline 149
	.dbline 149
	rjmp L54
L70:
	.dbline 151
	.dbline 152
	.dbline 153
	.dbline 155
	.dbline 156
	.dbline 158
	.dbline 159
	.dbline 161
	.dbline 163
	lds R2,_rev_buf+1
	clr R3
	clr R4
	clr R5
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsl32
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	lds R2,_rev_buf+2
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+0,R6
	std z+1,R7
	std z+2,R8
	std z+3,R9
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsl32
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	lds R2,_rev_buf+3
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+0,R6
	std z+1,R7
	std z+2,R8
	std z+3,R9
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsl32
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	lds R2,_rev_buf+4
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+0,R6
	std z+1,R7
	std z+2,R8
	std z+3,R9
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	sts _L_sPID+4+1,R3
	sts _L_sPID+4,R2
	sts _L_sPID+4+2+1,R5
	sts _L_sPID+4+2,R4
	.dbline 169
; 	switch( PID_choice )
; 	{
; 		case SPEED_SET :
; 		{ 
; 			temp_sint = v_PIDCalc ( &L_sPID);
	.dbline 171
; 			break;
; 		}
	ldi R24,144
	sts _PID_choice,R24
	ldi R24,7
	out 0x25,R24
	.dbline 172
; 		case DISTANCE_SET : 
	.dbline 172
	.dbline 173
; 		{
	.dbline 177
; 			temp_sint = s_PIDCalc( &L_sPID );
; 			break;
; 		}
; 	}
	.dbline 178
; 	//temp_sint = v_PIDCalc ( &L_sPID);
	rjmp L54
L53:
	.dbline 180
; 	Num_Speed = 0;
; 	
	.dbline 181
; 	send_PWM( temp_sint );	//调节PWM的占空比	
	lds R2,L46
	lds R3,L43
	cp R3,R2
	brsh L78
	.dbline 182
; 	
	.dbline 183
; }
	ldi R24,<_send_buf
	ldi R25,>_send_buf
	mov R30,R3
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xf,R2
	.dbline 184
; 
	mov R24,R3
	subi R24,255    ; addi 1
	sts L43,R24
	.dbline 185
; /*pwm脉宽调节*/
	rjmp L79
L78:
	.dbline 187
; void send_PWM(signed int num_pwm)
; {
	.dbline 188
; 	if( num_pwm >= 0 )
	.dbline 189
; 		now_dir = GO_AHEAD;
	.dbline 190
; 	else
	.dbline 191
; 		now_dir = GO_BACK;
	clr R2
	sts L43,R2
	sts L44,R2
	sts L46,R2
	sts L45,R2
	.dbline 201
; 		
; 	if( now_dir == GO_AHEAD )	//判断正反转
; 	{				
; 		//now_dir=GO_AHEAD,正向,	
; 		if(pre_dir != now_dir)	//pre_dir!=now_dir,换成正向,								
; 		{	
; 			PORTC |= 0x08;	//PC3->1,转向变为正		
; 			pre_dir = now_dir; 	//重载pre_dir	
; 		}
; 		
L79:
	.dbline 203
; 		OCR1A = num_pwm;	//重载OCR1A	
; 		
L54:
	.dbline 205
L48:
	.dbline -2
	.dbline 207
; 		TCNT1H = 0x03; //隔一定时间更新OCR1A的值,改变PWM信号,保护18200
;  		TCNT1L = 0xF0;
; 	}
; 	else
L42:
	adiw R28,4
	rcall pop_gset4
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r temp_int 10 I
	.dbsym l temp_long 0 L
	.dbsym r temp_char 12 c
	.dbend
	.dbfunc e risemotor _risemotor fV
;              m -> R16
	.even
_risemotor::
	rcall push_gset1
	.dbline -1
	.dbline 210
; 	{				
; 		//now_dir=GO_BACK,负方向,							
; 		if(pre_dir != now_dir)	//pre_dir!=now_dir,换成负向
	.dbline 211
; 		{		
	mov R20,R16
	clr R21
	cpi R20,103
	ldi R30,0
	cpc R21,R30
	breq L84
	ldi R24,103
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L88
L87:
	cpi R20,98
	ldi R30,0
	cpc R21,R30
	breq L85
	rjmp L82
L88:
	cpi R20,115
	ldi R30,0
	cpc R21,R30
	breq L86
	rjmp L82
X10:
	.dbline 212
L84:
	.dbline 212
; 			PORTC &= ~0x08;	//PC3->0,转向变为负												
	cbi 0x12,6
	.dbline 212
	sbi 0x12,7
	.dbline 212
	rjmp L82
L85:
	.dbline 213
; 			pre_dir = now_dir; 	//重载pre_dr						
	sbi 0x12,6
	.dbline 213
	sbi 0x12,7
	.dbline 213
	rjmp L82
L86:
	.dbline 214
	cbi 0x12,6
	.dbline 214
	cbi 0x12,7
	.dbline 214
	.dbline 215
L82:
	.dbline -2
	.dbline 217
; 		}
; 		
; 		OCR1A = 0 - num_pwm;	//赋负转占空比	
; 			
L80:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r m 16 c
	.dbend
	.dbfunc e pushmotor2 _pushmotor2 fV
;              m -> R16
	.even
_pushmotor2::
	rcall push_gset1
	.dbline -1
	.dbline 220
; 		TCNT1H = 0x03; //隔一定时间更新OCR1A的值,改变PWM信号,保护18200
;  		TCNT1L = 0xF0;
; 	}	
	.dbline 221
; }
	mov R20,R16
	clr R21
	cpi R20,103
	ldi R30,0
	cpc R21,R30
	breq L93
	ldi R24,103
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L97
L96:
	cpi R20,98
	ldi R30,0
	cpc R21,R30
	breq L94
	rjmp L91
L97:
	cpi R20,115
	ldi R30,0
	cpc R21,R30
	breq L95
	rjmp L91
X11:
	.dbline 222
L93:
	.dbline 222
; 
	sbi 0x12,6
	.dbline 222
	sbi 0x12,7
	.dbline 222
	rjmp L91
L94:
	.dbline 223
; void free_stop (void)			//立即停机
	cbi 0x12,6
	.dbline 223
	sbi 0x12,7
	.dbline 223
	rjmp L91
L95:
	.dbline 224
	cbi 0x12,6
	.dbline 224
	cbi 0x12,7
	.dbline 224
	.dbline 225
L91:
	.dbline -2
	.dbline 227
; {
; 	now_dir = GO_STOP;
; 	pre_dir = GO_STOP;
; 	
L89:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r m 16 c
	.dbend
	.dbfunc e pushmotor1 _pushmotor1 fV
;              m -> R16
	.even
_pushmotor1::
	rcall push_gset1
	.dbline -1
	.dbline 231
; 	PORTC |= 0x08;	//正向输出占空比为零。
; 	OCR1A = 0x0000;	//使占空比为0
; 	
; 	TCNT1H = 0x03;  //隔一定时间更新OCR1A的值,改变PWM信号,保护18200
	.dbline 232
;  	TCNT1L = 0xF0;
	mov R20,R16
	clr R21
	cpi R20,103
	ldi R30,0
	cpc R21,R30
	breq L102
	cpi R20,103
	ldi R30,0
	cpc R21,R30
	brlt L100
L104:
	cpi R20,115
	ldi R30,0
	cpc R21,R30
	breq L103
	rjmp L100
X12:
	.dbline 233
L102:
	.dbline 233
; 		
	sbi 0x15,5
	.dbline 233
	rjmp L100
L103:
	.dbline 234
	cbi 0x15,5
	.dbline 234
	.dbline 235
L100:
	.dbline -2
	.dbline 237
; 	PID_choice = 0xFF;	
; } 
; 
; //call this routine to initialize all peripherals
L98:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r m 16 c
	.dbend
	.dbfile E:\李斐机器人\xunxianjiadongzuo\8/TIMEDELAY8.C
	.dbfunc e delay_us _delay_us fV
	.even

⌨️ 快捷键说明

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