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

📄 boat.s

📁 AVR单片机开发的键盘处理程序C源代码希望对单片机初学选手有点帮助
💻 S
📖 第 1 页 / 共 3 页
字号:
	xjmp L99
X14:
	.dbline 281
	.dbline 282
; 			pt_r->real_speed += pt_r->step;	//加速梯形图
	movw R24,R18
	adiw R24,2
	movw R30,R18
	ldd R4,z+10
	ldd R5,z+11
	movw R30,R24
	ldd R6,z+0
	ldd R7,z+1
	add R6,R4
	adc R7,R5
	std z+1,R7
	std z+0,R6
	.dbline 283
; 			if ( pt_r->real_speed < 0 ){	//取绝对值
	movw R30,R18
	ldd R24,z+2
	ldd R25,z+3
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L102
	.dbline 283
	.dbline 284
; 				OCR1B = (uint)(-pt_r->real_speed);
	movw R30,R18
	ldd R24,z+2
	ldd R25,z+3
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	out 0x29,R25
	out 0x28,R24
	.dbline 285
	xjmp L103
L102:
	.dbline 285
; 			} else {
	.dbline 286
; 				OCR1B = (uint)(pt_r->real_speed);
	movw R30,R18
	ldd R2,z+2
	ldd R3,z+3
	out 0x29,R3
	out 0x28,R2
	.dbline 287
; 			}
L103:
	.dbline 288
; 			pt_r->counter = 0;				//计数器清零
	clr R2
	clr R3
	movw R30,R18
	std z+9,R3
	std z+8,R2
	.dbline 289
; 		}
	.dbline 290
	xjmp L99
L98:
	.dbline 290
; 	} else if( pt_r->real_speed > pt_r->des_speed ){
	movw R30,R18
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	cp R2,R4
	cpc R3,R5
	brlt X15
	xjmp L104
X15:
	.dbline 290
	.dbline 291
; 		if ( ++ pt_r->counter == pt_r->dece_count ){
	movw R24,R18
	adiw R24,8
	movw R30,R24
	ldd R24,z+0
	ldd R25,z+1
	adiw R24,1
	movw R4,R24
	std z+1,R5
	std z+0,R4
	movw R30,R18
	ldd R2,z+6
	ldd R3,z+7
	cp R24,R2
	cpc R25,R3
	breq X16
	xjmp L106
X16:
	.dbline 291
	.dbline 292
; 			pt_r->real_speed -= pt_r->step;
	movw R24,R18
	adiw R24,2
	movw R30,R18
	ldd R4,z+10
	ldd R5,z+11
	movw R30,R24
	ldd R6,z+0
	ldd R7,z+1
	sub R6,R4
	sbc R7,R5
	std z+1,R7
	std z+0,R6
	.dbline 293
; 			if ( pt_r->real_speed < 0 ){	//取绝对值
	movw R30,R18
	ldd R24,z+2
	ldd R25,z+3
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L108
	.dbline 293
	.dbline 294
; 				OCR1B = (uint)(-pt_r->real_speed);
	movw R30,R18
	ldd R24,z+2
	ldd R25,z+3
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	out 0x29,R25
	out 0x28,R24
	.dbline 295
	xjmp L109
L108:
	.dbline 295
; 			} else {
	.dbline 296
; 				OCR1B = (uint)(pt_r->real_speed);
	movw R30,R18
	ldd R2,z+2
	ldd R3,z+3
	out 0x29,R3
	out 0x28,R2
	.dbline 297
; 			}
L109:
	.dbline 298
; 			pt_r->counter = 0;
	clr R2
	clr R3
	movw R30,R18
	std z+9,R3
	std z+8,R2
	.dbline 299
; 		}
L106:
	.dbline 300
; 	}
L104:
L99:
L89:
	.dbline -2
	.dbline 301
; }
L65:
	.dbline 0 ; func end
	ret
	.dbsym r pt_r 18 pS[_trap]
	.dbsym r pt_l 16 pS[_trap]
	.dbend
	.dbfunc e trap_ctrler _trap_ctrler fV
;    r_des_speed -> R18,R19
;    l_des_speed -> R16,R17
	.even
_trap_ctrler::
	.dbline -1
	.dbline 305
; 
; //电机速度控制接口函数
; void trap_ctrler( int l_des_speed, int r_des_speed )
; {
	.dbline 306
; 	l_trap.acce_count = L_ACCE_COUNT;			//设定左电机
	ldi R24,2
	ldi R25,0
	sts _l_trap+4+1,R25
	sts _l_trap+4,R24
	.dbline 307
; 	l_trap.dece_count = L_DECE_COUNT;
	sts _l_trap+6+1,R25
	sts _l_trap+6,R24
	.dbline 308
; 	l_trap.step = L_STEP;
	ldi R24,1
	sts _l_trap+10+1,R25
	sts _l_trap+10,R24
	.dbline 309
; 	if ( l_des_speed > ( MAX_SPEED - l_trap.step ) ){			//给定值限幅处理
	movw R2,R24
	ldi R24,510
	ldi R25,1
	sub R24,R2
	sbc R25,R3
	cp R24,R16
	cpc R25,R17
	brge L114
	.dbline 309
	.dbline 310
; 		l_trap.des_speed = MAX_SPEED - l_trap.step;
	ldi R24,510
	ldi R25,1
	sub R24,R2
	sbc R25,R3
	sts _l_trap+1,R25
	sts _l_trap,R24
	.dbline 311
	xjmp L115
L114:
	.dbline 311
; 	} else if ( l_des_speed < ( MIN_SPEED + l_trap.step ) ){
	lds R24,_l_trap+10
	lds R25,_l_trap+10+1
	subi R24,254
	sbci R25,1
	cp R16,R24
	cpc R17,R25
	brge L118
	.dbline 311
	.dbline 312
; 		l_trap.des_speed = MIN_SPEED + l_trap.step;
	lds R24,_l_trap+10
	lds R25,_l_trap+10+1
	subi R24,254
	sbci R25,1
	sts _l_trap+1,R25
	sts _l_trap,R24
	.dbline 313
	xjmp L119
L118:
	.dbline 313
; 	} else {
	.dbline 314
; 		l_trap.des_speed = l_des_speed;
	sts _l_trap+1,R17
	sts _l_trap,R16
	.dbline 315
; 	}
L119:
L115:
	.dbline 316
; 	r_trap.acce_count = R_ACCE_COUNT;			//设定右电机
	ldi R24,2
	ldi R25,0
	sts _r_trap+4+1,R25
	sts _r_trap+4,R24
	.dbline 317
; 	r_trap.dece_count = R_DECE_COUNT;
	sts _r_trap+6+1,R25
	sts _r_trap+6,R24
	.dbline 318
; 	r_trap.step = R_STEP;
	ldi R24,1
	sts _r_trap+10+1,R25
	sts _r_trap+10,R24
	.dbline 319
; 	if ( r_des_speed > ( MAX_SPEED - r_trap.step ) ){			//给定值限幅处理
	movw R2,R24
	ldi R24,510
	ldi R25,1
	sub R24,R2
	sbc R25,R3
	cp R24,R18
	cpc R25,R19
	brge L125
	.dbline 319
	.dbline 320
; 		r_trap.des_speed = MAX_SPEED - r_trap.step;
	ldi R24,510
	ldi R25,1
	sub R24,R2
	sbc R25,R3
	sts _r_trap+1,R25
	sts _r_trap,R24
	.dbline 321
	xjmp L126
L125:
	.dbline 321
; 	} else if ( r_des_speed < ( MIN_SPEED + r_trap.step ) ){
	lds R24,_r_trap+10
	lds R25,_r_trap+10+1
	subi R24,254
	sbci R25,1
	cp R18,R24
	cpc R19,R25
	brge L129
	.dbline 321
	.dbline 322
; 		r_trap.des_speed = MIN_SPEED + r_trap.step;
	lds R24,_r_trap+10
	lds R25,_r_trap+10+1
	subi R24,254
	sbci R25,1
	sts _r_trap+1,R25
	sts _r_trap,R24
	.dbline 323
	xjmp L130
L129:
	.dbline 323
; 	} else {
	.dbline 324
; 		r_trap.des_speed = r_des_speed;
	sts _r_trap+1,R19
	sts _r_trap,R18
	.dbline 325
; 	}
L130:
L126:
	.dbline -2
	.dbline 326
; }
L110:
	.dbline 0 ; func end
	ret
	.dbsym r r_des_speed 18 I
	.dbsym r l_des_speed 16 I
	.dbend
	.dbfunc e key_process _key_process fV
;        key_buf -> R20,R21
	.even
_key_process::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 330
; 
; /**************************** 键盘信号处理模块 ********************************/
; void key_process( uint key_buf )
; {
	.dbline 331
; 	if ( key_buf & BIT( L_STOP_KEY ) ){
	sbrs R21,4
	rjmp L134
	.dbline 331
	.dbline 332
; 		l_temp_speed = l_trap.des_speed;
	lds R2,_l_trap
	lds R3,_l_trap+1
	sts _l_temp_speed+1,R3
	sts _l_temp_speed,R2
	.dbline 333
; 		l_trap.des_speed = 0;
	clr R2
	clr R3
	sts _l_trap+1,R3
	sts _l_trap,R2
	.dbline 334
; 		trap_ctrler( 0, r_trap.des_speed );
	lds R18,_r_trap
	lds R19,_r_trap+1
	clr R16
	clr R17
	xcall _trap_ctrler
	.dbline 335
; 		key_prev_status |= BIT( L_STOP_KEY_PRESS );
	lds R24,_key_prev_status
	ori R24,16
	sts _key_prev_status,R24
	.dbline 336
	xjmp L135
L134:
	.dbline 336
; 	} else if ( ( key_buf & BIT( L_RESUME_KEY ) ) && ( key_prev_status & BIT( L_STOP_KEY_PRESS ) ) ){
	sbrs R21,0
	rjmp L136
	lds R2,_key_prev_status
	sbrs R2,4
	rjmp L136
	.dbline 336
	.dbline 337
; 		l_trap.des_speed = l_temp_speed;
	lds R2,_l_temp_speed
	lds R3,_l_temp_speed+1
	sts _l_trap+1,R3
	sts _l_trap,R2
	.dbline 338
; 		trap_ctrler( l_trap.des_speed, r_trap.des_speed );
	lds R18,_r_trap
	lds R19,_r_trap+1
	lds R16,_l_trap
	lds R17,_l_trap+1
	xcall _trap_ctrler
	.dbline 339
; 		key_prev_status &= ~BIT( L_STOP_KEY_PRESS );
	lds R24,_key_prev_status
	andi R24,239
	sts _key_prev_status,R24
	.dbline 340
	xjmp L137
L136:
	.dbline 340
; 	} else if ( key_buf & BIT( L_ACCE_KEY ) ){
	sbrs R20,0
	rjmp L138
	.dbline 340
	.dbline 341
; 		trap_ctrler( l_trap.des_speed + SPEED_INC, r_trap.des_speed );
	lds R18,_r_trap
	lds R19,_r_trap+1
	lds R16,_l_trap
	lds R17,_l_trap+1
	subi R16,251  ; offset = 5
	sbci R17,255
	xcall _trap_ctrler
	.dbline 342
	xjmp L139
L138:
	.dbline 342
; 	} else if ( key_buf & BIT( L_DECE_KEY ) ){
	sbrs R20,4
	rjmp L140
	.dbline 342
	.dbline 343
; 		trap_ctrler( l_trap.des_speed - SPEED_INC, r_trap.des_speed );
	lds R18,_r_trap
	lds R19,_r_trap+1
	lds R16,_l_trap
	lds R17,_l_trap+1
	subi R16,5
	sbci R17,0
	xcall _trap_ctrler
	.dbline 344
; 	}
L140:
L139:
L137:
L135:
	.dbline 346
; 
; 	if ( key_buf & BIT( R_STOP_KEY ) ){
	sbrs R21,7
	rjmp L142
	.dbline 346
	.dbline 347
; 		r_temp_speed = r_trap.des_speed;
	lds R2,_r_trap
	lds R3,_r_trap+1
	sts _r_temp_speed+1,R3
	sts _r_temp_speed,R2
	.dbline 348
; 		r_trap.des_speed = 0;
	clr R2
	clr R3
	sts _r_trap+1,R3
	sts _r_trap,R2
	.dbline 349
; 		trap_ctrler( l_trap.des_speed, 0 );
	clr R18
	clr R19
	lds R16,_l_trap
	lds R17,_l_trap+1
	xcall _trap_ctrler
	.dbline 350
; 		key_prev_status |= BIT( R_STOP_KEY_PRESS );
	lds R24,_key_prev_status
	ori R24,1
	sts _key_prev_status,R24
	.dbline 351
	xjmp L143
L142:
	.dbline 351
; 	} else if ( ( key_buf & BIT( R_RESUME_KEY ) ) && ( key_prev_status & BIT( R_STOP_KEY_PRESS ) ) ){
	sbrs R21,3
	rjmp L144
	lds R2,_key_prev_status
	sbrs R2,0
	rjmp L144
	.dbline 351
	.dbline 352
; 		r_trap.des_speed = r_temp_speed;
	lds R2,_r_temp_speed
	lds R3,_r_temp_speed+1
	sts _r_trap+1,R3
	sts _r_trap,R2
	.dbline 353
; 		trap_ctrler( l_trap.des_speed, r_trap.des_speed );
	lds R18,_r_trap
	lds R19,_r_trap+1
	lds R16,_l_trap
	lds R17,_l_trap+1
	xcall _trap_ctrler
	.dbline 354
; 		key_prev_status &= ~BIT( R_STOP_KEY_PRESS );
	lds R24,_key_prev_status
	andi R24,254
	sts _key_prev_status,R24
	.dbline 355
	xjmp L145
L144:
	.dbline 355
; 	} else if ( key_buf & BIT( R_ACCE_KEY ) ){
	sbrs R20,3
	rjmp L146
	.dbline 355
	.dbline 356
; 		trap_ctrler( l_trap.des_speed, r_trap.des_speed + SPEED_INC );
	lds R18,_r_trap
	lds R19,_r_trap+1
	subi R18,251  ; offset = 5
	sbci R19,255
	lds R16,_l_trap
	lds R17,_l_trap+1
	xcall _trap_ctrler
	.dbline 357
	xjmp L147
L146:
	.dbline 357
; 	} else if ( key_buf & BIT( R_DECE_KEY ) ){
	sbrs R20,7
	rjmp L148
	.dbline 357
	.dbline 358
; 		trap_ctrler( l_trap.des_speed, r_trap.des_speed - SPEED_INC );
	lds R18,_r_trap
	lds R19,_r_trap+1
	subi R18,5
	sbci R19,0
	lds R16,_l_trap
	lds R17,_l_trap+1
	xcall _trap_ctrler
	.dbline 359
; 	}	
L148:
L147:
L145:
L143:
	.dbline -2
	.dbline 360
; }
L133:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r key_buf 20 i
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 363
; 
; void main(void)
; {
	.dbline 364
; 	init_devices();
	xcall _init_devices
	.dbline 365
; 	rst_ctrl();
	xcall _rst_ctrl
L151:
	.dbline 367
; 	
; 	do{
	.dbline 368
; 		WDR();
	wdr
	.dbline 369
L152:
	.dbline 369
	xjmp L151
X17:
	.dbline -2
	.dbline 370
; 	}while(1);
; }
L150:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile G:\汽艇\source\key_board\boat.c
_key_prev_status::
	.blkb 1
	.dbsym e key_prev_status _key_prev_status c
_key_status::
	.blkb 2
	.dbsym e key_status _key_status i
_rbuf::
	.blkb 20
	.dbsym e rbuf _rbuf A[20:20]c
_tbuf::
	.blkb 20
	.dbsym e tbuf _tbuf A[20:20]c
_delay_counter::
	.blkb 2
	.dbsym e delay_counter _delay_counter i
_r_temp_speed::
	.blkb 2
	.dbsym e r_temp_speed _r_temp_speed i
_l_temp_speed::
	.blkb 2
	.dbsym e l_temp_speed _l_temp_speed i
_r_trap::
	.blkb 12
	.dbsym e r_trap _r_trap S[_trap]
_l_trap::
	.blkb 12
	.dbsym e l_trap _l_trap S[_trap]

⌨️ 快捷键说明

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